Blueprint规范理解(续)

参考Dynamism(活力,力度)

作为一个引用被注入的对象,实际上是注册到服务表中的一个代理。

一个代理可以使一个被注入的对象保持不变,当真正的服务来或者周或者被其他服务替代。

如果真正的服务不存在,而调用代理时,会发生阻塞,直到服务可用,或者超时发生,这时会抛出一个ServiceUnavaililableException。

   try {
      balance = account.getBalance();
   } catch (ServiceUnavailableException e) {
      ...
   }

缺省的blueprint超时时间是300秒,这个值可以基于每个bundle来改变,使用SymbolicName。下面的例子是关闭超时机制:

Bundle-SymbolicName: org.apache.aries.simple.account;
    blueprint.graceperiod:=false
下面的例子是将超时设置为10秒

Bundle-SymbolicName: org.apache.aries.simple.account;
    blueprint.graceperiod:=false; blueprint.timeout=10000;
超时可以被设置在一个独立引用上,使用timeout属性,下面的例子就是将account这个应用设置为超时20秒。

In all cases, a value of 0 means wait indefinitely for the reference to become satisfied.

如果timeout的值设置为0,意味着调用端会无限期等下去,直到服务可用。

Reference Lists

可以使用reference-list元素找到多个匹配的service。这个元素提供了一个对象列表,包括了服务代理对象和服务引用对象。这些对象通过Member-type属性来区别。这个列表时动态的,随着注册表中服务的增加和减少,这个列表对应的增长和缩减。

这个列表对象是只读的并且类型是List的子类。

在reference-list中的代理类不同于引用类型,reference-list代理目标是一个特定的服务,没有超时,当服务不可用也不会抛出ServiceUnavailableException的异常。

下面的例子显示一个reference-list返回一个服务对象(代理)列表,

<reference-list id="accountRefs" member-type="service-object"
    interface="org.apache.aries.simple.Account" />
下面显示一个例子,返回ServiceReference对象列表。

<reference-list id="accountRefs" member-type="service-reference"
    interface="org.apache.aries.simple.Account" />
 

你可能感兴趣的:(职场,osgi,blueprint,休闲)