0

フローアプリケーションの起動時に、あるクラスのインスタンスをラバレジストリに保存しようとしています。以下に私の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)

スタックトレース全体を以下に示します。繰り返す必要があります。この例外は、変更されていないアプリケーションの約5回のデプロイメントごとに発生することがあります。ほとんどの場合、アプリケーションは完全に正常に実行されます。この例外とクラスをグーグルで検索しましたが、解決策が見つかりませんでした。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>

以下は、例外を除いてラバのログの断片です。

+ 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
4

1 に答える 1

1

バグのように感じます。ソースコードを読んだ後、Muleがカスタムオブジェクトをフローと間違えてJMXに登録しようとする理由について、合理的な説明が見つかりません。

ちなみに、Springでオブジェクトをビルドできるのに、なぜ通知リスナーとMuleレジストリを使用するのでしょうか。

于 2012-05-14T16:33:02.260 に答える