《深入理解OSGi:Equinox原理、应用与最佳实践》一2.6 定义执行环境

    xiaoxiao2022-05-25  179

    2.6 定义执行环境

    某些Bundle必须在特定的执行环境之下才能正常运作,例如为大型服务端应用而设计的Bundle一般不能运行在嵌入式设备之中,而利用JDK1.6开发的Bundle无法运行在JDK1.5的应用服务器之中等。为了确保Bundle可用性,元数据信息中提供了Bundle-RequiredExecutionEnvironment标记来描述Bundle对执行环境的要求,示例如下:Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0OSGi对执行环境定义的命名是直接继承于Java平台的执行环境名称,如图2-17所示为Eclipse配置界面中执行环境与JRE关联的设置对话框。对于每一个执行环境,在OSGi框架中应该对应一套系统运行参数的默认配置。前面提到过的org.osgi.framework.bootdelegation、org.osgi.framework.system.packages等参数的默认值都由执行环境决定。以Equinox框架为例,对于JavaSE-1.6这个执行环境,在Equinox框架中对应的配置存储在JavaSE-1.6.profile文件中,内容为:

    org.osgi.framework.system.packages = \ javax.accessibility,\ javax.activation,\ javax.activity,\ javax.annotation,\ ……//版面关系,省略其余的Package org.osgi.framework.bootdelegation = \ javax.*,\ org.ietf.jgss,\ org.omg.*,\ org.w3c.*,\ org.xml.*,\ sun.*,\

    com.sun.* org.osgi.framework.executionenvironment = \ OSGi/Minimum-1.0,\ OSGi/Minimum-1.1,\ OSGi/Minimum-1.2,\ JRE-1.1,\ J2SE-1.2,\ J2SE-1.3,\ J2SE-1.4,\ J2SE-1.5,\ JavaSE-1.6 org.osgi.framework.system.capabilities = \ osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0, 1.1, 1.2",\ osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6" osgi.java.profile.name = JavaSE-1.6 org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.source=1.6 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

    在OSGi R4.3规范发布后,元数据对执行环境的描述能力被进一步增量,引入了通用Capability的概念,通过Require-Capability和Provide-Capability两个新的标记也可以定义执行环境,例如:

    #R4.3之前的方式: Bundle-RequiredExecutionEnvironment: JavaSE-1.6 #R4.3新提供的方式: Require-Capability: osgi.ee;filter:="(&(osgi.ee="JavaSE")(version>=1.6))"

    定义了Require-Capability之后,OSGi框架在解析Bundle之前必须满足必要的Capability需求。典型使用场景是提供OSGi的声明式服务,该服务并不会表示为Package依赖,但为了能够正确解析Bundle,它又是必需的。


    最新回复(0)