快速业务通道

模块化Java:声明式模块化 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
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目录下:

$ java -jar org.eclipse.osgi_* -console osgi> install  file:///tmp/org.eclipse.osgi.services_3.2.0.v20090520-1800.jar Bundle id is 1 osgi> install  file:///tmp/org.eclipse.equinox.util_1.0.100.v20090520-1800.jar Bundle id is 2 osgi> install  file:///tmp/org.eclipse.equinox.ds_1.1.1.R35x_v20090806.jar Bundle id is 3 osgi> install file:///tmp/com.infoq.shorten-1.0.0.jar Bundle id is 4 osgi> install file:///tmp/com.infoq.shorten.command- 1.1.0.jar Bundle id is 5 osgi> install file:///tmp/com.infoq.shorten.tinyurl- 1.1.0.jar Bundle id is 6 osgi> install file:///tmp/com.infoq.shorten.trim-1.1.0.jar Bundle id is 7 osgi> start 1 2 3 4 5 osgi> shorten http://www.infoq.com ... osgi> start 6 7 osgi> shorten http://www.infoq.com http://tinyurl.com/yr2jrn osgi> stop 6 osgi> shorten 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号