`

OSGi学习笔记

阅读更多
OSGi(Open Service Gateway Initiative)有双重含义。一方面它指OSGi Alliance组织;另一方面指该组织制定的一个基于Java语言的服务(业务)规范——OSGi服务平台(Service Platform)。
该规范和核心部分是一个框架 ,其中定义了应用程序的生命周期模式和服务注册。基于这个框架定义了大量的OSGi服务: 日志、配置管理、偏好,HTTP(运行servlet)、XML分析、设备访问、软件包管理、许可管理、星级、用户管理、IO连接、连线管理、Jini和 UPnP。
这个框架实现了一个优雅、完整和动态的组件模型。应用程序(称为bundle)无需重新引导可以被远程安装、启动、升级和卸载(其中Java包/类的管理被详细定义)。API中还定义了运行远程下载管理政策的生命周期管理。服务注册允许bundles去检测新服务和取消的服务,然后相应配合。

一、OSGi的进化过程
1.模块分离(类加载器—>模块)
2.从整体上恢复可见性等功能(导入导出)
3.与购物行为的类比
4.导入导出的粒度选择(granularity,包)
5.包连线(wiring,导入—>委派其他类加载器加载)
    既然对于模块如何自我分离然后再连接有了一个模型,我们现在可以想象创建一个框架,这个框架将为这些模块构造实际的运行时实例。它将负责安装模块以及构造类加载器(这些类加载器知道相应模块的内容)。
    然后它将查看新安装的模块的导入,并试图找到匹配的导出。假设模块 A 导出包 com.foo,模块 B 要导入这个包。该框架将通知 B,它可以从模块 A 获得 com.foo 的类,这个称为连线(wiring)。如果 B 的类加载器要加载类 com.foo.Bar,它将委派 A 的类加载器来做。对整个模块的导入进行连线的过程成为解析(resolution),当所有导入都成功进行连线后,那么这个组件(bundle)就被解析(resolved)了,这将令它完全可用。
6.版本控制
    对于版本编号,OSGi 强烈建议而不是强制使用以下语法规则:
  • 对于非向后兼容的更改,对主要(第一)部分进行递增。
  • 对于向后兼容的功能改善,对次要(中间)部分进行递增。
  • 对于未造成可见的功能更改的故障修复,对最后部分进行递增。

7.对模块和元数据进行打包
    我们这个模块系统需要一种方法来对模块的内容以及描述导入和导出的元数据进行打包,将其包括到一个可部署的单元中。
    Java 已经有了标准的部署单元:JAR 文件。JAR 文件可能并不算一种非常成熟的模块,但对于移动大块的编译代码还是不错的,所以我们并不需要创建新的东西。那么现在的唯一问题是,将元数据(即导入和导出列表、版本等等)放在哪里?
    package-info.class 和 module-info.class
8.后期绑定
    模块拼图的最后一块是部署到接口的后期绑定。
    每个模块将它们的常用部分发布到“服务寄存器”成为一种服务。然后采用DI框架进行服务的依赖注入。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics