Java 寻求有关使用Blueprint以编程方式访问ServiceMix捆绑包状态信息的指导

Java 寻求有关使用Blueprint以编程方式访问ServiceMix捆绑包状态信息的指导,java,osgi,apache-karaf,apache-servicemix,Java,Osgi,Apache Karaf,Apache Servicemix,我们正在运行一个基于的容器。OSGi提供了在ServiceMix控制台中公开的功能,用于报告以下方面的信息: 我到处找。现在我要问:有人知道从ESB中运行的代码中访问此信息的任何工作示例、API使用指南或其他指南吗?理想情况下,我想: 确定安装了哪些捆绑包 监控已识别包的状态;而且,至少 动态停止/卸载和启动/重新安装标识的捆绑包 请分享关于这方面的任何信息,或者只是从任何途径开始更好地研究它 谢谢。Blueprint对此用途有限,因为Blueprint根据定义是声明性的,并且您希望以编程方式执

我们正在运行一个基于的容器。OSGi提供了在ServiceMix控制台中公开的功能,用于报告以下方面的信息:

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

  • 确定安装了哪些捆绑包
  • 监控已识别包的状态;而且,至少
  • 动态停止/卸载和启动/重新安装标识的捆绑包
  • 请分享关于这方面的任何信息,或者只是从任何途径开始更好地研究它


    谢谢。

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

    在OSGi环境中,您的需求(3)加载捆绑包并没有真正的意义,因为它们的生命周期是安装然后开始。如果尚未安装捆绑包,它将不会包含在getBundles()中,但可以使用上下文进行安装

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

    <bean class="SomeClass">
        <property name="context" ref="blueprintBundleContext"/>
    </bean>
    
    
    
    我从中借用了这个示例,但developerWorks上有一个非常好的蓝图教程:


    最近有人问了一个类似的问题,您可能也会发现这个问题很有用:(
    ss
    类似于
    bundle:list
    ,尽管它没有给出任何特定于蓝图的信息)

    谢谢你提供的极好的信息。我想澄清一下我的问题。我们处在一个非常动态的SOA中,我们知道软件堆栈的确切内容。监控特定捆绑包的健康状况,以与外部服务的响应性相结合,这是一种利益。根据具体情况,我们可能希望停止/卸载或重新启动/重新安装该捆绑包,但不排除捆绑包行为不正常的情况。我不确定我是否误用了这里的术语。我想这取决于错误行为的确切性质以及你希望通过反弹它来实现什么。停止和启动它将导致激活器(如果有)重新运行并重新初始化blueprint。卸载和重新安装将导致类被卸载。如果要重新加载类,您可能还需要阅读refreshPackages()。BundleListener可以帮助您监控捆绑包。一般来说,查询或监视OSGi捆绑包是非常简单的,但听起来您的需求有点微妙。
    <bean class="SomeClass">
        <property name="context" ref="blueprintBundleContext"/>
    </bean>