动态内容管理

通常,您会通过在功能部件清单文件的 Subsystem-Content 头中列示捆绑软件以将捆绑软件安装到运行时环境中。但是,您还可通过将用户编写捆绑软件作为用户编写功能部件的 Subsystem-Content 的一部分安装来动态添加和移除 OSGi 捆绑软件。用户编写捆绑软件包含 OSGi 捆绑软件上下文以安装和控制其他捆绑软件。

在 Liberty 中安装、启动、停止和卸载捆绑软件

注: 在以下部分中,用户编写功能部件称为 UserFeatureA,用户编写捆绑软件称为 FeatureBundleA
安装捆绑软件
通过使用下列其中一个方法,可编写 FeatureBundleA 以获取 OSGi 捆绑软件上下文 org.osgi.framework.BundleContext

FeatureBundleA 获取捆绑软件上下文后,可使用 installBundle(String location)installBundle(String location, InputStream stream) 方法来安装其他捆绑软件。

动态安装的捆绑软件会在缺省重新启动时恢复状态。它们在干净启动后不会保留,需要重新安装。有关更多详细信息,请参阅捆绑软件高速缓存

启动捆绑软件
如果要启动已安装捆绑软件,应由安装捆绑软件 FeatureBundleA 对该捆绑软件调用 start 方法。
停止和卸载捆绑软件
如果已从服务器配置中移除用户编写功能部件 UserFeatureA,那么 FeatureBundleA 会停止并且还会卸载。卸载 FeatureBundleA 会导致卸载 FeatureBundleA 安装的所有捆绑软件(如果它们尚未卸载)。系统会对每个捆绑软件调用 org.osgi.framework.Bundle.uninstall() 方法,此方法会停止并卸载该捆绑软件。如果通过任何其他手段卸载 FeatureBundleA,那么此卸载过程也适用。

如果服务器停止时从服务器配置中移除 UserFeatureA,那么系统会在下一次服务器启动时移除 UserFeatureA 安装的捆绑软件。如果捆绑软件的启动级别仍为缺省值,那么系统会在捆绑软件重新启动前将其移除。如果捆绑软件的启动级别已修改,那么系统可能在捆绑软件重新启动后才会将其移除。

FeatureBundleA 根据 OSGi 核心规范使用 org.osgi.framework.Bundleorg.osgi.framework.BundleContext 接口执行其他生命周期管理任务。

Liberty 中的捆绑软件高速缓存、包可视性及编程模型支持

捆绑软件高速缓存
服务器关闭时,所有当前安装的捆绑软件会停止,OSGi 元数据会保存至捆绑软件高速缓存。缺省启动时,这些已安装捆绑软件返回至其先前状态。干净启动时,FeatureBundleA 安装的所有捆绑软件会删除其持久数据。因此,干净启动时不会恢复这些捆绑软件。FeatureBundleA 本身会恢复,因为它由功能部件管理器重新安装(只要 UserFeatureA 仍在服务器配置中)。如果要在干净启动后重新安装任何捆绑软件,应由 FeatureBundleA 执行重新安装。系统不会向您发出干净启动的通知,但您可使用 OSGi BundleContext getBundle(String location) 方法来检查是否安装了某个捆绑软件。
包可视性
动态安装且未列示在功能部件清单文件的 Subsystem-Content 头中的捆绑软件具有以下可视性:
  • 动态安装的捆绑软件可导入当前配置的功能部件集提供的任何 API 和 SPI 包。
  • 由同一产品扩展内任何其他捆绑软件导出且未声明为 API 或 SPI 的包对动态安装的捆绑软件不可视。
  • 从动态安装的捆绑软件导出的包不能声明为 API 或 SPI。
  • 导入从动态安装的捆绑软件导出的包时没有任何限制。
编程模型支持
动态安装的捆绑软件可使用 OSGi 企业规范的实现,只要相应运行时功能部件配置为启用这些捆绑软件。

用于指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: Monday, 5 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=rwlp_dynamic_content
文件名:rwlp_dynamic_content.html