读书人

利用 Eclipse 开发基于 OSGi 的 Bundl

发布时间: 2012-10-25 10:58:58 作者: rapoo

利用 Eclipse 开发基于 OSGi 的 Bundle 应用(转)
利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)??

级别: 初级

杨 晓飞 (yangxiaofei2000@hotmail.com), 软件工程师

2006 年 7 月 17 日

开放服务网关协议 (Open Services Gateway Initiative),简称OSGi,为网络服务定义了一个标准的、面向服务的计算环境,为用户提供了开放的、面向服务组件的、易于部署的编程模型,这个编程模型允许用户将定义好的接口规范绑定到 OSGi 运行环境中的特定Service,在构件 SOA 面向服务为中心的企业应用的过程中,OSGi技术正发挥越来越重要的作用。在本文中,将介绍 OSGi 的概念和体系结构,并且利用 Eclipse 3.2 开发一个基于 OSGi规范的服务应用 Bundle。通过学习本文,读者可以了解到如何开发和部署基于 OSGi 规范的 Bundle 应用。


利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
回页首


其中:

Execution Environment:

Bundle 应用所倚赖运行的 Java 执行环境,如 J2SE-1.4、CDC-1.0 等都是可用的执行环境。

Modules:

模块层定义了 Bundle 应用的加载策略。OSGi 框架是一个健壮并且严格定义的类加载模型。在大多数 Java应用中,通常只有一个单独的 ClassPath,它包含了所有的 Java 类文件和资源文件,OSGi基于Java技术,对于每个实现了BundleActivator 接口的 Bundle 应用,为它生成一个单独的 ClassLoader,使得 Bundle应用的组织更加模块化。

Life Cycle:

生命周期层可以动态地对 Bundle 进行安装、启动、停止、升级和卸载等操作。该层基于模块层,提供了一组 API 来控制 Bundle 应用的运行时操作。

Service Registry 和 Services:

OSGi 服务层定义了一个集成在生命周期层中的动态协作模型,是一个发布、动态寻找、绑定的服务模型。一个服务通常是一个 Java对象实现了特定的服务接口,并且通过服务注册,被绑定到 OSGi 的运行环境中。Bundle应用可以注册发布服务,动态绑定服务,并且在服务注册状态改变时,可以接受到事件消息等。

Security:

OSGi 的安全管理是基于 Java2 安全体系的,贯穿在 OSGi 平台的所有层中,它能够对部署在 OSGi 运行环境中的 Bundle 应用进行详细的管理控制。


利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
回页首


INSTALLED:安装完成,本地资源成功加载。

RESOLVED:依赖关系满足,这个状态意味该Bundle要么已经准备好运行,要么是被停止了。

STARTING:Bundle正在被启动,BundleActivator的start()方法已经被调用但是还没有返回。

STOPPING:Bundle正在被停止,BundleActivator的stop()方法已经被调用但是还没有返回。

ACTIVE:Bundle 被成功启动并且在运行。

UNINSTALLED:bundle被卸载并且无法进入其他状态。

Bundle接口定义了getState()方法来返回Bundle的状态。


利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
回页首


利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
回页首


(2)实现OSGi服务通常需要两个步骤,首先定义所提供服务的接口,然后实现这个服务接口。在本例中,我们创建一个姓名查询服务用来查询所给姓名是否有效。首先定义姓名查询接口NameService.java。下面是该接口的源代码:


NameService Interface 源代码

在start()方法中,利用BundleContext注册一个姓名查询服务,并且为该服务设置相关属性以便服务查询。在实现姓名查询服务时,我们简单定义了一个静态数组用于存放有效的姓名信息。

(3)定义Bundle描述文件MANIFEST.MF,Bundle应用example的MANIFEST.MF文件如下:


MANIFEST.MF文件信息

利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
回页首


在OSGi控制命令台中利用install命令安装exampleClient Bundle应用,用ss命令查看安装后的Bundle应用信息及其状态。如图5所示:


图示5 安装Bundle
利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)

在OSGi控制命令台中利用start命令安装exampleClient Bundle应用,用户可输入姓名,利用姓名查询服务来判断所输入姓名是否有效,用ss命令查看启动后的Bundle应用信息及其状态。如图6所示:


图示6 启动Bundle
利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)

用户在在OSGi控制命令台中,可利用stop命令来停止指定的Bundle应用,close命令用来停止并退出OSGi控制命令台。关于OSGi Equinox FrameWork控制台命令的详细信息,可查看参考资料。


利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
利用 Eclipse 开发基于 OSGi 的 Bundle 使用(转)
回页首

总结

OSGi服务框架提供了开放的、面向服务的、易于部署的编程模型,在构件面向服务为中心的企业应用的过程中,OSGi技术正发挥越来越重要的作用。目前,Eclipse 3.2 体系架构是参照OSGi实现的,Equinox框架是 Eclipse 组织基于OSGiRelease 4 的一个实现框架,它实现了OSGi 规范的核心框架和许多标准框架服务。在本文中,我们利用Eclipse平台开发了两个Bundle应用,并且在Bundle应用中,声明、实现、注册并引用了一个简单的服务,最后,将Bundle应用部署到EquinoxOSGi服务框架中。通过本文,读者可以了解如何开发和部署基于OSGi规范的Bundle应用。

读书人网 >操作系统

热点推荐