`
benniaolk
  • 浏览: 36777 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于Equinox开发OSGi应用(一)

    博客分类:
  • OSGi
阅读更多

 在本博客的前面一些文章中,简单介绍过OSGi的相关原理,通过上篇文章,我们知道bundle之间是可以相互依赖各自内部的包的——通过bundle的manifest.MF文件声明Import-Package,前提是被依赖的包通过manifest.MF文件声明了Export-Package,即被声明导出,只有这样的包才能被其他bundle引用。
这种声明式的导出及引用服务,极大的方便了模块(bundle)之间的交互,也有利于应用的模块划分。而这种声明式的服务调用方式又有别与Web Service的调用方式,OSGi的这种调用可以直接引用到其他bundle中的类,当然这仅限于相互依赖的bundle都在本地。
那么在Equinox中,到底该如何应用其他bundle中的类——我们称之为服务 呢?首先应该在导出服务的bundle中对服务进行注册,这样其他bundle就能在OSGi平台中识别并获取该服务。

 

1.开发环境的准备

现在的eclipse都已经包含了Equinox,无需单独下载。

 

2.开发OSGi的HelloWorld应用程序

在这一节,我们将开发一个OSGi bundle,演示如何利用Equinox进行OSGi bundle的开发、运行及调试,为之后的示例做准备。
首先,新建一个Plug-in工程,如下图所示:

 

下一步,注意选择目标平台,默认为Eclipse version *,将其改成Equinox,如下图所示:


 

之后按默认下一步即可,到最后一步时,无需根据模板创建工程,去掉默认的勾,如下图:


 

点击完成,创建的工程目录如下图所示:



 
 
 从图中,可以看到,eclipse为工程自动生成了一个Activator类,如下所示:

package helloworld;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

	/*
	 * (non-Javadoc)
	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
	 */
	public void start(BundleContext context) throws Exception {
		System.out.println("Hello World!");
	}

	/*
	 * (non-Javadoc)
	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
	 */
	public void stop(BundleContext context) throws Exception {
	}

}

 

有过eclipse插件开发经验的人应该很快就能明白,这就是该工程——实际上就是上一篇文章中所称的bundle在Equinox平台中的启动入口,相当于我们的熟悉的main函数,如果将该bundle运行到Equinox中,首先进入该bundle的是Activator的start方法,你可以将相关的服务、资源在该方法内完成向bundleContext的注册——文章后面会具体讲到相关内容。在运行期,如果想要该bundle停止运行,Equinox平台将调用Activator的stop方法,你可以在该方法内完成资源的注销等工作。
下面我们将要完成首次的Equinox运行,将向大家展现bundle到底是如何运行起来的。为helloworld选择运行方式,如下图所示:


 

弹出如下对话框:



 
 

在弹出的对话框中,新建一个OSGi Framework运行环境(双击OSGi Framework即可,这里为其取名Equinox),选中helloworld(1.0.0),然后点击右边的Add Required Bundles按钮,eclipse将自动选中运行helloworld的依赖bundle,如果有必要,可以点击右下的Validate Bundles验证按钮,验证程序正常运行所需的bundle是否都被选中,最后点击运行,回到控制台:
osgi> Hello World!
可以看到,之前在Activator的start方法中的输出语句已经被输出到控制台,我们可以通过命令ss查看Equinox的运行情况,可以看到一共运行了两个bundle,如下:
ss

Framework is launched.

id State       Bundle
0 ACTIVE      org.eclipse.osgi_3.4.3.R34x_v20081215-1030
1 ACTIVE      helloworld_1.0.0
还记得之前讲到过的bundle的几种状态吧?helloworld已经运行起来了。
那么Equinox具体支持哪些命令呢?下表列出了主要的一些命令,如需查看更详细的命令清单,则可以在控制台键入help。

 

类别

命令

含义

控制框架

launch

启动框架

shutdown

停止框架

close

关闭、退出框架

exit

立即退出,相当于 System.exit

init

卸载所有 bundle(前提是已经 shutdown

setprop

设置属性,在运行时进行

控制 bundle

install

安装

uninstall

卸载

start

启动

stop

停止

refresh

刷新

update

更新

展示状态

status

展示安装的 bundle 和注册的服务

ss

展示所有 bundle 的简单状态

services

展示注册服务的详细信息

packages

展示导入、导出包的状态

bundles

展示所有已经安装的 bundles 的状态

headers

展示 bundles 的头信息,即 MANIFEST.MF 中的内容

log

展示 LOG 入口信息

其它

exec

在另外一个进程中执行一个命令(阻塞状态)

fork

EXEC 不同的是不会引起阻塞

gc

促使垃圾回收

getprop

得到属性,或者某个属性

控制启动级别

sl

得到某个 bundle 或者整个框架的 start level 信息

setfwsl

设置框架的 start level

setbsl

设置 bundle start level

setibsl

设置初始化 bundle start level

 

至此,我们已经成功的演示了helloworld,初步了解了OSGi的bundle是如何开发并运行的,下面将进入我们的正题,下面我们将通过一个稍微复杂的示例,讲解bundle之间如何进行包依赖、注册及调用服务。

 

待续。。。下接   基于Equinox开发OSGi应用(二)

  • 大小: 17.4 KB
  • 大小: 4.6 KB
  • 大小: 1.5 KB
  • 大小: 15.2 KB
  • 大小: 10.6 KB
  • 大小: 6.2 KB
  • 大小: 21.1 KB
  • 大小: 4.6 KB
  • 大小: 21.3 KB
  • 大小: 50.5 KB
1
0
分享到:
评论

相关推荐

    使用Equinox开发OSGI应用程序工程及源码

    我实现的《使用Equinox开发OSGI应用程序》全部功能的代码和分发包,工程师基于Eclipse3.3的

    使用Equinox开发OSGi应用程序

    本教程就将演示如何在 Eclipse ...并结合示例代码演示 OSGi 开发的一些重要技术,最后探讨了基于 OSGi 应用程序一般所采用的架构,以及如何将 Equinox OSGi 应用程序脱离 Eclipse 而部署为一个标准的 Java 应用程序。

    《深入理解OSGi:Equinox原理、应用与最佳实践》

    第三部分基于Equinox的OSGi应用与实践,详细介绍了OSGi的服务纲要规范(OSGi ServiceCompendium)和OSGi企业级规范(OSGi ServiceEnterpress)中最常用的几个子规范内容,在这一部分里,将会把OSGi技术从理论落地到...

    基于Eclipse的Equinox框架开发OSGi Bundle应用

    博文链接:https://jiahej.iteye.com/blog/220177

    OSGI的较全资料(9+4)

    包括OSGI的相关书籍及网页: OSGi R4服务平台核心规范中译本 ...使用 Equinox 开发 OSGi 应用程序 基于 OSGi 和 Spring 开发 Web 应用 基于 OSGi 的面向服务的组件编程 探索 OSGi 框架的组件运行机制

    自己开发的OSGi Web Console

    1、自己开发的OSGi Web Console,适用于实现了OSGi规范的Equinox、Felix等...2、展示了如何把OSGi框架作为一个组件嵌入到现有的未基于OSGi开发的Web应用当中,在Web应用中可获取OSGi中的Service以增加应用的灵活性。

    OSGi and Equinox:Creating Highly Modular Java Systems

    阅读本书,首先你很快就会使用Eclipse bundle工具创建第一个基于OSGi的系统,进而转向复杂的产品开发。接下来,你将掌握一些用于创建具有特殊模块化、高效性和可维护性系统的最佳实践和技巧。你将了解所有的OSGi声明...

    OSGI框架实战

    6.7. Equinox基于OSGI的扩展...........37 6.8. 现有类型系统基于OSGI的开发..38 6.8.1. B/S.....38 6.8.2. C/S....39 6.8.3. 嵌入式.......39 6.9. 注意事项.......39 七. 深入OSGI.........41 7.1. 关于OSGI........

    OSGI原理最佳实践(包含源代码)

    是一本适合新接触OSGI开发学习的一本很好的书,本书介绍了Equinox, Spring-DM和Felix这三个常用的OSGi容器的使用、开发、以及WebApplication的开发部署;介绍了OSGi的规范和Core Framework和Layer。包含书中的用例源...

    emrys-webosgi:自动从code.google.compemrys-webosgi导出

    该方案基于OSGi的Equinox开源项目,以OSGi 插件的方式,实现了一个轻量级的JavaEE Web Container框架,使得以OSGi插件化方式开发大型JavaEE应用变为可能。该框架完全遵循OSGi Enterprise Specification r4.2规范文档...

    Jetty中文手册

    如何让一个应用响应一个特定端口 使用JNDI 使用JNDI 在JNDI中配置数据源(DataSource) 内嵌Jetty服务器 内嵌Jetty教程 内嵌Jetty的HelloWorld教程 内嵌Jetty视频 优化Jetty 如何配置垃圾收集 如何配置以支持高负载 ...

Global site tag (gtag.js) - Google Analytics