有关使用 OSGi 的指导信息

开发 OSGi 应用程序的一些注意事项。

定义依赖关系

当 OSGi 捆绑软件使用另一个 OSGi 捆绑软件中的 Java™ 包时,必须显式表示这两个捆绑软件之间的接口。 使用该包的捆绑软件必须将该包添加到其 manifest.mf中的 Import-Package 语句。 提供包的捆绑软件必须将包添加到其 manifest.mf中的 Export-Package 语句。 当两个 OSGi 捆绑软件都部署到环境中时,可以解析依赖关系。

必须显式导入 OSGi 捆绑软件所使用的所有包 (包括 JRE 扩展,例如 javax.* )。 即使运行时将通过其他方法 (例如 boot委派) 来查找这些包,也是如此。 假定缺省情况下只有核心 java.* 软件包可用。

存在表示依赖关系的替代方法,尤其是捆绑包头 Require-Bundle。 但是, Require-Bundle 更粗粒度,并将使用者与特定捆绑软件绑定。 使用 Require-Bundle 还会阻止体系结构灵活性,并限制独立版本包的能力。

JRE 类可视性,boot委派和 system.packages.extra

在 OSGi 中,核心 JRE 包/类 (java.*) 的装入始终委派给引导程序类装入器。 假定系统中只有一个 JRE ,因此不需要显式依赖关系语句。 因此,从不需要将 java.* 依赖关系添加到捆绑软件清单。 但是,对于 JRE 的其他部分,需要这些包的应用程序捆绑软件必须编码 Import-Package 语句; 例如,特定于供应商的扩展 javax.* com.sun.*com.ibm.* 需要导入。 这是因为未将它们委派给引导程序类装入器,而是将它们视为 OSGi 系统的一部分。

OSGi 框架提供了自动向系统公开已知扩展包的 system 捆绑软件。 应用程序捆绑软件通过包含 Import 语句来注册其依赖关系,与 OSGi 捆绑软件提供的所有其他包一样。 此方法的优点是可以通过安装包含新代码的 OSGi 捆绑软件来将扩展替换为更新的实现。

此过程的例外情况是,使用特殊 OSGi 属性将特定程序包添加到 boot委派 列表中。 虽然方便 (因为不需要 Import 语句来访问这些包) ,但它限制了 OSGi 的灵活性,并且不被视为最佳实践。 有时,特定于供应商的扩展不会由 OSGi 实现自动添加到系统捆绑软件。 对于这些情况,并且假定该软件包在 JRE 中真正可用,那么可以使用属性 -Dorg.osgi.framework.system.packages.extra 将这些软件包添加到系统捆绑软件并允许应用程序 导入 进行解析。

捆绑软件激活程序

捆绑软件激活程序是 OSGi 捆绑软件中实现 BundleActivator 接口的类。 要使用激活程序, OSGi 捆绑软件必须使用捆绑软件清单中的 Bundle-Activator 头对其进行声明。 BundleActivator 接口具有可用于执行初始化或终止工作的 startstop 方法。 常见模式是查找服务依赖关系以在应用程序中使用。 但是,最好使用组件模型 (例如声明式服务) 来激活组件及其服务依赖关系。

单项捆绑软件

单例捆绑软件用于防止在内存中装入任何其他版本的捆绑软件,在任何时候运行时只能有一个已解析的版本。 如果需要从一组应用程序访问单个系统资源,那么可能需要使用单项捆绑软件。

OSGi 捆绑软件片段

片段是由 OSGi 框架动态连接到主机捆绑软件的 OSGi 捆绑软件。 它们共享其主机捆绑软件的类装入器,并且不参与捆绑软件的生命周期-因此它们不支持捆绑软件激活器。 片段的常见用例作为捆绑软件 补丁。 在 Bundle-ClassPath 上的 . 之前提供的片段允许优先从片段而不是主机装入类。

OSGi 服务注册表

OSGi 服务注册表使捆绑软件能够将对象发布到共享注册表。 服务在 Java 接口下发布,并可供 OSGi 环境中安装的其他捆绑软件使用。

微服务 (微服务)

微服务是一种软件体系结构样式,其中复杂应用程序由使用与语言无关的 API 相互通信的小型独立组件组成。 这些服务规模小,高度脱钩,专注于做一个小任务,促进了系统构建的模块化方法。 在 OSGi 组件之间使用 μ 服务可提供仅使用捆绑软件 连线 无法实现的灵活性和动态更新功能。 因此,鼓励在捆绑布线上使用 μ 服务。

捆绑软件和软件包版本控制

在 OSGi 中包版本控制的一种受青睐的方法是语义版本控制模型。 给定版本号 MAJOR.MINOR.PATCH,递增:
  1. 进行不兼容的 API 更改时的 MAJOR 版本
  2. 添加与较早版本兼容的功能时的 MINOR 版本
  3. 创建与较早版本兼容的错误修订时的 PATCH 版本

执行环境

执行环境 (EEs) 是 JRE 的符号表示,例如:
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
您需要使用最低版本的 EE ,为您提供所需的所有功能。 创建新的 OSGi 捆绑软件时,最近主动维护的 Java 执行环境通常已足够-仅当专用应用程序需要较低版本时,才会将其设置为较低级别。 选择特定 EE 时,必须将其单独保留,除非向上移动有明显的优势。 提高 EE 的版本可以创建更多没有实际价值的工作,例如将代码公开为新的警告和弃用。