首页 > OOP语言 > 其它 > 正文

使用Blueprint Container规范构建OSGi应用程序
2012-03-30 00:00:00   来源:www.bianceng.cn   评论:0 点击:

暂时无描述信息

简介

OSGi 框架为开发模块化的动态应用程序提供了良好的机制,它最近正变得十分流行。最新的 OSGi Service Platform Release 4 V4.2 规范包括了一个名为 Blueprint Container 的规范。

Spring 动态模块

如果熟悉 Spring 框架的话,您将注意到 Spring 和 Blueprint Container 规范之间有许多相似点。 Blueprint 规范的基础恰好是 Spring Dynamic Modules 项目。

Blueprint Container 规范为 OSGi 定义了一个 依赖性注入(dependency injection)框架。它的目 的是处理 OSGi 的动态特性,即服务可以在任何时间变得可用和不可用。该规范的另一个意图是处理普通 旧 Java 对象(POJO),这样相同的对象就可以用于 OSGi 框架的内部和外部。定义并描述应用程序各个 组件的 Blueprint XML 文件对 Blueprint 编程模型十分重要。规范描述了组件如何被实例化,以及如何 相互连接在一起形成一个可以运行的应用程序。

Blueprint Container 规范使用了一个扩展器(extender)模式,借助这种模式,扩展器包监视框架 中的包的状态,并根据这些包的状态为它们执行操作。Blueprint 扩展器包等待包被激活,然后检查它们 是否是 Blueprint 包。如果一个包包含一个或多个 Blueprint XML 文件,那么它就被认为是 Blueprint 包。这些 XML 文件位于一个 OSGI-INF/blueprint/ 目录下的某个固定位置,或者在 Bundle-Blueprint 清单头部中显式指定。

一旦扩展器确定某个包是 Blueprint 包后,它将为这个包创建一个 Blueprint Container。这个 Blueprint Container 负责完成以下操作:

解析 Blueprint XML 文件

实例化

将组件连接在一起

在初始化期间,Blueprint Container 确保强制服务引用得到满足,将所有服务注册到服务注册表中 ,然后创建初始的组件实例。Blueprint 扩展器包还在包停止后为该包销毁 Blueprint Container。

本文将关注 Blueprint XML。通过若干示例展示组件 XML 定义及其使用。

Blueprint XML

Blueprint XML 文件被标识为顶级 blueprint 元素,如清单 1 所示。

清单 1. Blueprint XML 文件片段

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns=”http://www.osgi.org/xmlns/blueprint/v1.0.0”>
   ...
</blueprint>

Blueprint XML 文件包含各种组件管理器的定义。Blueprint Container 规范定义了四种主要的组件 管理器:一个 bean manager、一个 service manager 和两个 service reference managers。每种管理 器都负责创建和管理所创建组件的生命周期。管理器提供了一个组件实例。每个管理器都拥有相应的 XML 元素,用于描述管理器属性。管理器可以是顶级管理器,或者内联在其他管理器定义内。管理器还具有一 些通用的属性。

id 定义管理器的 ID。id 属性是可选属性。如果没有指定的话,将自动生成一个唯一 ID 并分配给顶 级管理器。内联管理器被认为是匿名的,因此不允许设置 id 属性。管理器 ID 在 Blueprint Container 内对于所有顶级管理器必须是唯一的。管理器使用 ID 彼此引用。例如,在注入期间,管理器将要求被引 用的管理器提供对象,该对象将被注入到管理器正在创建的组件中。activation 这个可选属性为管理器 定义激活模式。可支持两种激活模式:

eager,其中管理器在 Blueprint Container 初始化期间激活。

lazy,其中管理器按需要激活。

默认情况下,启用 eager 激活模式。然而,通过对 blueprint 元素设置 default-activation 属性 ,可以为 Blueprint XML 文件内的所有管理器修改默认激活模式。当要求管理器提供其第一个组件实例 时,管理器将被激活。当 Blueprint Container 被销毁时,管理器将被解除激活。每个管理器都拥有自 己的激活和解除激活步骤。dependsOn这个可选属性指定了一个管理器 ID 列表。所列出的管理器将在其 他管理器之前激活。管理器可以具有显式或隐式的依赖关系。dependsOn 属性定义了显式的依赖关系。隐 式依赖关系在管理器定义中通过对其他管理器的引用定义。

相关热词搜索:

上一篇:使用CBE和JAXB集成实现对WAS上应用程序的业务数据监控
下一篇:使用 Apache MINA 2 开发网络应用

分享到: 收藏