前面通过一个例子简单的介绍了如何快速的开发一个osgi应用。下面来具体说明一下什么是osgi,以及osgi 能做什么,为什么使用osgi,以及到底osgi能带来什么益处。
首先osgi是什么,osgi是由osgi alliance 制定的一个规范。由此规范,形成了osgi框架。基本上,osgi 也就是类似于servlet规范一样,提供相应的接口。而具体的实现,由相应的平台实现,如equinox平台。
说了那么多,具体osgi能做什么呢?个人归纳了一下,包括以下几点:
1.提供更高层次的模块管理,相对于java的包来说,osgi更加倾向于模块管理。
2.提供更好的封装性,使用更加严格的类装载机制,让模块内的封装性变得更强。
3.真正的面向接口,面向服务编程,使模块之间的耦合度大大降低。
4.支持热部署,只要osgi内核运行着,其他模块可以随时更新,增加。
5.易扩展,便于使用插件的模式进行扩展。具体看看eclipse的插件体系就知道了。
简单介绍了一下osgi,下面说说osgi的几个层次:
安全层:基于java2 安全机制,增加了相应的限制和使用标准的java 许可。
模块层;定义标准的java 模型
生命周期层:提供完整的bundles生命周期管理
服务层:提供动态,简洁和持久化编程模型。
相应的实际服务接口。
主要来说说模块层,看过前面的例子应该知道,那个例子一共包括10个模块(包括系统模块)osgi 以bundle作为一个基本的模块单元。bundle主要包括需要的基础资源,包括类和其他资源文件;一个manifest文件,用于描述bundle信息,以及可选的osgi-opt目录。
manifest文件是最重要的描述文件,如果缺失,则bundle也就无法装载。
简单解释一下前面定义过的bundle manifest;bundle 文件包括几个必须的元素:
Bundle-ManifestVersion: 2//定义了bundle遵循规范的规则,1表示r3规范 2表示r4和以后的版本
Manifest-Version: 1.0 //主要的版本号
//唯一的bundle名称,相当于在系统中的id。singleton表示是否使用单启动方式
Bundle-SymbolicName: org.demo.helloworld;singleton:=true
//以下是可选的
Bundle-Name: Helloworld Plug-in//bundel 名称
Bundle-Vendor: zsoft//发布商
Bundle-RequiredExecutionEnvironment: J2SE-1.5//需要的执行环境
//下面是一些引用包的信息,包括包名称和版本号,只有引用了这些包,才能让classloader装载。
Import-Package: javax.servlet;version="2.4.0",
javax.servlet.http;version="2.4.0",
org.apache.commons.logging;version="1.0.4",
org.osgi.framework;version="1.4.0"
//这是直接引用整个bundle,一般不提倡整个引用,这里是用来定义扩展
Require-Bundle: org.eclipse.equinox.http.registry;bundle-version="1.0.100"
这里简单的描述了一下主要的几个bundle头信息,如果需要详细了解,具体参考相应的规范。本篇的内容就这些,下篇详细讲解一下osgi的类装载机制,这也是初学者最头疼的。
posted on 2009-02-14 16:28
布衣郎 阅读(3434)
评论(1) 编辑 收藏 所属分类:
eclipse