在本博客的前面一些文章中,简单介绍过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
分享到:
相关推荐
我实现的《使用Equinox开发OSGI应用程序》全部功能的代码和分发包,工程师基于Eclipse3.3的
本教程就将演示如何在 Eclipse ...并结合示例代码演示 OSGi 开发的一些重要技术,最后探讨了基于 OSGi 应用程序一般所采用的架构,以及如何将 Equinox OSGi 应用程序脱离 Eclipse 而部署为一个标准的 Java 应用程序。
第三部分基于Equinox的OSGi应用与实践,详细介绍了OSGi的服务纲要规范(OSGi ServiceCompendium)和OSGi企业级规范(OSGi ServiceEnterpress)中最常用的几个子规范内容,在这一部分里,将会把OSGi技术从理论落地到...
博文链接:https://jiahej.iteye.com/blog/220177
包括OSGI的相关书籍及网页: OSGi R4服务平台核心规范中译本 ...使用 Equinox 开发 OSGi 应用程序 基于 OSGi 和 Spring 开发 Web 应用 基于 OSGi 的面向服务的组件编程 探索 OSGi 框架的组件运行机制
1、自己开发的OSGi Web Console,适用于实现了OSGi规范的Equinox、Felix等...2、展示了如何把OSGi框架作为一个组件嵌入到现有的未基于OSGi开发的Web应用当中,在Web应用中可获取OSGi中的Service以增加应用的灵活性。
阅读本书,首先你很快就会使用Eclipse bundle工具创建第一个基于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开发学习的一本很好的书,本书介绍了Equinox, Spring-DM和Felix这三个常用的OSGi容器的使用、开发、以及WebApplication的开发部署;介绍了OSGi的规范和Core Framework和Layer。包含书中的用例源...
该方案基于OSGi的Equinox开源项目,以OSGi 插件的方式,实现了一个轻量级的JavaEE Web Container框架,使得以OSGi插件化方式开发大型JavaEE应用变为可能。该框架完全遵循OSGi Enterprise Specification r4.2规范文档...
如何让一个应用响应一个特定端口 使用JNDI 使用JNDI 在JNDI中配置数据源(DataSource) 内嵌Jetty服务器 内嵌Jetty教程 内嵌Jetty的HelloWorld教程 内嵌Jetty视频 优化Jetty 如何配置垃圾收集 如何配置以支持高负载 ...