osgi 入门 二之关于osgi

      前面通过一个例子简单的介绍了如何快速的开发一个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的类装载机制,这也是初学者最头疼的。


你可能感兴趣的:(eclipse,编程,servlet,J2SE,osgi)