如何写Bundle 如何运行Bundle

前面简单说了一下OSGI,这只是一个框架。想运行各种程序,就需要编写不同的BundleOSGI在需要的时候可以下载并安装Bundle,在不需要的时候可以将他们删除。每个Bundle可以独立运行,也可以依赖其它Bundle而存在。

编写Bundle,最主要是继承OSGI提供的接口。

public class Activator implements BundleActivator {

public void start(BundleContext bc) {

}

public void stop(BundleContext bc) {

}

}

可以看到,我们的类Activator继承于BundleActivator接口,并实现startstop方法。这里的Start方法说白了相当于main入口函数。例如写一个Swing的应用程序,那么界面的初始化和显示就应该写在Start方法里。OSGI就是查找这个方法对Bundle进行启动的。

下载最新的knopflerfish测试环境。网址www.Knopflerfish.org。将程序打包成JAR文件,要包含MF文件,MF文件中包含Bundle部署需要的各种信息。

举个MF文件的例子。

Manifest-Version: 1.0

Bundle-SymbolicName: my bundle

Bundle-Name: my bundle

Bundle-Version: 1.0

Bundle-Activator: Activator

Import-Package: org.osgi.framework

大概意思看看名称就明白了。其中Bundle-Activator是启动Bundle的入口类。

JAR文件放入环境中运行。例如,在jars目录下创建My目录,然后将自己的my.jar文件拷贝到My目录下。然后修改XARGS文件(win2k就修改init_Windows2000.xargswinxp修改init_WindowsXP.xargs),依次写入下面两行:

-install My/my.jar

-start My/my.jar

意义很明显。然后执行start.bat就可以看到Bundle运行的效果了。如果找不到start.bat,也可进入命令行,进入主目录,执行:

java -jar framework.jar

需要注意的是:每次执行程序,都会自动生成fwdir目录,这个目录记录了上次的信息,如果程序重新编译,JAR文件被重新导入,则需要删除整个fwdir目录,再执行start.bat

你可能感兴趣的:(Bundle)