1

我为在 JBoss Fuse Fabric (v7.2.0.redhat-024) 中运行的服务编写了一个自定义MBean

  • 界面:com.mycompany.myservice.MyServiceManagerMBean
  • 实现类:com.mycompany.myservice.MyServiceManager

JBoss Fuse 注册或“发现”我的 MBean 的最简单方法是什么?

我尝试将以下内容添加到我的 blueprint.xml,但它似乎不起作用:

<bean id="org.apache.cxf.management.InstrumentationManager" class="org.apache.cxf.management.jmx.InstrumentationManagerImpl">
    <property name="enabled" value="true" />
    <property name="bus" ref="cxf" />
    <property name="usePlatformMBeanServer" value="true" />
</bean>

我使用部署我的服务的配置文件运行 JBoss Fuse Fabric,启动 JConsole 并连接到名为org.apache.karaf.man.Main的第一个本地进程(其中有 2 个)。

但是我找不到我的 MBean - 我希望com.mycompany.myservice在 MBean 选项卡上看到,但它不存在。

相反,我可以在这个树节点下看到我所有的数据源 jmx bean:

com.mycompany.anotherservice.datasources.

但是,数据源 MBean 是通过设置jmxEnabled=true来配置的,所以我对如何配置和公开自己的 MBean 并不明智。

有人可以告诉我我需要在这里做什么吗?

提前致谢。

4

2 回答 2

2

这是在 JBoss Fuse blueprint.xml配置中执行此操作的一种方法

<bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init">
    <property name="bundleContext" ref="blueprintBundleContext"/>
    <property name="mbeans">
        <map>
            <entry value="com.mycompany.myservice:type=admin,name=myadminBean" key-ref="myadminBean"/>
        </map>
    </property>
</bean>

感谢我的同事 YH 的帮助 :)

于 2013-08-07T10:29:58.213 回答
0

我收到了以下代码片段,应该可以解决这个问题。

首先,您将 cxf 总线注入到 blueprint.xml 中的 bean 中,<property name="bus" ref="cxf"/>并使用它向 InstrumentationManager 注册 bean:

    MyMBean mbean = new MyMBeanImpl();
    InstrumentationManager imanager = bus.getExtension(InstrumentationManager.class);
    final ObjectName objectName = new ObjectName("org.apache.cxf:type=foo,name=bar");
    imanager.register(mbean, objectName);

我仍然有这个问题,bus.getExtension(InstrumentationManager.class)返回null,但我被告知这是正确的解决方案......

于 2013-07-09T09:57:39.230 回答