快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
vator:

public class Activator implements BundleActivator {   public void start(BundleContext context) {   Hashtable properties = new Hashtable();   properties.put(Constants.SERVICE_RANKING, 10);   properties.put(Constants.SERVICE_VENDOR, "http://tr.im");   properties.put("home.page", "http://tr.im");   properties.put("FAQ", "http://tr.im/website/faqs");   context.registerService(IShorten.class.getName(),    new Trim(), properties);   } ... }

服务级别自动由ServiceTracker及其他对象来管理,但也可以用特定条件来 过滤。Filter是由LDAP风格的过滤器改编而来的,其使用了一种前缀表示法 (prefix notation)来执行多个过滤。虽然多数情况下你想提供类的名字 (Constants.OBJECTCLASS),但你也可以对值进行检验(包括限制连续变量的 取值范围)。Filter是通过BundleContext创建的;如果你想跟踪实现了 IShorten接口的服务,并且定义一个FAQ,我们可以这样做:

... public class ShortenCommand    public ShortenCommand(BundleContext context) {   Filter filter = context.createFilter("(&" +    "(objectClass=com.infoq.shorten.IShorten)" +    "(FAQ=*))");   this.tracker = new ServiceTracker(context,filter,null);   this.tracker.open();   }   ... }

在定义服务时可以被过滤或可以设置的标准属性包括:

service.ranking (Constants.SERVICE_RANKING) - 整数,可以区分服务优 先级

service.id (Constants.SERVICE_ID) - 整数,在服务被注册时由框架自动 设置

service.vendor (Constants.SERVICE_VENDOR) - 字符串,表明服务出自谁 手

service.pid (Constants.SERVICE_PID) - 字符串,代表服务的PID (persistent identifier)

service.description (Constants.SERVICE_DESCRIPTION) - 服务的描述

objectClass (Constants.OBJECTCLASS) - 接口列表,服务被注册在哪些接 口下

过滤器语法在OSGi核心规范的 3.2.7节 “Filter syntax”中有定义。最基 本的,它允许如等于(=)、约等于(~=)、大于等于、小于等于以及子字符串 比较等操作符。括号将过流器分组,并且可以结合使用“&”、“|” 或“! ”分别代表and、or和not。属性名不是大小写敏感的,值可能是(如果不用~=作 比的话)。“*”是通配符,可用来支持子字符串匹配,比如 com.infoq.*.*。

总结

本文中,我们介绍了如何使用服务进行bundle间通信,以替代直接类引用的 方法。服务可以让模块系统动态化,这样就能应对在运行时服务的变化问题。我 们还接触到了服务级别、属性及过滤器,并使用标准服务跟踪器来更容易的访问 服务并跟踪变化的服务。我们将在下一部分介绍如何用声明式服务使得服务的编 写更加容易。

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