Eclipse插件开发之基础篇(5) 制作OSGi Bundle

转载出处:http://www.cnblogs.com/liuzhuo

 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

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

public class OSGiService {
	public void doSomething(){
		System.out.println("Running Common Service");
	}
}

代码3 执行OSGi Service

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

Hello World!!
stop test
Goodbye World!!
Running Common Service

osgi>

 3. Bundel的安装和更新

  OSGi框架在JavaVM不重启的情况下也可以安装和卸载Bundle。下面我们做一个新的Bundle,NewBundle在启动和停止时输出一行消息。

代码5 NewBundle

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的安装和卸载

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
时间: 2024-12-26 18:59:51

Eclipse插件开发之基础篇(5) 制作OSGi Bundle的相关文章

[转]Eclipse插件开发之基础篇(4) OSGi框架

原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_1.html 1. 什么是OSGi框架 OSGi(Open Service Gateway Initiative)框架是运行在JavaVM环境里的服务平台.框架提供的主要功能是对应用和组件的生命周期管理,系统可以在无需重启的情况下,远程操纵组件的安装.启动.停止. OSGi框架不仅用于Eclipse,从移动终端到车载系统,各个领域都在应用这个技术.

Eclipse插件开发之基础篇(1) 插件开发的基础知识

转载出处http://www.cnblogs.com/liuzhuo 名词翻译 有一些名词在翻译的过程中可能会出现歧义,在这里统一一下. アーキテクチャ=architecture=架构 プラットフォーム=platform=平台 コンポーネント=component=组件 其余的随时补充. 1.Eclipse的架构 Eclipse被作为java的IDE(集成开发环境)被广泛的应用,但是从本质上看Eclipse是一个整合了各种开发工具的平台.因此,它采用了可以自由的增加各种功能的插件架构技术.Ecli

Eclipse插件开发之基础篇(2) 第一个Eclipse插件

转载出处:http://www.cnblogs.com/liuzhuo. 在Eclipse中使用PDE(Plugin Development Environment)进行插件开发.在PDE中为大家准备了几个模板供大家参考.第一步咱们先利用模板制作一个简单的插件作为和PDE的第一次接触. 1.生成插件工程 通过选择[文件]->[新建]->[工程...]启动[新工程(New Project)]向导.在插件开发的时候我们就不能选择通常的java工程了,要选择新建一个插件工程. 选择[插件工程(Plu

[转]Eclipse插件开发之基础篇(2) 第一个Eclipse插件

原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/15/eclipse_plugin_1_1_1.html 在Eclipse中使用PDE(Plugin Development Environment)进行插件开发.在PDE中为大家准备了几个模板供大家参考.第一步咱们先利用模板制作一个简单的插件作为和PDE的第一次接触. 1.生成插件工程 通过选择[文件]->[新建]->[工程...]启动[新工程(New Project)]向导.在插件开发的

[转]Eclipse插件开发之基础篇(1) 插件开发的基础知识

原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/13/eclipse_plugin_1_0_2.html 名词翻译 有一些名词在翻译的过程中可能会出现歧义,在这里统一一下. アーキテクチャ=architecture=架构 プラットフォーム=platform=平台 コンポーネント=component=组件 其余的随时补充. 1.Eclipse的架构 Eclipse被作为java的IDE(集成开发环境)被广泛的应用,但是从本质上看Eclipse

[转]Eclipse插件开发之基础篇(3) 插件的测试与调试

原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JUnit对插件进行测试 Eclipse中已经嵌入了JUnit,我们可以使用JUnit为插件进行单体测试.一般的JUnit是不可以对插件部分(对Eclipse的API依赖的部分)进行测试的,但是在PDE环境中使利用JUnit对插件进行单元测试成为可能. 要想进行测试首先要添加插件的依赖关系,在插件设定页面的[依赖关系(Depe

Android插件开发初探——基础篇

Android插件开发初探 对于Android的插件化其实已经讨论已久了,但是市面上还没有非常靠谱成熟的插件框架供我们使用.这里我们就尝试性的对比一下Java中,我们使用插件化该是一个怎么样的流程,且我们如何将此流程移植到Android框架上去使用.很多代码都是内部资料,不喜勿喷,谢谢~ 为什么要插件化? 功能越来越多 代码.安装包越来越大 小的更新也需要重新发布 更新频繁,安装成本太大 用户无法选择性加载需要的模块 -- 插件化的好处 主安装包较小 强制模块化,降低耦合度 减少整体更新的次数

学习Eclipse插件开发需要循序渐进看的书籍列表?

因为工作需要,需要用Eclipse插件进行开发.而笔者在以前的工作经验中根本就没有接触过,而且这类的技术和视频资料非常少.通过摸打滚爬将近2年,终于小有成就.刚好趁着圣诞节公司放了一个礼拜的假期,和大家分享一下学习Eclipse插件开发需要循序渐进看的书籍列表,以节约大家的宝贵时间. 1.  OSGI是Eclipse插件开发的基础,因此在进行Eclipse Plugin开发的时候,一定要先了解OSGI是什么?已经OSGI bundle相关的概念,因此,一定要找一本OSGI相关的书籍来阅读. 1.

Android插件开发初探——分析篇

承接上文 Android插件开发初探--基础篇 http://blog.csdn.net/yzzst/article/details/45582315 我们通过使用DexClassLoader能够将classes.dex中的类动态的加载进入当前进程.当然,也就可以预先定一些代理的接口完成四大组件的功能. 整体功能如下图所示: 当然,对于一个Android的应用程序而言,只是动态的加载类与声明四大组件是不够的.如下图所示,使我们常见到的一个APK文件解压缩后的文件内容. 有过Android项目开发