[转]Eclipse插件开发之基础篇(5) 制作OSGi Bundle
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_2.html
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 |
[转]Eclipse插件开发之基础篇(5) 制作OSGi Bundle的更多相关文章
- Eclipse插件开发之基础篇(4) OSGi框架
转载出处:http://www.cnblogs.com/liuzhuo. 1. 什么是OSGi框架 OSGi(Open Service Gateway Initiative)框架是运行在JavaVM环 ...
- [转]Eclipse插件开发之基础篇(4) OSGi框架
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_1.html 1. 什么是OSGi框架 OSGi(O ...
- [转]Eclipse插件开发之基础篇(2) 第一个Eclipse插件
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/15/eclipse_plugin_1_1_1.html 在Eclipse中使用PDE(Plug ...
- [转]Eclipse插件开发之基础篇(1) 插件开发的基础知识
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/13/eclipse_plugin_1_0_2.html 名词翻译 有一些名词在翻译的过程中可能 ...
- [转]Eclipse插件开发之基础篇(6) SWT简介
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/09/01/eclipse_plugin_1_3_1.html SWT(Standard Widget ...
- [转]Eclipse插件开发之基础篇(3) 插件的测试与调试
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JUnit对插件进行测试 E ...
- 关于Eclipse使用Git基础篇
一:Git的下载与安装与基本使用 1.打开eclipse->help->Eclipse Markplace->search->fiind输入Egit 你会看到如下截图(我的为已 ...
- Eclipse插件开发 学习笔记 PDF 第一篇到第四篇 免分下载 开发基础 核心技术 高级进阶 综合实例
<<Eclipse插件开发 学习笔记>>,本书由浅入深.有重点.有针对性地介绍了Eclipse插件开发技术,全书分为4篇共24章.第一篇介绍Eclipse平台界面开发的基础知识 ...
- Eclipse插件基础篇一
名词翻译 有一些名词在翻译的过程中可能会出现歧义,在这里统一一下. アーキテクチャ=architecture=架构 プラットフォーム=platform=平台 コンポーネント=component=组件 ...
随机推荐
- Python3 进程、线程和协程
Infi-chu: http://www.cnblogs.com/Infi-chu/ 进程.线程和协程的对比 1.定义对比 进程:是系统进行资源分配的基本单位,每启动一个进程,操作系统都需要为其分配运 ...
- 对vue-cli各个目录的理解 和 在 vue 中使用json-server
看了几章书,看到了vue模板,看不下去哦,就找了一个B站的vue视频来看,下面进行总结. 学习一个语言,框架,CRUD..先学会. 重点就是最为常用的几个语句.学得不多,感慨挺多.. 前提:下载好vu ...
- Masonry纯码实现UIScrollView 之上下滚动,设置UIScrollView背景图片
参考链接:https://www.jianshu.com/p/9a158308c50b 亲测有效,很赞! 你们最想要的Demo下载地址:https://github.com/objcxiaobai/C ...
- jenkins构建找不到python依赖
最近在搞jenkins自动构建,遇到这样一个问题,我装的python相关的依赖在X用户下,但是jenkins在root下运行的,所以找不到相关的import 1. 执行pip freeze,会打印相关 ...
- Azure 架构师认证考试
Azure认证路线 AZ-300 AZ-301 https://blog.csdn.net/pg_edb/article/details/86794505 免费题 https://iteablue.c ...
- Kafka学习(一)
官网 kafka.apache.org 集群部署 消息中间键 --> 分布式流式平台 Kafka Streaming Flume: 1个进程包含三个角色 source channle sink ...
- Python安装常见问题(1):zipimport.ZipImportError: can't decompress data(此问题不解决pip安装不成功)
在CentOS以及其他的Linux系统中遇到安装包安装错误的原因,大多数都是因为缺少依赖包导致的,所以对于错误:zipimport.ZipImportError: can’t decompress d ...
- 利用Flask中的werkzeug.security模块加密
1.这种加密方式的原理:加密时混入一段"随机"字符串(盐值)再进行哈希加密.即使 密码相同,如果盐值不同,那么哈希值也是不一样的.现在网站开发中主要是运 用这种加密方法. 2.这个 ...
- June 09th, 2019. Week 24th, Sunday
The beauty you see in me is a reflection of you. 你在我身上看到的美,正是你的倒影. From Jalaluddin Rumi. What we see ...
- 201871010135 张玉晶 《面向对象程序设计(java)》 第一周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/wyt0455820/ ...