快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
;?> <scr:component name="shorten-tinyurl"  xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">   <implementation class="com.infoq.shorten.tinyurl.TinyURL"/>   <service>   <provide interface="com.infoq.shorten.IShorten"/>   </service> </scr:component>

当DS处理这一组件时,其效果与代码context.registerService( com.infoq.shorten.IShorten.class.getName(), new com.infoq.shorten.tinyurl.TinyURL(), null );基本一样。Trim()服务需要类 似的声明,在下面的源代码中包含着这部分内容。

如果需要的话,一个单一组件可以基于不同接口提供多个服务。一个bundle 也可以包含多个组件,使用相同或不同的类,每个都提供不同的服务。

模块化Java:声明式模块化(2)

时间:2010-11-29 infoq 译:宋玮

消费服务

要消费该服务,我们需要修改ShortenCommand,这样它就绑定到IShorten服 务的一个实例上:

package com.infoq.shorten.command; import java.io.IOException; import com.infoq.shorten.IShorten; public class ShortenCommand {   private IShorten shorten;   protected String shorten(String url) throws  IllegalArgumentException, IOException {   return shorten.shorten(url);   }   public synchronized void setShorten(IShorten shorten)  {   this.shorten = shorten;   }   public synchronized void unsetShorten(IShorten shorten)  {   if(this.shorten == shorten)    this.shorten = null;   } } class EquinoxShortenCommand extends ShortenCommand {...} class FelixShortenCommand extends ShortenCommand {...}

注意,不像上一次,这次没有对OSGi API产生依赖;mock一个实现来检验其 是否工作正常也很轻松。那个synchronized修饰符确保了在服务get/set时不会 产生竞争情况。

为了告诉DS需要把IShorten服务实例绑定到我们的EquinoxShortenCommand组 件上,我们需要定义其所需的服务。当DS实例化你 的组件时(用默认构造器) ,它将通过调用定义在bind属性里的方法(setShorten())来设置IShorten服务 。

<?xml version="1.0" encoding="UTF-8"?> <scr:component name="shorten-command-equinox"  xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">   <implementation  class="com.infoq.shorten.command.EquinoxShortenCommand"/>   <reference   interface="com.infoq.shorten.IShorten"   bind="setShorten"   unbind="unsetShorten"   policy="dynamic"   cardinality="1..1"   />   <service>   <provide  interface="org.eclipse.osgi.framework.console.CommandProvider"/>   </service> </scr:component>

无论bundle的启动顺序如何,一旦IShorten服务可用,该组件就将被实例化 并连接到这个服务。有关策略(policy)、基数性(cardinality)和服务 (service)的内容在下一节再做解释。

模块化Java:声明式模块化(3)

时间:2010-11-29 infoq 译:宋玮

策略和基数性

策略(policy)可被设为static或dynamic。static策略表示一旦设置,服务 不会变化。如果服务不可用了,组件也就失效了;如果一个新服务出现,那么就 创建一个新的实例,并将该服务重新绑定。这显然比我们就地更新服务要费劲得 多。

使用dynami

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