Самый простой способ зарегистрировать MBean (JMX) в JBoss Fuse Fabric?

Я написал собственный MBean для службы, работающей в JBoss Fuse Fabric (v7.2.0.redhat-024).

  • Интерфейс: com.mycompany.myservice.MyServiceManagerMBean
  • Класс реализации: com.mycompany.myservice.MyServiceManager

Как проще всего зарегистрировать или «обнаружить» мой MBean с помощью JBoss Fuse?

Я попытался добавить следующее в свой файл 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-бины источника данных в этом узле дерева:

com.mycompany.anotherservice.datasources.

Однако MBean-компоненты источника данных были настроены путем установки jmxEnabled=true, поэтому я не знаю, как настроить и предоставить свой собственный MBean-компонент.

Может кто-нибудь, пожалуйста, скажите мне, что мне нужно сделать здесь?

Заранее спасибо.


person vikingsteve    schedule 08.07.2013    source источник


Ответы (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>

Спасибо моему коллеге Ю.Х. за помощью :)

person vikingsteve    schedule 07.08.2013

Я получил следующий фрагмент кода, который должен решить эту проблему.

Во-первых, вы вставляете шину cxf в bean-компонент в blueprint.xml через <property name="bus" ref="cxf"/> и используете ее для регистрации bean-компонента в InstrumentationManager:

    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) возвращает ноль, но мне сказали, что это правильное решение...

person vikingsteve    schedule 09.07.2013
comment
Примечание: этот код работает в простой Java, но не работал с использованием платформы JBoss Fuse — см. мой другой ответ о том, как это может работать в JBoss Fuse. - person vikingsteve; 07.08.2013