org.osgi.core-1.4.0-project源码分析:
OSGI(Open Service Gateway Initiative),即开放服务网关协议,是面向Java的动态模型系统。
OSGI架构:
OSGi服务平台由两部分组成:OSGi框架和OSGi标准服务(如图1-3所示)。OSGi框架是实现并提供OSGi功能的运行环境,OSGi标准服务定义了很多用于执行常见任务(如日志和首选项)的可重用API。
osgi框架的五个层次:
l 安全层 Security Layer
l 模块层 Module Layer
l 生命周期层 Life Cycle Layer
l 服务接口层 Service Layer
l 服务实现层 Actual Servic
各层之间的交互:
package org.osgi.framework是代码的核心组成部分,提供了一个通用的、安全可管理的Java framework。通过 Framework可以支持一种叫做组件的Service application的部署和扩展。
OSGI兼容设备可以下载并且安装OSGI组件,也可一旦不再需要的时候删除。组件安装后会注册一定数量的Services,并被由同一个Framework下的其它组件使用。
在一个动态扩展的的OSGI环境中,Framework管理组件的安装和更新,同时也管理组件和Services之间的依赖关系。
Framework提供给组件开发者必须的资源来在Java平台上开发,为开发的组件提供了代码 动态加载的功能, 也使得开发者开发、部署一个大规模的Services变的很容易。
其次,Framework为Java组件开发者提供了简明一致的编程模型,简化了开发部署的复杂性。编程模型允许开发者将自己的接口规范绑定到OSGI环境中的Service。
一.安全层
OSGi 安全层是 OSGi 服务框架的一个可选的层。它基于 Java 2 安全体系结构,提供了对精密控制环境下的应用部署和管理的基础架构。
与安全层有关的主要API:
public final class AdminPermission extends BasicPermission:
描述调用者对 bundle 进行特殊的管理操作或者是获取 bundle 敏感信息的权限。
描述调用者对 bundle 的管理操作或者获取信息的权限。
二.模块层
OSGi 框架提供框架定义了模型化单元,称之为一个 bundle。一个 bundle 由 java 的类和其他资源组成,可以为终端用户提供功能。通过良好定义的方式,Bundle 可以和导入(importer)及导出(exporter) Bundle 之间共享 Java 包。
在 OSGi 服务框架中,bundle 是仅有的需要部署的 Java 应用实体。
Bundle 的 描 述 信 息 在 一 个 manifest 文 件 中 , 在 JAR 文 件 中 的 META-INF 目 录 下 的MANIFEST.MF 文件。框架在 manifest 文件头中定义了 Export-Package 和 Bundle-Classpath 这样的 OSGi manifest 头,bundle 的开发人员可以使用它们提供 bundle 的描述信息。
三.生命周期层
生命周期层提供了 bundle 的生命周期管理和安全控制的 API。本层是建立在在模型和安全层之上。
与生命周期层有关的主要API:
Bundle — 框架中的安装完毕的 bundle。
BundleContext(bundle 上下文) — bundle 在框架中的执行上下文环境。当启动或者
停止一个 bundle 的时候,框架将它发送到一个 bundle 的激活器(Bundle Activator)。
BundleActivator(bundle 激活器) — 用于启动和停止 bundle 的,在 bundle 中实现的
一个接口。
BundleEvent(bundle 事件) — 在 bundle 内用于标志一个生命周期操作的事件。通过
bundle 的监听器来接收(同步)这样的事件。
FrameworkEvent(框架事件) — 标志错误或者框架状态改变的事件。通过框架的监
听器来接收框架事件。
BundleListener(bundle 监听器) — bundle 事件的监听器。
SynchronousBundleListener(同步 bundle 监听器) — 同步传送 bundle 事件的监听器。
FrameworkListener(框架监听器) — 框架事件的监听器。
BundleException(bundle 异常) — 当框架错误错误时抛出的异常。
SystemBundle(系统 bundle) — 框架声明的 bundle。
bundle 可以处于以下状态中的一种:
l INSTALLED — 成功安装 bundle
l RESOLVED — 所有 bundle 需要的 Java 类都准备好了。这个状态标志着 bundle 已经是
启动就绪或者是已经停止。
l STARTING — 正在启动 bundle。调用了 bundle 激活器的 start 方法,而且还没有从方法
中返回。
l ACTIVE — bundle 已经启动完毕,正在运行中。
l STOPPING — 正在停止 bundle。调用了 bundle 激活器的 stop 方法,而且还没有从方法
中返回。
l UNINSTALLED — bundle 已经卸载完毕,不能进入其他状态.