快速业务通道

模块化Java:静态模块化 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
org.osgi.framework, com.infoq.templater.api可以达到相同 的效果。

不管如何声明依赖于templater的bundle,我们都只能访问单一的输出包 com.infoq.templater。尽管client可以通过 TemplaterFactory.getTemplater()来访问 templater,但是我们不能直接从internal包中访问该类。这样我们在未来就可以在不影 响client的情况下改变templater类的实现。

测试该系统

任何OSGi应用实际上都是一组bundle。在本例中,我们需要编译并把bundle打包为JAR (如前面所述),启动OSGi引擎,安装两个bundle。下面是在Equinox中进行操作的例子 :

java -jar org.eclipse.osgi_* -console osgi> install file:///tmp/com.infoq.templater-1.0.0.jar Bundle id is 1 osgi> install file:///tmp/com.infoq.amazon-1.0.0.jar Bundle id is 2 osgi> start 2 Starting  http://www.amazon.co.uk/dp/1411609255 

Amazon client bundle现在已经启动了;当其启动时,它先用(硬编码的)给定值为 我们初始化URI template。然后在该bundle启动过程中打印出来以确定其已正常工作。当 然,一个真正的系统不会这么死板;但是Templater服务可以用于任何其他应用(例如, 产生一个基于Web的应用中的链接)。将来,我们将能够在OSGi环境中查看Web应用。

带版本的依赖

本文最后要指出的是目前我们所谈的依赖都没有版本;更确切的说,我们可以使用任 意版本。两个bundle整体及各个包都可以有版本,增大minor 号通常 意味着增加了新特 性(但保持向后兼容)。以org.osgi.framework包为例,OSGi R4.1中是1.4.0,OSGi R4.2中是1.5.0。(顺便提一句,这是bundle版本和销售版本保持分离的很好理由,Scala 语言已经这么做了)。

要声明依赖处于一个特定版本,我们必须在Import-Package或Require-Bundle中来表 达。比如,我们可以指定 Require- Bundle: com.infoq.templater;bundle- version="1.0.0"以表示工作所需的最低版本为1.0.0。类似的,我们可以用 Import- Package: com.infoq.templater.api;version="1.0.0"做相同的事情 —— 但是要记住 package与bundle版本是完全分开的。如果你不指定版本,缺省为0.0.0,因此,除非指定 了相应的Export-Package: com.infoq.templater.api;version="1.0.0"否则该输入不会 被解析。

还可以指定一个版本范围。例如,按惯例OSGi版本的major号增大表示向后兼容发生改 变,因此我们可能想将其限制在1.x的范围内。我们可以通过 (bundle-) version="[1.0,2.0)"的方式来表达这一依赖约束。该例中,[表示‘包含’,而)表示‘ 不包含’。换句话说,‘从 1.0到2.0但不包括2.0’。实际上,将一个依赖约束表达为‘ 1.0’与“[1.0,∞)”意思是一样的——换句话说,比1.0版高都可以。

尽管这些内容超出了本文的范围,但是在一个OSGi系统中,一个bundle同时有两个版 本也是可能的。如果你有一个老client依赖于1.0版本 API,同时又一个新client依赖于 2.0版本API,这就非常有用了。只要每个bundle的依赖是一致的(换句话说,一个bundle 不能直接或间接同时输入1.0和2.0)那么应用程序将工作良好。作为读者练习,你可以创 建一个使用泛型的2.0版的Templater API,然后让一个client依赖于1.x,而另一个依赖 于2.x。

总结

在本文中,我们探讨了开源OSGi引擎Equinox、Felix和Knopflerfish,并且创建了两 个有依赖关系的bundle。我们还谈到了带版本的依赖。截止目前,模块化还是静态的;我 们还没有涉及到OSGi的动态本质。在下一篇文章中我们将涉及这一内容。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号