《深入理解OSGi:Equinox原理、应用与最佳实践》一2.6 定义执行环境-阿里云开发者社区

开发者社区> 华章出版社> 正文
登录阅读全文

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

简介: 本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第2章,第2.6节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.6 定义执行环境

某些Bundle必须在特定的执行环境之下才能正常运作,例如为大型服务端应用而设计的Bundle一般不能运行在嵌入式设备之中,而利用JDK1.6开发的Bundle无法运行在JDK1.5的应用服务器之中等。为了确保Bundle可用性,元数据信息中提供了Bundle-RequiredExecutionEnvironment标记来描述Bundle对执行环境的要求,示例如下:
Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0
OSGi对执行环境定义的命名是直接继承于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.*,\

screenshot

 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,它又是必需的。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: