(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