Blueprint提供了一个针对OSGi的依赖注入的框架,而OSGi联盟在OSGi纲要R4.2对此进行了标准化。它被
设计用来处理OSGi的服务可以成为随时可用和不可用的动态性质。规范设计成可与普通的Java对象(POJO)
合作,在J2SE环境中,可以编写简单的组件和测试。Blueprint的XML文件定义和描述了各种元件组装成
Blueprint程模型的关键。该规范描述如何将实例化的组件连接在一起,形成一个运行模块。
1. Blueprint Bundles
Blueprint容器规范使用扩展模式,即扩展Bundle监听框架中Bundle的状态,并执行代表根据其状态的那些
Bundle的操作。Blueprint 扩展Bundle等待被激活的Bundle,并检查它们是否是Blueprint Bundle。一个Bundle
被认为是一个Blueprint Bundle是它包含一个或多个Blueprint XML文件。这些XML文件是在一个固定的位置:
OSGI-INF/blueprint /目录下,或在MAINFIST.MF中明确指定Blueprint Header。
一旦扩展Bundle判定一个bundle是一个Blueprint Bundle,它将会创建一个代表该Bundle的Blueprint容器。
该容器负责:
(1) 解析Blueprint XML文件
(2) 实例化组件
(3) 连接组件
(4) 注册服务
(5) 查找服务引用
在初始化期间,Blueprint容器将确保强制服务引用满足、到服务注册表中注册的所有服务,并创建初始的组
件实例。当Bundle 停止时,Blueprint Bundle扩展同时负责销毁Blueprint 容器。
2. Bluepring XML
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
...
</blueprint>
Bean定义1:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<bean id="accountOne" class="org.apache.aries.simple.Account" />
</blueprint>
Bean定义2:
<bean id="accountTwo" class="org.apache.aries.simple.StaticAccountFactory" factory-method=
"createAccount">
<argument value="2"/>
</bean>
Bean定义3:
<bean id="accountFactory" class="org.apache.aries.simple.AccountFactory">
<argument value="account factory"/>
</bean>
<bean id="accountThree" factory-ref="accountFactory" factory-method="createAccount">
<argument value="3"/>
</bean>
3. Services
服务定义1:
<service id="serviceOne" ref="account" interface="org.apache.aries.simple.Account"/>
<bean id="account" class="org.apache.aries.simple.AccountImpl"/>
服务定义2:
<service id="serviceTwo" interface="org.apache.aries.simple.Account">
<bean class="org.apache.aries.simple.AccountImpl"/>
</service>
服务定义3:
<service id="serviceOne" ref="account" auto-export="interfaces" />
<bean id="account" class="org.apache.aries.simple.AccountImpl" />
服务定义4:
<service id="serviceFour" ref="account" autoExport="all-classes">
<service-properties>
<entry key="active">
<value type="java.lang.Boolean">true</value>
</entry>
<entry key="mode" value="shared"/>
</service-properties>
</service>
服务定义5-服务排名:
当有多个匹配的服务时,服务的排名将影响服务的选择。当在两个服务之间进行选择时,拥有更高等级的服
务将优先被选中,默认排名值是0。如:
<service id="serviceFive" ref="account" auto-export="all-classes" ranking="3" />
4. Reference
定义方式1:
<bean id="accountClient" class="...">
<property name="account" ref="accountRef" />
</bean>
<reference id="accountRef" interface="org.apache.aries.simple.Account"/>
定义方式2-指定引用的服务超时时间:
Bundle-SymbolicName: org.apache.aries.simple.account; blueprint.graceperiod:=false;
blueprint.timeout=10000;
<reference id="accountRef" timeout="20000" interface="org.apache.aries.simple.Account"/>
定义方式3:
<reference-list id="accountRefs" member-type="service-object" interface="org.apache.aries.simple
.Account" />
<reference-list id="accountRefs" member-type="service-reference" interface="org.apache.aries
.simple.Account"/>
5. 使用BlueprintContainer规范构建OSGi应用程序
http://www.ibm.com/developerworks/cn/opensource/os-osgiblueprint/