初探Java企业级开源框架OSGi

发表于:2011-5-16 09:30

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:付江    来源:CSDN

分享:

  OSGi 版HelloWorld

  到了真的写一个HelloWorld 的时候了,该应用设计如下图:

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

  在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();
}

  同样类似的新建一个名为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\"");
    }
}

43/4<1234>
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • wmzsoft
    2015-6-02 10:15:35

    httop://osgi.jxtech.net 就是一个基于OSGi的企业级开发平台,从在线演示和免费插件来看,做得十分优秀。

  • wmzsoft
    2015-5-26 15:56:42

    http://osgi.jxtech.net 就是一个成功的OSGi企业级开发平台。

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号