1

我们正在运行Apache ServiceMix 4 ESB,它运行基于OSGi的Apache Karaf容器。OSGi 提供了在 ServiceMix 控制台中公开的工具,用于报告安装在容器中的捆绑包的状态信息:

osgi:list

我搜索了高低。现在我要问:是否有人知道任何工作示例、使用 API 的指南或其他从 ESB 中运行的代码中访问此信息的指南?理想情况下,我想:

  1. 确定安装了哪些捆绑包;
  2. 监控已识别捆绑包的状态;并且,至少,
  3. 动态停止/卸载并启动/重新安装已识别的捆绑包,

请分享这方面的任何可用信息,或者只是任何可以开始更好地研究它的途径。

谢谢。

4

1 回答 1

2

蓝图对此用途有限,因为蓝图根据定义是声明性的,并且您希望以编程方式执行某些操作。但是,Blueprint 可以通过注入包上下文来设置您的方式。一旦你有了一个包上下文,你就可以使用org.osgi.frameworkAPI来获取所有包 ( context.getBundles())、查询它们的状态、启动和停止它们,等等。

您的要求 3),加载一个包,在 OSGi 上下文中并没有真正意义,因为它们的生命周期是它们被安装然后启动。如果一个包没有被安装,它不会被包含在 getBundles() 中,但是它可以使用上下文来安装。

要将上下文注入蓝图 bean,请使用特殊属性:

<bean class="SomeClass">
    <property name="context" ref="blueprintBundleContext"/>
</bean>

我从Enterprise OSGi in Action借用了那个例子,但是 developerWorks 上有一个非常好的蓝图教程:http: //www.ibm.com/developerworks/opensource/library/os-osgiblueprint/

最近有人问了一个类似的问题,您可能也会发现它很有用:我应该如何将 OSGi 控制台实现到 Bundle 中?ss类似于bundle:list,虽然它不提供任何蓝图特定的信息)。

于 2012-02-26T21:21:46.657 回答