1. 生成OSGi工程
首先打开新工程向导,选择创建Eclipse插件工程。在[目标平台(Target Platform)]选项中选择[OSGi 框架(OSGi framework)]。
图5-1 创建插件工程
在选择模板的时候选择,Hello OSGi Bundle后点击完成。
图5-2 选择OSGi模板
生成工程后,在Manifest编辑器中点击[启动框架(Launch the framework)]运行新生成的OSGi Bundle。执行后可能会出现大量的错误。原因是Eclipse中的OSGiBundle在OSGi框架中注册了,但是UI相关的部分没能启动。我们进入[运行设置(Run Configuration)],取消所有的Bundle绑定,只选中我们当前要测试的Bundle。(我自己作的工程即使都取消了运行也报错:(~~)
在框架运行时,向控制台窗口输入开始和停止指令,看一下效果吧。
图5-4 Hello OSGi
2. OSGi Service和Tracker
上一节我们制作了一个简单的在启动和停止时输出消息的Bundle。代码很简单的实现了BundleActivator接口的sart()和stop()方法,在其中利用System.out.println打出了信息。
代码1
1
2
3
4
5
6
7
8
9
10
11
|
public class Activator implements BundleActivator {
public void start(BundleContext context) throws Exception {
System.out.println( "Hello World!!" );
}
public void stop(BundleContext context) throws Exception {
System.out.println( "Goodbye World!!" );
}
} |
在OSGi框架中为了生命周期管理提供了开始和停止方法,仅此而已,OSGi Bundle就可以运行起来了。OSGi框架有一种可以为多个Bundle提供作为共通(Common)使用的Service功能,称为OSGi Service。
代码2 最简单的OSGi Service
1
2
3
4
5
|
public class OSGiService {
public void doSomething(){
System.out.println( "Running Common Service" );
}
} |
代码3 执行OSGi Service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class Activator implements BundleActivator {
public void start(BundleContext context) throws Exception {
System.out.println( "Hello World!!" );
// 注册OSGi Service
context.registerService(OSGiService. class .getName(), new OSGiService(),
new Properties());
}
public void stop(BundleContext context) throws Exception {
System.out.println( "Goodbye World!!" );
// 生成Service Tracker
ServiceTracker tracker = new ServiceTracker(context,
OSGiService. class .getName(), null );
tracker.open();
// 取得Service
OSGiService service = (OSGiService) tracker.getService();
// 执行Service
service.doSomething();
}
} |
我们看一下上面的Bundle执行的效果。
代码4
1
2
3
4
5
6
|
Hello World!! stop test Goodbye World!! Running Common Service osgi> |
3. Bundel的安装和更新
OSGi框架在JavaVM不重启的情况下也可以安装和卸载Bundle。下面我们做一个新的Bundle,NewBundle在启动和停止时输出一行消息。
代码5 NewBundle
1
2
3
4
5
6
7
8
9
10
11
|
public class Activator implements BundleActivator {
public void start(BundleContext context) throws Exception {
System.out.println( "New bundle start!!" );
}
public void stop(BundleContext context) throws Exception {
System.out.println( "New bundle stop!!" );
}
} |
将该工程导出到c盘根目录下,启动OSGi控制台输入install file:\\\C:\plugins\NewBundle_1.0.0.201008182238.jar。再通过ss命令确认bundle的安装。
代码6 Bundle的安装和卸载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
osgi> install file:\\\C:\plugins\NewBundle_1.0.0.201008182238.jar Bundle id is 321 osgi> ss New Framework is launched. id State Bundle 321 INSTALLED NewBundle_1.0.0.201008182238 osgi> start NewBundle New bundle start!! osgi> uninstall NewBundle New bundle stop!! osgi> ss New Framework is launched. id State Bundle osgi> |
上面代码说明,在卸载Bundle的时候会先调用stop方法。对Bundle的MANIFEST文件的描述方法作一个简单的总结如下表:
项目名 | 说明 |
Manifest-Version | Jar包的Manifest文件指定了版本号,通常是1.0 |
Bundle-ManifestVersion | Bundle的Manifest文件指定了版本,通常是2 |
Bundle-Name | Bundle的名称 |
Bundle-SymbolicName | Bundle的Synbo名称,OSGi中以这个名称注册 |
Bundle-Version | Bundle的版本。在OSGi中有可能多个不同版本的同一Bundle共存 |
Bundle-Activator | 管理Bundle生命周期的类名 |
Bundle-Vendor | 定义了制作Bundle的组织名称 |
Bundle-ActivationPolicy | 指定了Bundle启动的策略。 |
Import-Package | 指定了Bundle引用的包 |
Export-Package | 指定了Bundle向起他Bundle公开的包 |
Required-Bundle | 指定了Bundle引用的Bundle |
转载请注明出处,http://www.cnblogs.com/liuzhuo.
相关推荐
OSGI 实例 eclipse 插件开发
《Eclipse插件开发》由浅入深、有重点、有针对性地介绍了Eclipse插件开发技术,全书分为4篇共24章。第一篇介绍Eclipse平台界面开发的基础知识,包括SWT控件的使用、界面布局、事件处理等内容;第二篇是插件开发核心...
介绍了eclipse插件开发基本理论、插件项目结构及开发步骤,最后再给出两个插件开发实例。结构如下: 1.介绍eclipse内核结构、扩展点机制; 2.介绍SWT的原理,控件设计及事件响应机制 3.介绍OSGi 4.介绍RCP(Rich ...
OSGI bundle 在线用户管理 邮件发送
博文链接:https://jiahej.iteye.com/blog/220177
osgi插件化开发流程
osgi发布http服务的各种bundle,各种jar包,全全全~非常好用的技术包 包括:org.eclipse.equinox.http_1.0.0.v20060601a.jar org.eclipse.equinox.ds_1.0.0.v20060601a.jar org.eclipse.equinox.servlet.api_1.0.0...
基于 equinox 的 OSGI 运行BUNDLE例子,已包含 ECLIPSE 下的OSGI平台包,按步骤运行即可。 当然,设置JAVA_HOME,及BIN环境变量运行JAVAC 就不用说了 ^-^
《Eclipse RCP与Spring OSGi:技术详解与最佳实践》共分3个部分:基础篇(第1-5章)详细介绍了与Eclipse RCP相关的一系列核心概念、Eclipse RCP开发环境的搭建,以及SWT、JFace、Forms、Nebula和WindowBuilder等...
1.一篇實例教程,配图分部讲解 2.SpringDM实例实现OSGI源码 3.纯OSGI实现源码
NULL 博文链接:https://salever.iteye.com/blog/1474694
解答如何基于OSGi怎么来设计/实现/部署/测试项目和产品
1.SWT/Jface技术 2.插件与OSGi 3.RCP技术 3.EMF技术 4.GEF技术 5.Eclipse开发示例 6.VE插件的使用
这个是eclipse OSGI 实战,里面介绍了很多osgi的知识,还有一个进行osgi编程的例子,发出来给大家共享一下,希望有帮助
基于osgi整合ssm框架开发web项目,使用ssm注解的方式开发,缺少两个jsp文件,能运行
OSGi with CAR-Bundle.ppt
NULL 博文链接:https://qtlkw.iteye.com/blog/2214254
org.eclipse.osgi_3.7.0.v20110613以及源码 。
Eclipse 3.0采用OSGI作为其插件体系结构