Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JBoss Fuse结构中注册MBean(JMX)的最简单方法?_Java_Jmx_Fuseesb_Blueprint Osgi_Jbossfuse - Fatal编程技术网

Java 在JBoss Fuse结构中注册MBean(JMX)的最简单方法?

Java 在JBoss Fuse结构中注册MBean(JMX)的最简单方法?,java,jmx,fuseesb,blueprint-osgi,jbossfuse,Java,Jmx,Fuseesb,Blueprint Osgi,Jbossfuse,我已经为运行在JBoss Fuse Fabric(v7.2.0.redhat-024)中的服务编写了一个自定义的MBean 接口:com.mycompany.myservice.myServiceManagerBean 实现类:com.mycompany.myservice.MyServiceManager JBoss Fuse注册或“发现”我的MBean最简单的方法是什么 我尝试将以下内容添加到blueprint.xml中,但似乎不起作用: <bean id="org.apache.

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

  • 接口:
    com.mycompany.myservice.myServiceManagerBean
  • 实现类:
    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的本地进程(其中有两个)

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

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

com.mycompany.anotherservice.datasources

然而,数据源MBean是通过设置jmxEnabled=true来配置的,因此我并不知道如何配置和公开自己的MBean

有人能告诉我我需要在这里做什么吗


提前感谢。

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

首先,通过
将cxf总线注入blueprint.xml中的bean,并使用它向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,但我被告知这是正确的解决方案…

在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>


感谢我的同事Y.H.的帮助:)

注意:这段代码在纯java中工作,但在JBoss Fuse框架中不起作用-请参阅我的其他答案,了解如何在JBoss Fuse中工作