在Eclipse中开发OSGi Bundle

转载至http://www.cnblogs.com/kangxuebin/articles/4803361.html

Eclipse为开发OSGI Bundle提供了良好的支持,它不仅提供向导来创建OSGi Bundle,而且还提供了内嵌的OSGi框架实现(即Equinox容器),可以使用该容器执行和调试Bundle。从本质上说,每一个Eclipse插件都是一个OSGi Bundle,只不过这个OSGi Bundle增加了一些Eclipse专用的代码而已。下面通过具体的例子来介绍如何用Eclipse来开发OSGi Bundle。

 

一、新建Bundle

      1、在Eclipse的新建向导中选择“Plug-in Project”并点击“Next”按钮,你将看到插件项目对话框。

 在Eclipse中开发OSGi Bundle_第1张图片
      2、在对话框中输入输入以下值:
            Project name(项目名称):EclipseHello
            Target Platform(目标平台):an OSGiFramework->Standard (OSGi框架->标准)

 在Eclipse中开发OSGi Bundle_第2张图片
      3、其它的输入可以采用缺省值,点击“Next”按钮,你将看到插件上下文对话框。

 在Eclipse中开发OSGi Bundle_第3张图片
      4、在对话框中保持缺省值,点击“Next”按钮,你将看到模板对话框。
      5、在模板对话框中选择“Hello OSGi Bundle”模板,点击“Finish”按钮完成该项目。

 在Eclipse中开发OSGi Bundle_第4张图片
      6、在该插件项目中,生成两个关键的文件: 

            1)Activator.java:激活器类,如果需要在Bundle启动或关闭时通知自身,可以新建一个实现BundleActivator接口的类,该类需要遵循以下规则:该类必须有一个public的、不带参数的构造函数,这样,OSGi框架就能调用该类的Class.newInstance()方法创建这个BundleActivator对象。
            启动一个Bundle,容器将调用Activator类的start()方法,我们可以在start()方法中执行一些资源初始化的操作,start()方法的唯一参数是一个BundleContext对象,Bundles可以通过该对象和 OSGi框架通讯。
            关闭一个Bundle,容器将调用Activator类中的stop()方法,我们可以在stop()方法中执行一些资源清理任务。

           

            文件源码如下:

Java代码  
  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!!");  
            }  
        }  
    

            2)MANIFEST.MF:Bundle的部署描述文件,其格式和正常JAR文件包中的MANIFEST.MF文件相同,因此它由一系列的属性及这些属性对应的值组成。OSGi规范规定,您可以使用属性头向容器描述您的Bundle。

            文件内容如下:

Java代码 
    Manifest-Version: 1.0  
    Bundle-ManifestVersion: 2  
    Bundle-Name: EclipseHello Plug-in  
    Bundle-SymbolicName: EclipseHello  
    Bundle-Version: 1.0.0  
    Bundle-Activator: eclipsehello.Activator  
    Bundle-ClassPath: bin/  
    Bundle-Vendor: cjm  
    Import-Package: org.osgi.framework;version="1.3.0" 

 
                  Bundle-ManifestVersion:该属性告诉OSGi容器,本Bundle将遵循OSGi规范,数值2表示本Bundle和OSGi规范第4版本兼容;如果该属性的数值为1,则表示本Bundle和OSGi版本3或更早版本兼容。
                  Bundle-Name:该属性为本Bundle定义了一个简短的、可以阅读的名称。
                  Bundle-SymbolicName:该属性为本Bundle定义了一个唯一的、非本地化的名字,当您需要从别的Bundles中访问某一指定的Bundle时,您就要使用这个名字。
                  Bundle-Version:该属性给出了本Bundle的版本号。
                  Bundle-Activator:该属性给出了本Bundle中使用的激活器类名字,这个属性值是可选的。激活器将对Activator中的start()和stop()方法进行监听。
                  Bundle-ClassPath:该属性定义了该Bundle的运行时类路径。
                  Bundle-Vendor:该属性是对本Bundle发行商的描述。
                  Import-Package:该属性定义了本Bundle中引入的Java包。

 

二、运行Bundle
      Eclipse IDE中有一个内嵌的Equinox OSGi容器,您可以利用它来执行或调试OSGi Bundle。以下是运行Bundle的步骤:
      1、打开运行时配置对话框,添加一个“OSGi Framework”类型的配置。
      2、点击“Deselect All”按钮,确保Bundles列表没有任何的Bundle被选中。
      3、在Workspace插件目录下有一个名为EclipseHello的插件,选中它;在Target Platform插件目录下,请确保org.eclipse.osgi插件被选中。
      4、点击“Run”按钮,在控制台视图中应该会打印出“Hello World!!”。其实,Eclipse是在控制台视图中打开OSGi控制台的。
在Eclipse中开发OSGi Bundle_第5张图片
 
      5、在控制台中输入ss命令,查看OSGi容器中包含的Bundle及其状态等信息。控制台显示以下信息:

            osgi> Hello World!!

            osgi> ss

            Framework is launched.

            id State       Bundle
            0 ACTIVE      org.eclipse.osgi_3.3.0.v20070530
            1 ACTIVE      EclipseHello_1.0.0

            osgi>

三、将插件导出为jar文件(一个jar文件就是一个Bundle

      1、选择“File > Export” 菜单,打开导出对话框。

      2、在导出对话框中,选择“Plug-in Development  >  Deployable plug-ins and fragments”项,并点击“Next”按钮。

 在Eclipse中开发OSGi Bundle_第6张图片

      3、在可用插件列表中选中“EclipseHello”插件,选择jar文件的保存路径,点击“Finish”按钮完成导出。

在Eclipse中开发OSGi Bundle_第7张图片

你可能感兴趣的:(在Eclipse中开发OSGi Bundle)