Ошибка при запуске агента Mule-ESB Mx4j в WebSphere 7 - PullRequest
0 голосов
/ 31 марта 2012

Я пытаюсь использовать агент Mx4j (и Spring Framework 3.0.5) для предоставления некоторых POJO в моем приложении Mule-ESB (Mule 3.1.2) в качестве службы HTTP. Агент настроен в mule-config.xml следующим образом:

<management:jmx-mx4j-adaptor jmxAdaptorUrl="http://0.0.0.0:9990" />

Кроме того, я использую Spring MBeanExporter для предоставления нужных POJO:

<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
    <property name="assembler" ref="assembler" />
    <property name="namingStrategy" ref="namingStrategy" />
    <property name="autodetect" value="true" />
</bean>

<bean id="jmxAttributeSource" class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" />
<bean id="assembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
    <property name="attributeSource" ref="jmxAttributeSource" />
</bean>
<bean id="namingStrategy" class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
    <property name="attributeSource" ref="jmxAttributeSource" />
</bean>

Все отлично работает в моей среде рабочего стола, которая работает в Jetty. Однако при развертывании EAR на нашем сервере WebSphere 7 приложение не запускается, вызывая следующее исключение:

[3/30/12 16:33:58:858 BRT] 00000038 webapp        I com.ibm.ws.webcontainer.webapp.WebApp log SRVE0296E: [BaseApp#BaseApp.war][/context][Servlet.LOG]:.Failed to invoke lifecycle phase "start" on object: org.mule.module.management.agent.Mx4jAgent@13ef13ef:.org.mule.api.lifecycle.LifecycleException: Failed to invoke lifecycle phase "start" on object: org.mule.module.management.agent.Mx4jAgent@13ef13ef
        at org.mule.lifecycle.phases.DefaultLifecyclePhase.applyLifecycle(DefaultLifecyclePhase.java:236)
        at org.mule.lifecycle.RegistryLifecycleManager$RegistryLifecycleCallback.onTransition(RegistryLifecycleManager.java:276)
        ...
        ...
Caused by: org.mule.module.management.agent.JmxManagementException: Failed to start Mx4j agent
        at org.mule.module.management.agent.Mx4jAgent.start(Mx4jAgent.java:205)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:611)
        at org.mule.lifecycle.phases.DefaultLifecyclePhase.applyLifecycle(DefaultLifecyclePhase.java:225)
        ... 67 more
Caused by: javax.management.InstanceNotFoundException: Mule.BaseApp.6:name=Mx4jHttpAdapter
        at java.lang.Throwable.<init>(Throwable.java:67)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1094)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBeanInfo(DefaultMBeanServerInterceptor.java:1384)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.getMBeanInfo(JmxMBeanServer.java:892)
        at com.ibm.ws.management.AdminServiceImpl.getMBeanInfo(AdminServiceImpl.java:1524)
        at com.ibm.ws.management.AdminServiceImpl.checkForOpDeprecation(AdminServiceImpl.java:2662)
        at com.ibm.ws.management.AdminServiceImpl.preInvoke(AdminServiceImpl.java:2284)
        at com.ibm.ws.management.AdminServiceImpl$1.run(AdminServiceImpl.java:1309)
        at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
        at com.ibm.ws.management.AdminServiceImpl.invoke(AdminServiceImpl.java:1225)
        at com.ibm.ws.management.PlatformMBeanServer.invoke(PlatformMBeanServer.java:743)
        at org.mule.module.management.agent.Mx4jAgent.start(Mx4jAgent.java:201)

Если посмотреть на вторую (и последнюю) причину трассировки стека, кажется, что существует некоторое замешательство или предположение относительно имени экземпляра сервера JMX. Однако я не могу это контролировать (и не могу понять, почему он работает нормально в Jetty, а не в WAS 7).

Кто-нибудь проходил через это раньше? Я делаю что-то неправильно? Я что-то здесь упускаю?

Большое спасибо за любой ответ!

1 Ответ

1 голос
/ 02 апреля 2012

Для WAS использование JMX не так просто.Осложнения:

  1. Безопасность - по умолчанию невозможно получить доступ к конечной точке JMX без дальнейшей настройки безопасности (выход за рамки этого обсуждения).
  2. Реализация сервера JMX Websphere фактически изменяет домен MBeanимена должны иметь префикс WAS Node и Cell.Существует специальный API-интерфейс WAS, который может помочь вам в этом, но суть в том, что это невозможно сделать без дальнейшего кодирования.

Эндрю

...