【问题标题】:How do I start a specific bundle in my own OSGi application deployed in WAS 8.0?如何在我自己的部署在 WAS 8.0 中的 OSGi 应用程序中启动特定的捆绑包?
【发布时间】:2026-01-20 00:40:01
【问题描述】:

我有一个相当复杂的 OSGi 应用程序,它使用声明式服务并被设计为部署在 Equinox 中。现在的任务是让这个应用程序可以在 WAS 8 中部署。

第一次尝试非常实用:我部署了一个 EAR,它启动了基本相同的 Equinox,并且在对 WAS 类加载策略进行了一些调整之后,它已经工作了。

现在我想更进一步:摆脱 Equinox 运行时并在 WAS 8 中“本地”部署我的包。所以我编写了一个 EBA,由我的业务包、它们的依赖项和 Equinox DS 运行时组成。 EBA 作为资产部署并集成到 BLA 中。应用程序甚至已启动并运行,但组件未初始化。

关键是必须在自己的业务包之前启动 equinox.ds (更新:不是必须的,下面将讨论) 以使 DS 完成它的工作。但是我如何告诉捆绑包在部署的 EBA 中首先启动?我需要一些 Equinox 的 config.ini 文件的模拟。

我知道我可以使用原生支持的蓝图重新连接我的组件,但坦率地说,这是我最不想做的事情。应该可以让 Equinox DS 工作,不是吗?

另一个问题是:如何为自己在WAS 8 下部署的应用程序获取OSGi 控制台?我想控制我的捆绑包,但似乎无法从管理控制台进行。

更新

感谢 BJ 和 Neil(以下讨论),问题归结为“如何在我自己的部署在 WAS 8.0 中的 OSGi 应用程序中启动特定的捆绑包?”

【问题讨论】:

  • 您无需在 DS 处理捆绑包之前启动 DS。您使用的是传统的 WAS 还是 Liberty Profile?
  • 您必须启动 quinox.ds。否则组件初始化应该如何发生?
  • 关于配置文件类型:我们使用 WAS 8.0,AFAIK Liberty Profile 尚未在那里引入,但在配置文件管理工具中我选择了“开发”类型的配置文件。
  • BJ 正在强调开始订购。是的,您需要启动 DS,但您可以在所有其他捆绑包之前或之后启动它。
  • 不!之前有效。后有效。中间有效。您可以按任意顺序启动捆绑包。

标签: osgi equinox websphere-8 osgi-bundle declarative-services


【解决方案1】:

要回答您问题的 OSGi 控制台部分,普通的 OSGi 控制台将无法工作,因为 OSGi 应用程序是在嵌套框架中管理的。 WebSphere 提供了自己的控制台,可以导航嵌套的应用程序:http://pic.dhe.ibm.com/infocenter/wasinfo/v8r0/index.jsp?topic=%2Fcom.ibm.websphere.osgi.nd.multiplatform.doc%2Ftopics%2Fta_admin_runtime_console.html

【讨论】:

  • 谢谢。这个控制台可以完成这项工作。