OSGi Bundle

OSGi 捆绑软件是包含 Java™ 代码、资源和描述了该捆绑软件及其依赖关系的清单的 Java 归档文件。 捆绑软件是应用程序的部署单元。

捆绑软件的类型
OSGi 捆绑软件清单文件
捆绑软件生命周期

捆绑软件的类型

应用程序捆绑软件
应用程序捆绑软件是您专为应用程序创建的捆绑软件。这些捆绑软件是特定于实例的或独立的捆绑软件;即,它们不用于共享。它们在 Application-Content 头中的应用程序清单内进行引用。
共享捆绑软件
共享的捆绑软件不是特定于应用程序的捆绑软件。来自共享捆绑软件的软件包的单个实例可由许多应用程序使用。共享捆绑软件无法导入应用程序捆绑软件中的软件包或服务。必须通过引用来提供应用程序中的共享捆绑软件,而不是将这些捆绑软件直接包含在应用程序中。
共享的捆绑软件进一步划分为使用中的捆绑软件和供应捆绑软件:
使用中的捆绑软件
使用中的捆绑软件是一个共享的捆绑软件,用于向应用程序捆绑软件提供至少一个软件包。使用中的捆绑软件在 Use-Bundle 头中的应用程序清单内进行引用。
供应捆绑软件
供应捆绑软件是一个共享的捆绑软件,用于向应用程序捆绑软件、使用中的捆绑软件或另一个供应捆绑软件提供至少一个软件包或服务。不在应用程序清单中引用供应捆绑软件,并且应用程序不知道如何满足每个供应捆绑软件的需求。
OSGi 捆绑软件可存储在以下任何位置:
  • 用于应用程序的企业捆绑软件归档 (EBA) 文件。
  • 服务器内部 OSGi 捆绑软件存储库。
  • 外部 OSGi 捆绑软件存储库。

应用程序捆绑软件可存储在 EBA 文件或存储库中。共享的捆绑软件存储在存储库中(否则,将无法共享这些捆绑软件)。

从存储库获取捆绑软件的过程称为供应。对于供应,会将以下术语用于捆绑软件:
引用的捆绑软件
引用的捆绑软件是在应用程序清单中引用的捆绑软件,存储在存储库中。
依赖性捆绑软件
依赖性捆绑软件是未在应用程序清单中引用的捆绑软件,但由在应用程序清单中引用的捆绑软件使用或由其他依赖性捆绑软件使用。

未直接包含在 EBA 文件中的应用程序捆绑软件是特定于实例的引用的捆绑软件。使用中的捆绑软件是共享的引用的捆绑软件。供应捆绑软件是共享的依赖性捆绑软件。

OSGi 捆绑软件清单文件

OSGi 捆绑软件 JAR 文件包含一个 JAR 清单文件。此文件包含使 OSGi 框架能够处理捆绑软件的模块化方面的元数据。

以下代码是捆绑软件清单文件 META-INF/MANIFEST.MF 的内容的示例:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: MyService bundle
Bundle-SymbolicName: com.sample.myservice
Bundle-Version: 1.0.0
Bundle-Activator: com.sample.myservice.Activator
Import-Package: org.apache.commons.logging;version="1.0.4"
Export-EJB: ExampleBean
Export-Package: com.sample.myservice.api;version="1.0.0"
此清单文件中的元数据包括以下键属性:
Bundle-Version
描述捆绑软件的版本并在同一框架实例中允许多个版本的捆绑软件同时处于活动状态。
Bundle-Name
提供捆绑软件的人类可读名称。
Bundle-SymbolicName
在框架中唯一标识捆绑软件。有了它仍然需要 Bundle-Name 头。
Bundle-Activator
从框架接收关于捆绑软件生命周期更改的通知。此属性指定用于实现 org.osgi.framework.BundleActivator 接口的类。
Import-Package
为捆绑软件解决方案声明 OSGi 框架所使用的捆绑软件的外部依赖关系。可以声明每个软件包的特定版本或版本范围。在此示例清单文件中,要求 org.apache.commons.logging 软件包处于 V1.0.4 或更高版本。
使用此属性可指定您要使捆绑软件从运行时导入的任何软件包的名称。如果在此属性中未指定捆绑软件所需的软件包,那么可能会在捆绑软件装入时遇到编译错误。
注: 还必须在包含软件包的捆绑软件的 Export-Package 属性中指定此软件包。
限制: 如果捆绑软件清单文件使用 Import-Package 属性来声明不在工作空间或目标平台内的捆绑软件的捆绑软件依赖关系,那么编辑器会将该依赖关系标记为错误。要解决此限制,请确保您作为依赖关系进行声明的所有捆绑软件都位于工作空间内,或者使用快速修复将该捆绑软件添加至目标平台。要使用快速修复,请切换至“标记”视图,然后右键单击错误标记并选择快速修复
要点:MANIFEST.MF 文件中指定捆绑软件依赖关系时,请使用 Import-Package 属性,而不要使用 Require-bundle。如果使用 Require-bundle 来指定捆绑软件依赖关系,那么您的应用程序可能不部署。
Import-Package 是更灵活的用于声明依赖关系的方式:
  • 您可以对所需的功能声明依赖关系,而不必对该功能源自的捆绑软件声明依赖关系,因为它不添加对您的捆绑软件不需要但却包含在相依捆绑软件中的软件包的不必要依赖关系。
  • 您可以指定所声明软件包的版本或版本范围,因此您不必对不同版本的捆绑软件中的更改做出反应。
Export-EJB:
如果将 EJB 项目转换为 OSGi 捆绑软件,那么会将 Export-EJB 部分添加至清单。使用此部分可列示您要公开的 EJB。可以通过手动编辑或者右键单击已转换的 EJB 项目并选择 OSGi > 管理 EJB 导出,将 EJB 添加到此部分。
Export-Package
声明在捆绑软件外部可视的软件包。此处未声明的任何软件包仅在捆绑软件中可视。
使用此属性可指定您要使捆绑软件导出到运行时的任何软件包的名称。如果未在此属性中指定其他捆绑软件所需的软件包,那么可能不解析相依捆绑软件。

捆绑软件生命周期

框架管理捆绑软件的生命周期。当您安装和运行捆绑软件时,它会经历各种状态。

捆绑软件的可能状态为:
已安装
已安装捆绑软件,但尚未满足该捆绑软件的所有依赖关系。该捆绑软件需要尚未由目前已安装的任何捆绑软件所导出的软件包。
已解析
已安装捆绑软件并且已满足该捆绑软件的依赖关系,但该捆绑软件尚未处于运行状态。如果某个捆绑软件已启动并且已满足该捆绑软件的所有依赖关系,那么该捆绑软件将跳过此状态。
正在启动
这是一种临时状态,捆绑软件在启动过程中会经历这种状态。
活动
捆绑软件处于运行状态。
已停止
这是一种临时状态,捆绑软件在停止过程中会经历这种状态。
已卸载
捆绑软件不再存在于框架中。
指示主题类型的图标 概念主题
信息中心的条款和条件 | 反馈

时间戳记图标 最近一次更新时间: 2014 年 4 月 17 日

文件名:cbundles.html