mule的注册表中的对象无法在应用程序启动时强制转换为org.mule.construct.AbstractFlowConstruct

时间:2012-05-14 12:27:58

标签: mule

我正在尝试在流应用程序启动时在mule注册表中存储某个类的实例。下面你可以看到我的java代码和流程片段。我的问题是有时应用程序部署失败并出现以下错误:

Caused by: java.lang.ClassCastException: com.company.test.sorter.model.Config cannot be cast to org.mule.construct.AbstractFlowConstruct
    at org.mule.module.management.mbean.FlowConstructService.postRegister(FlowConstructService.java:139)
    at org.mule.module.management.agent.ClassloaderSwitchingMBeanWrapper.postRegister(ClassloaderSwitchingMBeanWrapper.java:101)

您可以在下面找到整个堆栈跟踪。我必须重申:这个例外有时只是提出,大约每五个部署一次未更改的应用程序。在大多数情况下,应用程序运行完美我搜索了这个例外和类,但我找不到任何解决方案。我正在使用Mule 3.2.1(独立)。这是一个错误还是我做错了什么?

@XmlRootElement(name = "config")
public class Config  {
    private String x2Regex;
    private String x3Regex;
    private String x2QueueName;
    private String x3QueueName;
    // constructors, getters and setters
}
public class Initializer implements
    MuleContextNotificationListener<MuleContextNotification> {
    @Override
    public void onNotification(MuleContextNotification notification) {
        if (notification.getAction() == MuleContextNotification.CONTEXT_STARTED) {
            try {
                notification.getMuleContext().getRegistry().registerObject("config", new Config());
            } catch (RegistrationException e) {
                // cut
            }
        }
    }
}
<notifications>  
    <notification event="CONTEXT"/>  
    <notification-listener ref="Initializer"/> 
</notifications>
<spring:beans>
    <spring:bean id="Initializer" name="Initializer" class="com.company.test.sorter.Initializer" doc:name="Bean"/>
</spring:beans>

下面是mule日志的片段,但有例外:

+ Failed to deploy app 'number-sorter', see below          +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    org.mule.module.launcher.DeploymentException: Failed to deploy application [number-sorter]
    at org.mule.module.launcher.DefaultMuleDeployer.deploy(DefaultMuleDeployer.java:68)
    at org.mule.module.launcher.DeploymentService.start(DeploymentService.java:175)
    at org.mule.module.launcher.MuleContainer.start(MuleContainer.java:157)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.mule.module.reboot.MuleContainerWrapper.start(MuleContainerWrapper.java:56)
    at org.tanukisoftware.wrapper.WrapperManager$12.run(WrapperManager.java:2788)
Caused by: org.mule.api.MuleRuntimeException: MBeans Failed to initialise
    at org.mule.module.management.agent.JmxAgent$MuleContextStartedListener.onNotification(JmxAgent.java:707)
    at org.mule.module.management.agent.JmxAgent$MuleContextStartedListener.onNotification(JmxAgent.java:685)
    at org.mule.context.notification.Sender.dispatch(Sender.java:40)
    at org.mule.context.notification.Policy.dispatch(Policy.java:122)
    at org.mule.context.notification.ServerNotificationManager.notifyListeners(ServerNotificationManager.java:244)
    at org.mule.context.notification.ServerNotificationManager.fireNotification(ServerNotificationManager.java:197)
    at org.mule.DefaultMuleContext.fireNotification(DefaultMuleContext.java:404)
    at org.mule.DefaultMuleContext.start(DefaultMuleContext.java:226)
    at org.mule.module.launcher.application.DefaultMuleApplication.start(DefaultMuleApplication.java:146)
    at org.mule.module.launcher.application.ApplicationWrapper.start(ApplicationWrapper.java:107)
    at org.mule.module.launcher.DefaultMuleDeployer.deploy(DefaultMuleDeployer.java:52)
    ... 8 more
Caused by: javax.management.RuntimeMBeanException: RuntimeException thrown in postRegister method
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.postRegisterInvoke(Unknown Source)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(Unknown Source)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(Unknown Source)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(Unknown Source)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(Unknown Source)
    at org.mule.module.management.agent.JmxAgent.registerFlowConstructServices(JmxAgent.java:428)
    at org.mule.module.management.agent.JmxAgent$MuleContextStartedListener.onNotification(JmxAgent.java:700)
    ... 18 more
Caused by: java.lang.ClassCastException: com.company.test.sorter.model.Config cannot be cast to org.mule.construct.AbstractFlowConstruct
    at org.mule.module.management.mbean.FlowConstructService.postRegister(FlowConstructService.java:139)
    at org.mule.module.management.agent.ClassloaderSwitchingMBeanWrapper.postRegister(ClassloaderSwitchingMBeanWrapper.java:101)
    ... 25 more

1 个答案:

答案 0 :(得分:1)

感觉就像一个bug:在阅读完源代码之后,我找不到合理的解释为什么Mule会尝试在JMX中注册你的自定义对象,同时将它误认为是一个Flow!

作为旁注,为什么在使用Spring构建对象时使用通知侦听器和Mule注册表?