快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
功能描述和厂商)。

只要该bundle一启动,缩写服务就可用了。当bundle停止,框架将自动取消 服务注册。如果我们想要自己取消注册(比方说,对错误代码和网络接口不可用 所作出的响应)也很容易(用context.unregisterService())。

使用服务

一旦服务起来并运行之后,我们就可以用client访问它了。如果运行的是 Equinox,你可以用services命令罗列所有已安装的服务,以及它们是由谁注册 的:

{com.infoq.shorten.IShorten}={service.id=27}   Registered by bundle: com.infoq.shorten.trim-1.0.0 [1]   No bundles using service. {com.infoq.shorten.IShorten}={service.id=28}   Registered by bundle: com.infoq.shorten.tinyurl-1.0.0 [2]   No bundles using service.

在调用服务处理URL之前,client需要解析服务。我们需要获得一个服务引用 ,它可以让我们查看服务自身内部的属性,然后利用其来获得我们感兴趣的服务 。可是,我们需要能够重复处理相同及不同的URL,以便我们可以把它集成到 Equinox或Felix的shell里。实现如下:

package com.infoq.shorten.command; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; import com.infoq.shorten.IShorten; public class ShortenCommand {   protected BundleContext context;   public ShortenCommand(BundleContext context) {   this.context = context;   }   protected String shorten(String url) throws  IllegalArgumentException, IOException {   ServiceReference ref =    context.getServiceReference(IShorten.class.getName());   if(ref == null)    return null;   IShorten shorten = (IShorten) context.getService(ref);   if(shorten == null)    return null;   return shorten.shorten(url);   } }

模块化Java:动态模块化(4)

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

当shorten方法被调用时,上面这段程序将查找服务引用并获得服务对象。然 后我们可以把服务对象赋值给一个IShorten对象,并使用它与前面讲到的已注册 服务进行交互。注意这些都是在同一个VM中发生的;没有远程调用,没有强制异 常,没有参数被序列化;只是一个POJO与另一个POJO对话。实际上,这里与最开 始class.forName()例子的唯一区别是:我们如何获得shorten POJO。

为了在Equinox和Felix里面使用这一服务,我们需要放一些样板代码进去。 必须提一下,当我们定义manifest时,我们可以在 Felix和 Equinox命令行上声 明可选依赖,这样,当我们两者中任何一个安装之后,我们就可以运行了。(一 个更好的解决方案是将其部署为单独的bundles,这样我们可以去掉选项;但是 如果bundle不存在,activator将会失败,因此无法启动)。Equinox和Felix特 定命令的源代码在com.infoq.shorten.command bundle中。

如果我们安装了命令client bundle,我们将得到一个新命令,shorten,通 过OSGi shell可以调用它。要运行该命令,需要先执行java -jar equinox.jar -console -noExit或java -jar bin/felix.jar,然后安装bundle,之后你就可 以使用该命令了:

java -jar org.eclipse.osgi_* -console -noExit  osgi> install file:///tmp/com.infoq.shorten-1.0.0.jar Bundle id is 1 osgi> install file:///tmp/com.infoq.shorten.command- 1.0.0.jar Bundle id is 2 osgi> install file:///tmp/com.infoq.shorten.tinyurl- 1.0.0.jar Bundle id is 3 osgi> install file:///tmp/com.infoq.shorten.trim-1.0.0.jar Bundle id is 4 os

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