Archive for the ‘OSGi’ tag
Equinox p2笔记
Equinox p2是Equinox的组件之一,极大增强了基于Eclipse的包管理功能。
引入p2之后,典型的eclipse目录结构如下:
eclipse/
configuration/
config.ini
org.eclipse.equinox.simpleconfigurator/
bundles.info
dropins/
features/
p2/
plugins/
eclipse.exe
eclipse.ini
...
- p2
目录用于存放p2自身的配置文件 - bundles.info
保存的是安装的插件列表,这个文件由p2维护。有时因为开发需要,也可以手工修改(不建议这么做)。 - dropins
向下兼容用的插件目录,对于无法使用p2安装的插件,直接扔进去就能使用。后面会详细说明。
dropins
p2提供了一种监视目录机制(watched directories),能够自动从被监视的目录中安装及卸载插件。dropins是默认的监视目录。p2在加载dropins目录中的插件时,能够自动解决依赖关系。需要特别注意的是,如果通过p2升级一个安装在dropins目录中的插件,则新版本会安装在eclipse/plugins和eclipse/features目录中。
dropins目录中的插件可以以多种目录组织方式部署,具体可以参看Supported dropins formats。
此外,还可以让多个eclipse共享一个dropins目录,具体的做法在《使用 Equinox p2 简化 Eclipse 插件的安装》有详细介绍。
Bundle pooling
引入p2前,共享插件时间很麻烦的事情,需要通过links的方式。p2支持bundle pooling的方式共享插件包。避免因磁盘上重复包太多引发的一系列管理和空间浪费的问题。
关于bundle pooling的例子,可以参看Bundle pooling
参考资料

OSGi 初体验
最近开始入门OSGi。找到一本《Modular Java —— Creating Flexible Applications with OSGi and Spring》,只有200多页,先从简单的开始吧!
之前对OSGi一直没什么清晰的概念,而这本书里一开始就给了OSGi一个很形象的比喻:
OSGi is sometimes described as “SOA in a JVM.”
在模块化方面,OSGi相对于传统的JVM,有显著的优势:
- Bundle is given its own class space (Bundle运行于独立的类空间之中)
基于这个特性,多个版本的bundle可以在运行时并存。 - 动态模块化,OSGi平台管理bundle的声明周期。可以在运行时动态安装、启动、停止、卸载bundle。
但有一点必须强调:与任何技术一样,OSGi也不是银弹。OSGi仅提供了一种更为灵活和丰富的模块化架构的平台,而真正高质量的模块化设计依然需要设计师遵循了模块化设计的思想。
