快速业务通道

初探Java企业级开源框架OSGi - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
服务应用,在功能上有点类似于main 函数的味道。这个HelloWorld demo 的目的不但可以让读者小试牛刀,而且可以同时体会一下OSGi 最大的优点——服务状态的可更改性。BobSays、RodSays、KentSays 实现了SayHello 暴露的接口,它们是sayHello 的具体执行者,但是在SayHelloService 调用的过程中,我们可以动态的改变到底是谁来说。为了实现这个demo,还需要简单介绍一下OSGi 最简单的实现机制:OSGi Bundles 之间包的依赖关系。每一个OSGi Bundle 的类文件可分为私有的、引入的、暴露的三种,如下图所示

初探Java企业级开源框架OSGi - 编程入门网

在OSGi 中Exported Classes 是以包的方式暴露的,如图所示,SayHello 中暴露了接口所在的包,对应的BobSays等三个Bundles 和SayHelloService Bundle 都引入了该包,这是OSGi 中最简单的通信方式,OSGi 规范中推荐使用面向服务的通信方式,这里只是举一个简单的实例,因此不用做的那么复杂。

回到正题,启动你的Eclipse,新建一个名为SayHello 的plug-in project,在Target Platform 选项中,选择an OSGi Framework:Equinox。笔者自己设置了Activator 路径为org.osgi.demo.sayHello.Activator,每个Activator 都具有两个方法,start() 和 stop(),这两个方法是该bundle 启动、停止的时候,调用的方法,通常在这里注册、初始化或注销该Bundle 服务的过程,这里不需要更改任何Activator 中的内容,用系统自动生成的就可以了。在建立好项目后,会出现对SayHello 项目的配置,这里可以通过dependencies 选项卡,设置需要的plug-in 和引入的package;可以通过runtime 选项卡的设置,确定暴露哪些包。我们新建一个org.osgi.demo.say 包,并建立SayHello 接口,只有一个返回void的方法sayHello() ,并将此包设为暴露的。这些设置都保存在项目的META-INF目录下的MANIFEST.MF文件中,以后要更改的话,只需打开该文件即可。 SayHello 接口的代码如下:

public interface SayHello {    public void sayHello(); }

初探Java企业级开源框架OSGi(5)

时间:2011-06-25 51cto

同样类似的新建一个名为BobSays 的plug-in project。笔者设置的包为org.osgi.demo.bob,这里需要在配置dependencies 的时候,将包org.osgi.demo.say 引入。创建新的类BobSays,代码如下:

public class BobSays implements SayHello {    public void sayHello() {      System.out.println("Bob says \"Hello OSGi world\"");    } }

这里需要覆写在BobSays Bundle 中的Activator 的两个方法,具体代码如下:

public class Activator implements BundleActivator {    private ServiceRegistration serviceReg = null;    public void start(BundleContext context) throws Exception {      serviceReg = context.registerService(SayHello.class.getName(),          new BobSays(), null);// 1    }    public void stop(BundleContext context) throws Exception {      if (serviceReg != null)        serviceReg.unregister();// 2    } }

完成的主要功能是:1、在启动服务的时候,注册BoySays 服务为一个SayHello 服务;2、在停止服务的时候,从上下文中卸载该服务。

类似的创建KentSays、RodSays 两个project。

最后,创建一个名为SayHelloService 的plug-in project。笔者设置的包为org.osgi.demo.service,同样在配置dependencies 的时候,将包org.osgi.demo.say 引入。创建SayHelloService类,代码如下:

public class SayHelloService {    private SayHello say;    public void helloWorl

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