osgi compendium提供的服务
Osgi最开始面向的是从嵌入式和移动设备,是为了建立一套将可管理的服务通过网络交付到设备中的开放标准。在后来的发展为定义动态化组件的标准,通过提供模块化框架减少软件复杂度。
在使用时会用到osgi core(核心标准,core specification)和osgi cnpm(非核心的标准服务,compendium服务)两个包。Core服务在任何运行的OSGi框架内都是可用的,这要求所有的OSGi框架都要实现核心服务。而compendium服务可以由框架提供或者第三方实现。
OSGI特点
- 复杂性的降低:基于OSGi的组件模型bundle能够隐藏内部实现,bundle基于服务进行交互。
- 复用:很多第三方的组件可以以bundle的形式进行复用。
- 简单小巧:核心的API总过包括不超过30个类和接口,在系统中引入OSGi几乎没有什么开销。
- 非侵入式:服务可以以POJO的形式实现,不需要关注特定的接口。
- 易于部署:OSGi定义了组件是如何安装和管理的,标准化的管理API使得OSGi能够和现有和将来的各种系统有机的集成。
- 动态更新:这是OSGi被最经常提起的一个特性,即所谓的“热插拔”特性,bundle能够动态的安装、启动、停止、更新和卸载,而整个系统无需重启。
- 适配性:这主要得益于OSGi提供的服务机制、组件可以动态的注册、获取和监听服务,使得系统能够在OSGi环境调整自己的功能。
- 透明:提供了管理API来访问内部状态,因此通常无需去查看日志,能够通过命令行进行调试。
- 版本化:bundle可以版本化,多版本能够共存而不会影响系统功能,解决了JAR hell的问题。
- 快速:这得益于OSGi的类加载机制,和JAR包的线性加载不同,bundle委托式的类加载机制,使得类的加载无需进行搜索,这又能有效的加快系统的启动速度。
- 懒加载:OSGi技术采用了很多懒加载机制。比如服务可以被注册,但是直到被使用时才创建。
参考
https://www.osgi.org/about-us/mission/
http://osgi.com.cn/article/7289226