OSGI入门实例讲解(一)

本文深入浅出地介绍了OSGI模块化系统,通过Eclipse的OSGI容器Equinox展示如何创建简单的OSGI应用。文章讨论了OSGI在SOA中的角色、动态部署的优势,并提供了创建和管理OSGI bundle的实例。通过Hello World bundle和ServiceFactory的实现,揭示了OSGI服务的生命周期管理和跟踪机制。
摘要由CSDN通过智能技术生成

开放服务网关倡议(OSGi)定义了开发和部署模块应用程序和库的体系结构。作为介绍OSGi的第一篇文章,本文旨在让你了解OSGi开发的一些概念,并向你展示了如何使用Eclipse的OSGi容器(Equinox)实现建立一个简单的Hello World应用。此外还简要介绍了使用OSGi构建面向服务的应用程序以及OSGi的servicefactory和servicetracker类。

OSGI(Open Services Gateway Initiative),也叫JAVA动态模块系统,定义了一套模块应用开发的框架。OSGI容器的实现方案如Knopflerfish, Equinox, and Apache Felix允许你将应用分成多个功能模块,从而更方便地管理它们之间的相互依赖性。

和Servlet和EJB规范类似,OSGI规范定义了两件事:一个OSGI容器需要实现的服务集合;一种OSGI容器和应用之间通信的机制。开发OSGI平台意味着你需要使用OSGI API编写你的应用,然后将其部署到OSGI容器中。从开发者的视角来看,OSGI提供以下优势:

  1. 你可以动态地安装、卸载、启动、停止不同的应用模块,而不需要重启容器。
  2. 你的应用可以在同一时刻运行同一个模块的多个版本
  3. OSGI在SOA领域提供成熟的解决方案,包括嵌入式,移动设备和富客户端应用等。

现在,你已经有个Servlet容器来做web 应用,有了EJB容器来做事务处理,你可能在想为什么你还需要一个新的容器?简单点说,OSGI容器被设计专门用来开发可分解为功能模块的复杂的Java应用。

企业应用领域的OSGI

OSGI规范最初是由OSGI联盟在1999年3月发起。它的主要目的是成为向网络设备传输服务管理的开放规范。核心思想是一旦你向网络设备中添加了一个OSGI服务平台,你可以在网络中的任意位置管理该设备上的服务组件。这些服务组件可以任意安装,更新或移除而不会对设备产生影响。

多年来,OSGI技术只出现在嵌入式系统和网络设备市场。现在,Eclipse使OSGI在企业开发领域焕发出新的光彩。

OSGI受到越来越广泛的支持

2003年,Eclipse开发团队开始寻找一种使eclipse成为一种功能更动态、工具更模块化的富客户端平台。最终,他们的目光锁定在OSGI框架上。Eclipse3.0,2004年6月发布,是基于OSGI技术搭建的首个Eclipse版本。

几乎所有企业应用服务提供商支持或计划支持OSGI。Spring框架同样支持OSGI,通过Spring DM(Spring Dynamic Modules for OSGI Service Platforms)项目,可以让我们在Spring上更方便的应用OSGI。

开源OSGI容器

从企业应用开发者的角度看,OSGI容器侵入性非常小,你可以方便地将其嵌入一个企业应用。举个例子来说,假设你在开发一个复杂的web应用。你希望将这个应用分解成多个功能模块。一个View层模块,一个Model层模块,一个DAO模块。使用嵌入式OSGI容器来跨依赖地管理这些模块可以让你随时更新你的DAO模块却不需要重启你的服务器。

只要你的应用完全符合OSGI规范,它就可以在所有符合OSGI规范的容器内运行。现在,有三种流行的开源OSGI容器:

  1. Equinox是OSGI Service Platform Release 4的一个实现。是Eclipse 模块化运行时的核心。
  2. Knopflerfish另一个选择。
  3. Apache Felix是Apache软件基金会赞助的一个OSGI容器

在这篇文章里我们使用Equinox作为我们的OSGI容器。

尝试开发一个Hello World bundle

在OSGI的领域,发布的软件是以bundle的形式出现。bundle由java class类和资源文件组成,向设备所有者提供功能,同时可以为其他的bundles提供服务。Eclipse对开发bundles提供了强大的支持。Eclipse不仅仅提供创建bundles的功能,它还集成了Equinox这个OSGI容器,你可以在其上开发和调试OSGI组件。其实所有的Eclipse插件都是使用Eclipse规范代码写的OSGI bundle。接下来,你将可以学到如何使用Eclipse IDE开发一个Hello world osgi bundle。

开始开发bundle

我们一步步的开始:

  1. 启动Eclipse,依次点 File --> New --> Project。
  2. 选择Plug-in Project,next。
  3. 输入Project Name项目名称,比如com.xjtu.cruise.sample.HelloWorld,Target Platform(目标平台)里的an OSGI framework,选择standard。
  4. 剩下的保持默认,next。
  5. 下个对话框也默认,next。
  6. 然后选择Hello OSGI Bundle作为模版。Finish。

Eclipse会飞快的为你创建Hello world bundle的模版代码。主要包含两个文件:Activator.java和MANIFEST.MF。

Activator.java的代码如下所示:

package com.xjtu.cruise.sample.helloworld;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
    pu
  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值