在前面搭建了一个Apache Felix的运行环境,下面就写一个简单的bundle,测试测试。

1、新建一个插件工程,如下图:


27377c33-9901-3f23-9c28-515bddccc57a.jpg


点击下一步。

2、给插件工程命名一个名字,这里叫pig1。This plug-in is targeted to run with中选择an OSGI framework -->standard,如下图红框中所示:


412c1e0a-577b-3b94-89e5-6ffb14de2206.jpg


点击下一步。

3、bundle中有一个启动类,默认是Activator,相当于普通工程中的Main类。你也可以把它更改成其他名字,这里使用默认的名字。如下图:


f26bd16d-ffb6-3210-a31c-6a14e5a3e23e.jpg


点击下一步。

4、去掉Create a plug-in using one of the templates,如下图:


ed400ad1-e249-30a9-bfef-cd7e31621a0d.jpg


点击Finish。

5、插件工程建好后,打开Activator类,可以看到里面有一个start方法和一个stop方法,可以在bundle启动和停止的时候做一些事情。这里只是简单地输出一个字符串,作为bundle启动和停止时的标识。

Java代码 收藏代码
  1. /*

  2.     * (non-Javadoc)

  3.     *

  4.     * @see

  5.     * org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext

  6.     * )

  7.     */

  8. publicvoid start(BundleContext bundleContext) throws Exception  

  9.    {  

  10.        Activator.context = bundleContext;  

  11.        System.out.println("start pig1");  

  12.    }  

  13. /*

  14.     * (non-Javadoc)

  15.     *

  16.     * @see

  17.     * org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)

  18.     */

  19. publicvoid stop(BundleContext bundleContext) throws Exception  

  20.    {  

  21.        Activator.context = null;  

  22.        System.out.println("stop pig1");  

  23.    }  


6、代码也写好后,就可以导出插件工程发布了。如何让这个工程作为一个bundle被部署到Felix容器中呢?右击插件工程pig1,选择Export。可看下图:


7e4c1439-5b33-37b0-8058-5ed0799980c5.jpg


出现Export视图之后,选择Plug-in Development下的Deployable plug-ins and fragments,如下图:


afc92293-26c7-38a6-9c96-b88ee96be95d.jpg

点击下一步,选择要导出的插件,Destination选项卡的Directory选择我们的Felix环境的物理地址,导出后,会在Felix工程的根目录自动创建一个plugins目录,bundle会默认导出这个目录。如下图:


c78f3425-e0a8-3cfe-8ade-951b42d345ef.jpg


点击Finish,你就可以看到Felix工程下面多了一个plugins目录,我们所导出的bundle就在里面,如下图:


146cd71c-f659-3331-92d4-efb211f08d1e.jpg


7、接着就是安装、运行了。

有三种方法可以安装、运行一个bundle。

(1)使用命令。

首先,启动Felix,在Console中先使用install命令安装bundle,接着使用start命令启动bundle,如下图:


2dba8224-3684-36ff-9801-ed5f07ca715c.jpg

启动的时候,start命令后接着那个bundle的启动ID就可以启动bundle了,如上图的12。

可以看到,当启动bundle的时候,输出了Activator类中start方法的输出语句,即"start pig1"。

Pig1的状态为Active,说明bundle启动成功了。

当然,你也可以使用uninstall命令卸载一个bundle,用法如install命令。


(2)使用Felix配置文件,打开conf/config.properties,如下图:


3c2701ab-12aa-3105-8e55-d0542e1c425d.jpg

打开config.properties,找到felix.auto.start.1参数,值写成file:plugins/pig1_1.0.0.201109291700.jar,如:

(如果你有多个bundle,之间用空格隔开)。


参数代码 收藏代码
  1. # The following property is a space-delimited list of bundle URLs  

  2. # to install and start when the framework starts. The ending numerical  

  3. # component is the target start level. Any number of these properties  

  4. # may be specified for different start levels.  

  5. felix.auto.start.1=file:plugins/pig1_1.0.0.201109291700.jar  


参数写好后,启动Felix,你就可以看到bundle Pig1自动安装并启动了,如下图所示:


c697a4ca-8d72-3024-8019-e66499b47bdb.jpg

(3)第三种方法就是使用File Install了,使用Apache Felix的File Install bundle,我们可以安装和启动bundle而无需启动Felix,这个将在下面的章节中讲解。


8、OK,完成了。

原创地址:http://zqc-0101.iteye.com/blog/1183452