1、Core Framework
Core Framework是OSGI规范中的核心部分,它为基于OSGI的应用系统提供了标准的运行环境,从本质上保证了基于OSGI规范化的开发和部署动态性的系统。
OSGI框架由四层组成:L0:运行环境
L1:模块
L2:生命周期管理
L3:服务注册
L0运行环境是指标准的Java环境。只要具备Java2的构造和轮廓的都是被认可的运行环境。OSGI同时也定义了一个可运行的Bundles的最小环境的标准。
L1模块层定义了所采用的类加载器机制。OSGI是一个强大、严格、规范的类加载模型,基于Java但增加了模块化。在Java中,通常都是有一个Classloader来加载所有的类和资源文件。在OSGI模块层中则为模块提供各自的ClassLoader,同时为模块的关联提供控制。
L2生命周期管理层则为Bundles动态安装、启动、停止、更新和卸载提供了支持。基于L1提供的模块类加载机制的基础上,增加了一个对于Bundle的管理的API。
L3增加了服务注册。服务注册为Bundles提供了一个动态的协作模型。本来Bundles可通过传统的class共享方式来实现协作,但在动态的安装和卸载代码的环境下这种方法是不适用的。服务注册为Bundles间共享Objects提供了一种可用的模型,OSGI提供了一堆的事件来通知服务的使用者关于服务的注册和卸载,服务其实就是简单的Java objects。
在OSGI Framework中还包括一个安全层次(Security Layer),OSGI的安全层次基于Java的安全机制进行了扩展,增加了一些新的约束以及填补了Java安全机制中的遗漏。
1.1Module Layer
在OSGI规范中,将Module命名为Bundle,所以在OSGI框架中采用Bundle的方式来组织和部署系统。Bundle和普通Java工程唯一的不同就是在MANIFEST.MF中编写Bundle的元数据信息。其中元数据信息描述为:
属性 | 属性描述 |
Bundle-Activator | Bundle的Activator类名。示例:Bundle-Activator:org.riawork.demo.Activator |
Bundle-Category | Bundle的分类属性描述。示例:Bundle-Category:Opendoc,OSGI |
Bundle-Classpath | Bundle的Classpath。示例:Bundle-Classpath:/bin,/lib/log4j.jar |
Bundle-ContactAddress | 提供Bundle的开发商的联系地址。示例:Bundle-ContactAddress:Shanghai |
Bundle-Copyright | Bundle的版权 |
Bundle-Description | Bundle的描述信息。 |
Bundle-DocURL | Bundle的文档URL地址 |
Bundle-Localization | Bundle的国际化文件 |
Bundle-ManifestVersion | 定义Bundle所遵循的规范的版本,OSGI R3对应的版本值为1,R4对应的值为2 |
Bundle-Name | Bundle的有意义的名称 |
Bundle-NativeCode | Bundle所引用的NativaCode地址 |
Bundle-RequiredExecutionEnvironment | Bundle 运行所需要的环境 |
Bundle-SymbolicName | Bundle 的唯一标识名,可采用类似 java package 名机制来保证唯一性。 |
Bundle-UpdateLocation | Bundle 更新时连接的 URL 地址 |
DynamicImport-Package | Bundle 动态引用的 package。 |
Export-Package | Bundle 对外暴露的 package |
Fragment-Host | Fragment 类型 Bundle 所属的 Bundle 名 |
Import-Package | Bundle 引用的 package。 |
Require-Bundle | Bundle 所需要引用的其他的 Bundle |
Bundle-Vendor | Bundle 的开发商 |
Bundle-Version | Bundle 的版本。 |
对于之上的Bundle的元数据属性的值,都支持增加附加过滤属性的方式。如Import-Package可以使这样的格式:
Import-Package:org.riawork.opendoc.osig;version="[1.0,2.0)";resolution:=mandatory,org.riawork.opendoc.riawork;Company=RIAWork