`
snoopy7713
  • 浏览: 1123599 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

在Eclipse中开发OSGi Bundle

    博客分类:
  • OSGi
阅读更多

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

 

一、新建Bundle

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

 
      2、在对话框中输入输入以下值:
            Project name(项目名称):EclipseHello
            Target Platform(目标平台):an OSGiFramework->Standard (OSGi框架->标准)

 
      3、其它的输入可以采用缺省值,点击“Next”按钮,你将看到插件上下文对话框。

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

 
      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 {  
  2.     public   void  start(BundleContext context)  throws  Exception {  
  3.         System.out.println("Hello World!!" );  
  4.     }  
  5.       
  6.     public   void  stop(BundleContext context)  throws  Exception {  
  7.         System.out.println("Goodbye World!!" );  
  8.     }  
  9. }  

 

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

            文件内容如下:

Java代码  收藏代码
  1. Manifest-Version:  1.0   
  2. Bundle-ManifestVersion: 2   
  3. Bundle-Name: EclipseHello Plug-in  
  4. Bundle-SymbolicName: EclipseHello  
  5. Bundle-Version: 1.0 . 0   
  6. Bundle-Activator: eclipsehello.Activator  
  7. Bundle-ClassPath: bin/  
  8. Bundle-Vendor: cjm  
  9. 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控制台的。

 
      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”按钮。

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

分享到:
评论

相关推荐

    基于Eclipse的Equinox框架开发OSGi Bundle应用

    博文链接:https://jiahej.iteye.com/blog/220177

    基于EQUINOX的 OSGI BUNDLE 运行例子

    基于 equinox 的 OSGI 运行BUNDLE例子,已包含 ECLIPSE 下的OSGI平台包,按步骤运行即可。 当然,设置JAVA_HOME,及BIN环境变量运行JAVAC 就不用说了 ^-^

    osgi发布http服务的各种bundle,各种jar包,全全全~

    osgi发布http服务的各种bundle,各种jar包,全全全~非常好用的技术包 包括:org.eclipse.equinox.http_1.0.0.v20060601a.jar org.eclipse.equinox.ds_1.0.0.v20060601a.jar org.eclipse.equinox.servlet.api_1.0.0...

    浅析OSGI的bundle依赖

    NULL 博文链接:https://salever.iteye.com/blog/1474694

    Eclipse-OSGi内核源码分析.pdf

    BundleBundle 接口表示在框架中安装的一个 接口表示在框架中安装的一个 BundleBundle 。每一个 。每一个 BundBund le 有一个由框架设置 有一个由框架设置 的唯一标识。它提供以下功能: (1)BundleBundle 操作,...

    org.eclipse.equinox.http.helper Bundle

    让OSGi支持JSP和JSF时必须用到的一个Bundle,有用到的可以下载,有耐心的童鞋也可到dev.eclipse.org的CVS开发空间去找找咯。

    OSGi and Equinox:Creating Highly Modular Java Systems

    阅读本书,首先你很快就会使用Eclipse bundle工具创建第一个基于OSGi的系统,进而转向复杂的产品开发。接下来,你将掌握一些用于创建具有特殊模块化、高效性和可维护性系统的最佳实践和技巧。你将了解所有的OSGi声明...

    OSGi与Equinox创建高度模块化的Java系统

    资源名称:OSGi与Equinox 创建高度模块化的Java系统内容简介:阅读本书,首先你很快就会使用Eclipse bundle工具创建第一个基于OSGi的系统,进而转向复杂的产品开发。接下来,你将掌握一些用于创建具有特殊模块化、...

    Python安装过程及在安装Pydev时遇到的问题的解决办法

    基于windows安装python的简单描述,以及在pydev安装的时候总是遇到如下问题的解决办法: An error occurred while collecting items to be installed session context was:(profile=C__Users_Think_eclipse_java-...

    osgi 入门 教程

    对Equinox进行了试用,不出意料,尽管Equinox还没有正式的发布版本,甚至连里程碑版本都还没有,但Equinox作为OSGI R4 RI,表现非常出色,特别是借助Eclipse提供的IDE,更是令它在OSGI框架的竞争中占据优势。

    hive-jdbc-2.1.0-standalone.jar

    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi....

    ng_2.5_2.9.2-0.2.3.zip

    bnd-platform.zip,从现有jar构建osgi bundle和eclipse更新站点,例如maven repositories(gradle插件)从现有jar构建osgi bundle和eclipse更新站点,例如maven repositories(gradle插件)

    GSGI+Eclipse LUNA 配置+HelloWorld例子+Bundle依赖

    这是一个OSGi用eclipseLuna 版本开发的简单实例,对入门帮助很大

    我写的equinox osgi server

    最近整OSGI,整的心情很是不爽,尤其最近搞equinox命令行下的bundle调试,搞两下就很厌倦输入java -jar equinox.jar -console,然后可怜的去加载一个个bundle,虽然通过config.ini可以一把加载相应需要的bundle,但是每次...

    hive-jdbc-1.1.0-cdh5.4.5-standalone.jar

    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi....

    OSGi模块化框架详解

    本文来自于cnblogs,文章讲述基于的是Equinox的OSGi实现,同时也是...OSGi框架为java系统提供了一个通用的容器,该系统中的bundle,无需停止系统,即可实现bundle的安装、卸载。OSGi是Java中目前唯一的一个模块化、动态

    ebr:Eclipse套件配方

    Eclipse Bundle Recipes项目对任何库的配方都是开放的。 Eclipse IP规则仅适用于配方本身,不适用于OSGi标准化的任何库。 食谱是社区的努力。 先决条件 该项目使用Maven基于Maven Central或任何其他可访问的Maven...

    OSGI框架的功能和设计思想

    要以模块化的方式部署到OSGi中,必须遵循OSGi的规范要求,那就是将工程创建为符合规范的Bundle工程(就是Eclipse中的插件工程),或者使用工具将工程打包成符合规范的Jar文件。  支持模块化的封装和交互  OSGi支持...

    非eclipse环境启动demo

    非eclipse环境启动配置的demo,只要有jdk环境,双击run.bat就可以打开osgi控制台

    Activiti Designer插件jar包

    首先:在整合activiti时 需要在eclipse中安装插件 ,先遇到问题如下: 1,在先安装时:Eclipse -> Help -> Install New SoftWare -> Add 填写如下: 点击next——>finsh时 报错: 在这里的报错都能看出是因为...

Global site tag (gtag.js) - Google Analytics