快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
http://www.infoq.com http://tr.im/HCRx osgi> stop 7 osgi> shorten http://www.infoq.com ...

当我们安装并启动我们的依赖后(包括shorten命令),shorten命令仍不能 在控制台显示结果。只有当我们启动针对shorten命令所注册的shortening服务 时才行。

当地一个shortening服务停止时,实现自动转移至第二个shortening服务。 第二个服务也停掉的话,shorten command服务则自动清除注册。

注意

声明式服务让连接OSGi服务更加容易。可是还有几点需要注意。

DS bundle需要安装并启动,以把组件连接起来。这样,DS bundle作为OSGi 框架启动部分的一部分来安装,比如Equinox的osgi.bundles或Felix的 felix.auto.start。

DS通常有其他依赖需要安装。以Equinox为例,要包括equinox.util bundle 。

声明式服务是OSGi Compendium Specification的一部分,而不是核心规范的 一部分,因此对于服务接口通常需要由一个独立的bundle提供。在Equinox环境 下,是由osgi.services提供,但在Felix环境下,接口由SCR(Service Component Registry——服务组件注册)bundle自身输出。

声明式服务可以用properties来配置。通常利用OSGi Config Admin服务;尽 管这是可选的。因此DS的有些部分需要运行Config Admin;实际上,Equinox 3.5有一个bug,如果要用Config Admin,它需要在DS(Declarative Services)之 前启动。这往往要求使用start-up 属性,以确保满足正确的依赖。

OSGI-INF目录(与XML文件一起)需要被包含进bundle中,否则DS看不到它。 你还需要确保Service-Component头在bundle的manifest中存在。

还可能要用Service-Component: OSGI-INF/*.xml来包含所有组件而不是逐个 罗列其名字。这也允许fragment给一个bundle增加新组件。

bind和unbind方法需要synchronized以避免潜在的竞争情况出现,尽管在 AtomicReference之上使用compareAndSet()还可以被用作单个服务的non- synchronized占位符。

DS组件不需要OSGi接口,这样,它可以在其他控制反转模式(如Spring)里 被模拟来测试或使用。可是Spring DM 和OSGi Blueprint服务都可用来组织服务 ,这就留作将来的话题吧。

DS 1.0 没有定义默认的XML命名空间;DS 1.1 增加了 http://www.osgi.org/xmlns/scr/v1.1.0命名空间。如果文件中没有出现命名空 间,就认为其兼容DS 1.0。

总结

本文中,我们讨论了如何将我们的实现与OSGi API解耦,并使用哪些组件的 声明式描述。声明式服务提供了组织组件和注册服务的能力,帮助避免启动顺序 依赖。另外,动态本质意味着当我们的依赖服务起停时,组件/服务也随之起停 。

最后,无论使用DS还是手动管理服务,都使用的是相同的OSGi服务层以便通 信。因此,一个bundle可以通过手动方法提供服务,另一个可以用声明式服务来 消费它(反之亦然)。我们应能够混合并匹配1.0.0和1.1.0实现,并且它们应能 透明地工作。

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