`

Eclipse插件开发之基础篇(5) 制作OSGi Bundle

 
阅读更多

1. 生成OSGi工程

  首先打开新工程向导,选择创建Eclipse插件工程。在[目标平台(Target Platform)]选项中选择[OSGi 框架(OSGi framework)]。

图5-1 创建插件工程

 

  在选择模板的时候选择,Hello OSGi Bundle后点击完成。

图5-2 选择OSGi模板

  生成工程后,在Manifest编辑器中点击[启动框架(Launch the framework)]运行新生成的OSGi Bundle。执行后可能会出现大量的错误。原因是Eclipse中的OSGiBundle在OSGi框架中注册了,但是UI相关的部分没能启动。我们进入[运行设置(Run Configuration)],取消所有的Bundle绑定,只选中我们当前要测试的Bundle。(我自己作的工程即使都取消了运行也报错:(~~)

  在框架运行时,向控制台窗口输入开始和停止指令,看一下效果吧。

图5-4 Hello OSGi

 

 2. OSGi Service和Tracker

  上一节我们制作了一个简单的在启动和停止时输出消息的Bundle。代码很简单的实现了BundleActivator接口的sart()和stop()方法,在其中利用System.out.println打出了信息。

代码1

1
2
3
4
5
6
7
8
9
10
11
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!!");
    }
 
}

 

  在OSGi框架中为了生命周期管理提供了开始和停止方法,仅此而已,OSGi Bundle就可以运行起来了。OSGi框架有一种可以为多个Bundle提供作为共通(Common)使用的Service功能,称为OSGi Service。

代码2 最简单的OSGi Service

1
2
3
4
5
public class OSGiService {
    public void doSomething(){
        System.out.println("Running Common Service");
    }
}

代码3 执行OSGi Service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Activator implements BundleActivator {
 
    public void start(BundleContext context) throws Exception {
        System.out.println("Hello World!!");
        // 注册OSGi Service
        context.registerService(OSGiService.class.getName(), new OSGiService(),
                new Properties());
    }
 
    public void stop(BundleContext context) throws Exception {
        System.out.println("Goodbye World!!");
        // 生成Service Tracker
        ServiceTracker tracker = new ServiceTracker(context,
                OSGiService.class.getName(), null);
 
        tracker.open();
        // 取得Service
        OSGiService service = (OSGiService) tracker.getService();
        // 执行Service
        service.doSomething();
    }
 
}

 

我们看一下上面的Bundle执行的效果。

代码4

1
2
3
4
5
6
Hello World!!
stop test
Goodbye World!!
Running Common Service
 
osgi>

 

 3. Bundel的安装和更新

  OSGi框架在JavaVM不重启的情况下也可以安装和卸载Bundle。下面我们做一个新的Bundle,NewBundle在启动和停止时输出一行消息。

代码5 NewBundle

1
2
3
4
5
6
7
8
9
10
11
public class Activator implements BundleActivator {
 
    public void start(BundleContext context) throws Exception {
        System.out.println("New bundle start!!");
    }
 
    public void stop(BundleContext context) throws Exception {
        System.out.println("New bundle stop!!");
    }
 
}

将该工程导出到c盘根目录下,启动OSGi控制台输入install file:\\\C:\plugins\NewBundle_1.0.0.201008182238.jar。再通过ss命令确认bundle的安装。

代码6 Bundle的安装和卸载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
osgi> install file:\\\C:\plugins\NewBundle_1.0.0.201008182238.jar
Bundle id is 321
 
osgi> ss New
 
Framework is launched.
 
id      State       Bundle
321     INSTALLED   NewBundle_1.0.0.201008182238
 
osgi> start NewBundle
New bundle start!!
 
osgi> uninstall NewBundle
New bundle stop!!
 
osgi> ss New
 
Framework is launched.
 
id      State       Bundle
 
osgi>

上面代码说明,在卸载Bundle的时候会先调用stop方法。对Bundle的MANIFEST文件的描述方法作一个简单的总结如下表:

项目名   说明
Manifest-Version Jar包的Manifest文件指定了版本号,通常是1.0
Bundle-ManifestVersion Bundle的Manifest文件指定了版本,通常是2
Bundle-Name Bundle的名称
Bundle-SymbolicName Bundle的Synbo名称,OSGi中以这个名称注册
Bundle-Version Bundle的版本。在OSGi中有可能多个不同版本的同一Bundle共存
Bundle-Activator 管理Bundle生命周期的类名
Bundle-Vendor 定义了制作Bundle的组织名称
Bundle-ActivationPolicy 指定了Bundle启动的策略。
Import-Package 指定了Bundle引用的包
Export-Package 指定了Bundle向起他Bundle公开的包
Required-Bundle 指定了Bundle引用的Bundle

 

  转载请注明出处,http://www.cnblogs.com/liuzhuo.

分享到:
评论

相关推荐

    eclipse插件开发

    本篇文章将深入探讨“Eclipse插件开发”的核心概念、流程以及相关资源。 一、Eclipse插件开发基础 Eclipse插件是基于OSGi(Open Service Gateway Initiative)框架构建的,OSGi确保了插件之间的模块化和可交互性。...

    构建基于Maven的OSGI

    在本篇文章中,我们将详细介绍如何使用Maven构建一个OSGi项目,包括项目的创建、容器的启动、Bundle的导入与创建等方面。 #### 开发环境 - Eclipse 3.6 或更高版本 - Maven - OSGi框架(例如Equinox或Felix) - ...

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

    首先,我们从标题和描述中了解到,这是一篇关于使用Eclipse Luna进行OSGi插件开发的教程,适合初学者入门。 一、配置Eclipse Luna for OSGi 1. 下载Eclipse Luna for J2EE版:首先,我们需要从官方网站...

    osgi hibernate

    8. **相关工具**:可能会提到一些辅助工具,如Apache Felix、Eclipse Equinox等OSGi实现,以及可能用到的构建工具(如Bnd或Maven的Bnd插件)来构建OSGi兼容的项目。 压缩包内的"OSGI 与Hibernate整合.docx"文件很...

    基于Equinox开发OSGi应用(一)

    在本篇博文中,我们将探讨如何使用Equinox作为框架来开发OSGi应用程序。Equinox是Eclipse项目的一个组件,它提供了OSGi规范的实现,使我们能够构建模块化、可扩展且灵活的Java应用程序。OSGi(Open Service Gateway ...

    osgi felix plug in

    - **开发和调试OSGi应用通常需要使用特定的工具,如Eclipse PDE OSGi工具,Bndtools等,它们可以帮助构建、部署和调试bundle**。 - **对于Felix Plugin的开发,可能还需要了解如Maven或Gradle的构建工具,以及如何...

    两个osgi的例子程序

    在阅读这篇博客时,我们可以期待看到如何设置OSGi环境,创建模块(称为“bundle”),以及如何在这些模块之间建立依赖关系。博主可能会演示如何使用常见的OSGi框架,如Apache Felix或Equinox。 标签“源码”暗示...

    osgi入门

    这篇博客文章主要介绍了OSGi(Open Services Gateway Initiative)的基础知识,包括它的起源、概念以及在Java开发中的应用。作者通过一个实际的例子来帮助读者理解如何使用OSGi,使初学者能够快速入门。 **标签:...

    osgi学习笔记(一)

    本篇文章将探讨OSGi的基础知识,以及如何开始学习和使用它。 **1. OSGi概述** OSGi的核心理念是通过模块化来解决Java应用的复杂性问题。每个模块,也就是bundle,都是一个自包含的单元,拥有自己的类路径和生命...

    很久之前的osgi整理

    综合以上信息,我们可以推测这篇OSGi整理内容可能包含以下几个知识点: 1. **OSGi基础**:OSGi的核心概念,包括服务、模块(bundle)、生命周期管理(启动、安装、更新、停止、卸载)等。 2. **模块化系统的优势**...

    Getting Started with OSGi_ Part1

    最后,值得一提的是,OSGi技术已经被广泛应用于各种Java应用程序中,特别是在企业应用和Eclipse平台插件开发中扮演了重要角色。掌握OSGi技术,可以帮助开发者构建更加灵活、可扩展的Java应用程序,并且使得维护和...

    OSGI r4规范

    - **插件化架构**:Eclipse采用了插件化的设计思路,每一个插件都可以作为一个独立的Bundle存在,易于开发和维护。 - **动态加载和更新**:用户可以在不重启Eclipse的情况下安装新的插件或者更新已有的插件,极大地...

    OSGI实战和OSGI进阶打包提供

    "OSGI实战"和"OSGI进阶"两份文档提供了深入理解OSGI的理论和实践指导,涵盖基础概念、核心API、实战案例以及高级特性,是学习OSGI的宝贵资料。其中,"OSGI实战.pdf"着重于实践操作,而"osgiopendoc2.pdf"可能包含了...

    To embed OSGi in servlet container

    7. **工具的使用**:另一个标签是"工具",可能文章还介绍了辅助开发者进行OSGi和Servlet容器集成的工具或插件,比如Eclipse IDE的插件或其他构建工具。 通过学习这个主题,开发者可以更好地利用OSGi的动态性来构建...

    亲历基本OSGI实例,进入另番思维领域(转)----包括打包发布为可执行文件

    标签“源码”和“工具”提示我们,这篇博客可能会包含实际的代码示例和可能使用的工具,可能是开发环境配置、构建工具或者打包工具,比如Eclipse、Apache Felix或Equinox等OSGi实现。 文件名“OsgiDemo”可能是一个...

    osgi规范实战进阶等等等

    - **框架选择**:Apache Felix、Equinox(Eclipse)、Knopflerfish等是常见的OSGi实现框架,它们提供了API和工具来支持开发。 - **部署与运行**:OSGi容器负责管理bundle的生命周期,例如,你可以通过命令行或图形...

    OSGi -- Helloworld 学习记录一

    1. **环境准备**:安装一个支持OSGi的运行时环境,比如Apache Felix或Equinox,以及相应的集成开发环境(IDE),如Eclipse,它有一个内置的OSGi插件。 2. **创建bundle**:创建一个新的Java项目,并将其转换为OSGi ...

Global site tag (gtag.js) - Google Analytics