OSGi(Open Service Gateway Initiative)
OSGi(Open Service Gateway Initiative,直译为“开放服务网关”)实际上是一个由OSGi联盟发起的Java为技术平台的动态模块化规范,OSGi不是一个应用层面的框架,而是设计层面的规范。软件设计就不外乎复用、内聚、耦合三个主题,OSGi作为Java的模块化规范,也是为了更好地解决Java在这三个主题的问题。OSGi规定了如何定义一个Module以及这些模块之间如何交互。在OSGi规范中,Java模块被称为Bundle,OSGi规范就是指导怎么令这些Bundle能更好的有高内聚性、有松耦性,能更好地被复用。基于OSGi的应用,就是由一个一个Bundle组成的,通过OSGi把这些Bunde组织在一起,就形成了系统。
OSGI框架
Bundle
Bundle是OSGi中最基本的单位,通俗地讲,如果说OSGi是基于Java平台的“模块化开发体系”,那么Bundle便是其中的“模块”
一个符合OSGi规范的Bundle首先必须是一个符合JAR文件格式规范的JAR包,JAR文件格式规范里定义的/META-INF/MANIFEST.MF文件用于描述JAR包的元数据信息,如JAR包的版本、数字签名信息等,Bundle在MANIFEST.MF文件中添加了大量扩展定义,如描述该Bundle可以提供哪些资源、依赖哪些其他Bundle、启动或卸载时要执行哪些动作等。
Bundle生命周期
INSTALLED 初始安装的
ACTIVE 激活未使用
RESOLVED 依赖都被满足的
Bundle间的依赖
OSGi对Java平台的类加载机制的一个重要改进就是支持包级别的类导入和导出。在OSGi中,每个Bundle都有自己的类加载器,该加载器能够看到BundleJar文件内部的类和资源。Bundle通过配置jar包中的MANIFEST.MF,可以控制从Bundle导出的包,而没有导出的包,则在Bundle外部是不能够访问的。这样就很好地完成了内部类和外部类的隔离。
Bundle 的内加载器配置清单目录MANIFEST.MF来格力外部和内部的jar包,通过以下命令来到导入导出
-
Import-Package
-
Export-Package
karaf
Karaf, 一个基于OSGi的运行环境, 提供了一个轻量级的OSGi容器,可以用于部署各种组件和应用程序。
Feature
feature:一组bundle,其具备特定的功能,比如odl-mdsal-all就算是一个feature,其由若干个bundle,配置文件或其他feature组成。
详细还要看书,这里只是简单介绍