下载OSGi规范文档
问题
软件复杂度以令人吃惊的速率增加。今天,复杂度大部分由以下原因导致:缩短的产品周期,大量增加的功能需求和同一产品大量变种(例如 不同的硬件和OS)。这些趋势已经促使软件成本占据任何厂商开发代价的更大比重。
现今,软件开发很大部分由调整已有的功能适应新的环境这样的工作组成。在过去的20年里,大量的标准构造模块可以使用,并且在今天的产品中大量被使用;一个最佳的例子是开源软件的成功。然而,这些库使用并不是没有问题。集成很多不同的库是极具挑战性的,因为很多库已经很复杂,并且需要他们自己的库运行——即使这些功能 在这个产品中从来不使用。
这种趋势要求整个软件产品进行大量的测试过程。增加不同库的不同步更新,软件开发代价高昂的原因变得非常清楚了。
一个主要问题是现在的软件环境关注于写新的软件,而不是集成已存在软件到新的系统里。事实上,集成已存代码已经成为软件工程师工作的很大一部分。因此,标准化软件集成方面的工具是有必要的,从而使重用已有组件变得可靠和廉价。
解决方案
OSGi 技术是面向Java的动态模型系统。OSGi服务平台向Java提供服务,这些服务使Java成为软件集成和软件开发的首选环境。 Java提供在多个平台支持产品的可移植性。OSGi技术提供允许应用程序使用精炼、可重用和可协作的组件构建的标准化原语。 这些组件能够组装进一个应用和部署中。
OSGi服务平台提供在多种网络设备上无需重启的动态改变构造的功能。为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方。OSGi联盟已经开发了为例如象HTTP服务器、配置、日志、安全、用户管理、XML等很多公共功能标准组件接口。这些组件的兼容性插件实现可以从进行了不同优化和使用代价的不同计算机服务提供商得到。然而,服务接口能够基于专有权基础上开发。
因为OSGi技术为集成提供了预建立和预测试的组件子系统,所以OSGi技术使你从改善产品上市时间和降低开发成本上获益。因为这些组件能够动态发布到设备上,所以OSGi技术也能降低维护成本和拥有独一无二的新的配件市场机会。
框架
OSGi规范的核心组件是OSGi框架。这个框架为应用程序(被叫做组件(bundle))提供了一个标准环境。整个框架可以划分为一些层次:
L0: 运行环境
L1: 模块
L2: 生命周期管理
L3: 服务注册
还有一个无处不在的安全系统渗透到所有层。
|
 |
|
L0 层执行环境是Java环境的规范。Java 2配置和子规范,象J2SE, CDC, CLDC, MIDP等等,都是有效的执行环境。OSGi平台已经标准化了一个执行环境,它是基于基础轮廓和在一个执行环境上确定了最小需求的一个小一些的变种,该执行环境对OSGi组件是有用的。
|
|
L1 模块层定义类的装载策略。OSGi框架是一个强大的具有严格定义的类装载模型。它基于Java之上,但是增加了模块化。在 Java中, 正常情况下有一个包含所有类和资源的类路径。OSGi模块层为一个模块增加了私有类同时有可控模块间链接。模块曾同安全架构完全集成,可以选择部署到部署封闭系统,防御系统,或者由厂商决定的完全由用户管理的系统。
|
|
L2 生命周期层增加了能够被动态安装、开启、关闭、更新和卸载的bundles。这些bundles依赖于于具有类装载功能的模块层,但是增加了在运行时管理这些模块的API。生命周期层引入了正常情况下不属于一个应用程序的动态性。扩展依赖机制用于确保环境的操作正确。 生命周期操作在安全架构保护之下,使其不受到病毒的攻击。 |
|
L3 层增加了服务注册。服务注册提供了一个面向bundles的考虑到动态性的协作模型。bundles能通过传统的类共享进行协作,但是类共享同动态安装和卸载代码不兼容。服务注册提供了一个在bundles间分享对象的完整模型。定义了大量的事件来处理服务的注册和删除。这些服务仅仅是能代表任何事物的Java对象。很多服务类似服务器对象,例如HTTP服务器,而另一些服务表示的是一个真实世界的对象,例如附近的一个蓝牙手机。 这个服务模块提供了完整安全保障。该服务安全模块使用了一个很聪明的方式来保障bundles之间通信安全。 |
无处不在的安全
安全机制是建立在Java和Java 2 安全模型基础之上。Java语言的设计对很多结构进行了限制。 例如病毒中经常遇到的缓存溢出是不可能发生的。Java语言中的访问控制符限制了代码可见性。OSGi平台通过使用私有类(在Java中不能用标准方式使用的机制)扩展了该模型。Java 2安全模型提供了一个完整模块检查代码对于资源的可访问性。OSGi增加了完全动态的权限管理,简化了操作者和系统管理员的工作。
标准服务
在该框架之上,OSGi联盟定义了很多服务。这些服务通过一个Java接口指定。bundles能够实现这个接口,并在注册服务层注册该服务。服务的客户端在注册库中找到它,或者当它出现或者消失时做出响应。这个同SOA架构使用Web服务进行发布的方式相似。两者主要不同是Web服务总是需要传输层,这个使它比采用直接方法调用的OSGi服务慢几千倍。同时,OSGi组件能够对这些服务的出现和消失做出响应。下一小节将对OSGi发行版本4服务作一个简要介绍。更多的信息可以从OSGi服务平台发行版本4手册或者PDF下载中找到。需要注意的是每一种服务都是抽象定义的,与不同计算机服务商的实现相独立。
框架服务
OSGi框架提供一个权限管理服务,一个包管理服务和一个开始级别服务。这些服务是一个可选部分,指示框架的操作。框架服务如下: