模块化Java:声明式模块化 - 编程入门网
c策略,当IShorten服务改变时,DS将对新服务调用setShorten() ,随后对老服务调用unsetShorten()。
DS在unset之前调用set的原因是维持服务持续性。如果替换服务时先调用 unset,shorten服务就有可能短暂为null。这也就是为什么unset方法还带个参 数,而不是把服务设置为null的原因。 服务的基数性(cardinality)默认为1..1,其可取下列值之一: 0..1 可选的,最多1个 1..1 强制的,最多1个 0..n 可选的,多个 1..n 强制的,多个 如果不满足基数性(例如,设置为强制,但是没用shortening服务),那么 组件是失效的。如果需要多个服务,那么每个服务都调用一次setShorten()。相 反,对每个要卸载的服务都要调用unsetShorten()。 这里并没有展示组件在进入运行状态时对每个实例进行定制的能力。 在DS 1.1里,组件元素也有activate和deactivate属性,在组件激活(启动 )和失效(停止)过程中相应方法被调用。 最后,这一组件还提供一个CommandProvider服务的实例。这是一个Equinox 特定的服务,允许提供控制台命令,而这以前是在bundle的Activator中实现的 。这种模式的好处是,只要依赖服务可用,CommandProvider服务将自动被发布 ;除此之外,代码本身不需要依赖任何OSGi API。 还需要针对Felix特定实现采用类似解决方案;因为到目前为止,OSGi command shell还没有标准。OSGi RFC 147是一个正在进行中的规范,允许命令 在不同控制台执行。我们的例子源代码中包含了shorten-command-felix组件的 完整定义。 启动服务 上面所述方法让我们可以以任何顺序供给(及消费)shortening服务。一旦 command服务启动了,它将绑定到可用的最高优先级的 shortening服务上;或者 ,如果没有指定优先级,则绑定到拥有最低服务级别的服务上。我们现在不去考 虑次高优先级服务随后是否应该被启动,而是继续使用目前已绑定到的服务。可 是,如果服务卸载,我们就要重新绑定,以维持最高优先级shortening服务对 client不会中断。 为运行这个例子,这两个平台都需要下载并安装一些额外的bundle: Felix Config Admin (org.apache.felix.configadmin-1.2.4.jar) SCR Declarative Services (org.apache.felix.scr-1.2.0.jar) Equinox: org.eclipse.equinox.ds org.eclipse.equinox.util org.eclipse.osgi.services 模块化Java:声明式模块化(4)时间:2010-11-29 infoq 译:宋玮截止目前,你应该已经熟悉安装和启动bundles的过程了;如果没有,请参考 静态模块化那篇文章。我们需要安装上述bundle,以及我们的shortening服务。 下面是在Equinox环境下的操作过程,其中bundle放在/tmp目录下:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |