OSGi入门必读系列《OSGi Bundle之Hello World》

(1)新建Bundle:

A、在Eclipse中,点击file➡new➡Project,打开新建对话框

B、在新建项目对话框,选择plug-inProject(插件项目)并点击下一步,将看到插件项目对话框

C、在插件项目对话框中,输入以下值:Project name:com.javaworld.sample.HelloWorld
     Target Platform:an OSGiFramework➡Standard(OSGi框架-标准)

D、对其他要求输入值采取缺省值,并点击下一步,将会看到插件上下文对话框,选择缺省值并点击下一步

E、在模板对话框中,选择“Hello OSGiBundle”模板并点击finish。

F、Eclipse会生成两个文件:Activator.java和MANIFEST.MF

(2)Activator.java:

package com.javaworld.sample.helloworld;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
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!!");
}
}

如果想让开发的bundle能在启动或关闭时通知自身,应该新建一个类,实现BundleActivator接口,同时需要遵守以下规则:

A、实现BundleActivator的类必须有一个public、不带参数的构造函数,这样,OSGi框架就可以调用该类的Class.newInstance()方法来创建这个BundleActivator对象。

B、容器将调用Activator类的start()方法来启动Bundle,因此可以在start()方法中执行一些资源初始化的操作。例如可以在该方法中获取数据库连接,以备后用。

这个start()方法的唯一参数是一个BundleObject对象,Bundles可以通过该对象和OSGi框架通讯,也可以从该对象获取OSGi容器相关的信息。

如果某个bundle抛出异常,容器将置之为“stopped”状态,此时这个bundle就不能对外提供服务了。

C、如果要关闭一个Bundle,容器将调用Activator类中的stop()方法。因此可以在该方法中执行一些资源清理任务,比如释放数据库连接。

D、一旦Activator类准备就绪,就可以通过MANIFEST.MF文件将该包的合法名称传给容器。

(3)MANIFEST.MF:该文件为Bundle的描述文件,由一系列的属性及这些属性对应的值组成,属性名位于某一行的开头,也可称其为属性头。

Manifest-Version: 1.0
Bundle-ManifestVersion: 2 属性头告诉OSGi,本Bundle将遵循OSGi规范,2表示本Bundle和OSGi规范第四规范兼容,若该值为1,则表示本包和OSGi版本3或更早版本兼容
Bundle-Name: HelloWorld 为本Bundle定义一个简短可阅读的名称
Bundle-SymbolicName: com.javaworld.sample.HelloWorld 为本Bundle定义了一个唯一的、非本地化的名字,当需要从别的Bundles中访问某一指定的Bundle时,就需要使用该名字
Bundle-Version: 1.0.0.qualifier 给出本Bundle的版本号
Bundle-Activator: com.javaworld.sample.helloworld.Activator 给出本Bundle中使用的监听器类名字,该属性值可选;监听器将对Activator中的start()和stop()方法监听
Bundle-Vendor: JAVAWORLD 对本Bundle发行商的表述
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: org.osgi.framework;version=“1.3.0” 定义了本Bundle中引入的Java包
(4)运行Bundle:
Eclipse IDE中有一个内嵌的EquinoxOSGi容器,可以用它来执行或调试OSGi Bundle。

按照下 面的步骤可以执行上面的Hello World Bundle:

A、单击run菜单,选择“run configuration”,打开运行配置面板

B、将Name输入框的值改为HelloWorld Bundle

C、在“Workspace”下有一个名为“com.javaworld.sample.HelloWorld”的插件,选中;在TargetPlateform下确保org.eclipse.osgi插件被选中

D、点击“run”按钮,应该在控制台打印出“HelloWorld”

(5)经常使用的OSGi命令,可与任何OSGi容器交互:

A、ss:该命令显示所有已安装的Bundles及他们的状态,将显示Bundle ID、Bundle的简短名称及Bundle状态;

B、start/stop<bundleid>:启动/停止一个Bundle

C、update<bundleid>:使用新的jar包更新一个bundle

D、install/uninstall<bundleid>:将一个新的Bundle安装到OSGi容器/从OSGi容器中卸载一个已安装的Bundle。


文章地址:http://developer.51cto.com/art/200909/152209.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值