OSGi简介
OSGi(open service gateway initiative )是一个组织,旨在建立一个开放的服务规范,通过网络向设备提供服务建立开放的标准。OSGi技术提供一种面向服务的架构,它能使这些组件无需重启就能动态地发现对方。又作为一种技术是面向Java的动态模型系统,允许应用程序使用精炼、可重用和可协作的组件构建的标准化原语。这些组件能够组装进一个应用和部署中。
OSGi规范的核心组件是OSGi框架。这个框架为应用程序(被叫做组件(bundle))提供了一个标准环境。整个框架可以划分为一些层次
L0:运行环--Java环境
L1:模块---模块层定义类的装载策略
L2:生命周期管理 --能够被动态安装、开启、关闭、更新和卸载的bundles
L3:服务注册--提供了一个在bundles间分享对象的完整模型
安全机制—L0~L4都存在
OSGI规范包括了构建开放的可交付网络服务的各方面,它又包括了许多子规范:
l Framework规范(OSGi的核心),提供一个安全的可管理的java framework 来部署可扩展的java服务。通过framework 可以支持bundle这种service application 的部署和扩展。OSGi兼容设备可以下载并安装OSGi bundles ,当不用时也可删除,bundles 安装后会注册一定数量的services ,这些services 可以被其他的bundles 使用。也即,OSGi动态的管理bundles,同时也管理bundles 和 services 之间的依赖关系。这种动态的加载功能使得开发者可以部署大规模的services。另外,这个framework 还为bundles的开发者提供了简明一致的编程模型,简化了开发部署的复杂性。这个编程模型运行开发者将子架的接口规范绑定到OSGi环境中的service。framework可能在不同的硬件环境上运行,但是一致的接口确保软件组可以运行在一致的服务接口上。
l package admin service 规范。来管理不同的bundle之间的引用关系,当bundle更新或是卸载时,判断是否有其他的服务正在使用当前得bundle。
l start level 规范。它定义了启动和停止一个OSGi service platform 时,不同的bundles的启动或通知的先后顺序。
l permission admin service 规范,权限管理。bundle是否许可执行另外的bundle的代码。
l URL handlers service 规范,怎样注册URL schema,如何将java.io.inputstream 对象转换为特定的java对象。
l 其它,n多子规范……
bundle 对象:
对每一个安装在OSGi service platform 上的bundle 都有一个与之关联的bundle 对象,这个对象来管理bundle 的 lifecycle ,管理bundle 由management Agent 完成。
bundle state 状态
installed: bundle被安装。
resolved:说明bundle所需要的java class 文件都可用了,这个bundle可以随时启动或停止。
starting:bundle 正在启动中…
stopping:bundle正在关闭中……
active:bundle 已经启动并在运行。
unistalled:bundle 已经被卸载。
eclipse使用OSGi就是为了实现它的完美动态加载。
项目名 |
说明 |
Manifest-Version |
Jar包的Manifest文件指定了版本号,通常是1.0 |
Bundle-ManifestVersion |
Bundle的Manifest文件指定了版本,通常是2 |
Bundle-Name |
Bundle的名称 |
Bundle-SymbolicName |
Bundle的Synbo名称,OSGi中以这个名称注册 |
Bundle-Version |
Bundle的版本。在OSGi中有可能多个不同版本的同一Bundle共存 |
Bundle-Activator |
管理Bundle生命周期的类名 |
Bundle-Vendor |
定义了制作Bundle的组织名称 |
Bundle-ActivationPolicy |
指定了Bundle启动的策略。 |
Import-Package |
指定了Bundle引用的包 |
Export-Package |
指定了Bundle向起他Bundle公开的包 |
Required-Bundle |
指定了Bundle引用的Bundle |