使用 Blueprint Container 规范构建 OSGi 应用程序
2009-11-26 00:00:00 来源:WEB开发网例如,清单 7 中的引用的选择过滤器为 (&(objectClass=java.io.Serializable)),而清单 9 中的引用的选择过滤器为 (&(objectClass=java.io.Serializable)(osgi.blueprint.compname=myAccount)(mode=shared))。
清单 9. 服务选择示例 <reference id=”serviceReferenceTwo”
interface=”java.io.Serializable”
component-name=”myAccount”
filter=”(mode=shared)”/>
可用性
在 Blueprint Container 继续进行初始化之前,服务引用管理器需要至少一个服务匹配其选择条件。这一要求是由 availability 属性控制的。availability 属性可以有两个值:
optional匹配选择条件的服务可能存在,也可能不存在。 mandatory至少存在一个匹配选择条件的服务。
默认情况下,假定使用 mandatory 可用性。通过使用 blueprint 元素的 default-availability 属性,可以为 Blueprint XML 中的所有服务引用管理器修改默认可用性设置。
具有 mandatory 可用性的服务引用管理器(具有一个匹配服务)被认为是可以满足需求的。具有 optional 可用性的服务引用管理器总是被认为可以满足需求,即使它不具备任何匹配的服务。Blueprint Container 初始化将被延迟,除非所有强制服务引用管理器都得到满足。
必须要注意的一点是,只有在 Blueprint Container 初始化期间才考虑 mandatory 可用性。完成初始化后,随着服务在任意时刻的变化,强制服务引用将不能被满足。
清单 10 展示了一个具有 mandatory 可用性的引用管理器的示例。
更多精彩
赞助商链接