Aries-Blueprint理论与实战

        Blueprint提供了一个针对OSGi的依赖注入的框架,而OSGi联盟在OSGi纲要R4.2对此进行了标准化。它被

设计用来处理OSGi的服务可以成为随时可用和不可用的动态性质。规范设计成可与普通的Java对象(PO​​JO)

合作,在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/

猜你喜欢

转载自springsfeng.iteye.com/blog/1508461