Mule esb无法反序列化消息

Mule esb无法反序列化消息,mule,Mule,我们有一个Mule项目,其工作原理如下: 我们从数据库中读取一个Id值,我们使用它从数据库中读取多条记录,使用“foreach”逐个处理 一切正常,但有一些记录在到达新流时给出以下错误 INFO 2014-07-11 10:00:45584[[tcol\U act\U es\U insert].adapter\U act\U es\U insert.stage1.45]org.mule.api.processor.LoggerMessageProcessor:--跟踪Id Lote en pro

我们有一个Mule项目,其工作原理如下:

我们从数据库中读取一个Id值,我们使用它从数据库中读取多条记录,使用“foreach”逐个处理

一切正常,但有一些记录在到达新流时给出以下错误

INFO 2014-07-11 10:00:45584[[tcol\U act\U es\U insert].adapter\U act\U es\U insert.stage1.45]org.mule.api.processor.LoggerMessageProcessor:--跟踪Id Lote en proceso:44197277 INFO 2014-07-11 10:00:45584[[tcol\U act\U es\U insert].适配器\U act\U es\U insert.stage1.48]org.mule.api.processor.LoggerMessageProcessor:--跟踪Id Lote en proceso:44197278 INFO 2014-07-11 10:00:45584[[tcol\U act\U es\U insert].适配器\U act\U es\U insert.stage1.47]org.mule.api.processor.LoggerMessageProcessor:--跟踪Id Lote en proceso:44197279 WARN 2014-07-11 10:00:45585[[tcol\u act\u es\u insert].adapter\u act\u es\u insert.stage1.01]org.mule.util.queue.TransactionalQueueSession:无法反序列化消息 java.lang.reflect.InvocationTargetException 位于sun.reflect.GeneratedMethodAccessor18.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:616) 位于org.mule.util.store.DeserializationPostInitializable$Implementation$1.run(DeserializationPostInitializable.java:48) 位于java.security.AccessController.doPrivileged(本机方法) 位于org.mule.util.store.DeserializationPostInitializable$Implementation.init(DeserializationPostInitializable.java:40) 位于org.mule.util.queue.TransactionalQueueSession$QueueImpl.PostProcessIfRequired(TransactionalQueueSession.java:242) 位于org.mule.util.queue.TransactionalQueueSession$QueueImpl.poll(TransactionalQueueSession.java:161) 位于org.mule.processor.SedaStageInterceptingMessageProcessor.dequeue(SedaStageInterceptingMessageProcessor.java:130) 位于org.mule.processor.SedaStageInterceptingMessageProcessor.run(SedaStageInterceptingMessageProcessor.java:205) 位于org.mule.work.WorkerContext.run(WorkerContext.java:286) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 运行(Thread.java:679) 原因:java.util.ConcurrentModificationException 位于org.apache.commons.collections.map.AbstractHashedMap$HashIterator.nextry(AbstractHashedMap.java:1113) 位于org.apache.commons.collections.map.AbstractHashedMap$KeySetIterator.next(AbstractHashedMap.java:938) 在org.mule.DefaultMuleEvent.setMessage(DefaultMuleEvent.java:968)上 在org.mule.DefaultMuleEvent.initAfterDeserialization(DefaultMuleEvent.java:732)上 ... 14多

然后我获取导致错误的记录,如果再次处理该记录,将正确处理。

这是我的密码骡

   <flow name="tcol_act_es_insert" doc:name="tcol_act_es_insert" initialState="started"> 
    <jdbc-ee:inbound-endpoint queryKey="select_counter_id" queryTimeout="10" pollingFrequency="30000" connector-ref="Dabase_otros_dev_insert" doc:name="InputDatabase_Counter"> 
        <jdbc-ee:query key="select_counter_id" value="select * from todocoleccion.dbo.config where field='act_es_last_id'"></jdbc-ee:query>  
    </jdbc-ee:inbound-endpoint>  
    <set-variable variableName="InputRowsetCounter" value="#[payload]" doc:name="InputRowsetCounter"></set-variable>

    <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="ReloadLotes" queryTimeout="-1" connector-ref="Database_dev_insert" doc:name="ReloadLotes"> 
        <jdbc-ee:query key="ReloadLotes" value="select TOP 50 CONVERT(varchar(50), l.Ultima_Modificacion, 127)+'Z' as ultima_modificacion, l.Id_Lote as id_lote, 
...
       where Id_Lote&gt;#[InputRowsetCounter.value] and l.Id_Seccion=s.Id_Seccion order by id_lote;"></jdbc-ee:query>  
    </jdbc-ee:outbound-endpoint>  
    <set-variable variableName="InputRowsetLotes" value="#[payload]" doc:name="InputRowsetLotes"></set-variable>
    <expression-filter expression="#[!payload.isEmpty()]" doc:name="sinLotes"></expression-filter>
    <logger level="INFO" doc:name="Logger"></logger>  
    <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="update_counter_config" queryTimeout="-1" connector-ref="Database_todocoleccion_dev_insert" doc:name="Update_Counter"> 
        <jdbc-ee:query key="update_counter_config" value="update todocoleccion.dbo.config set value=#[InputRowsetLotes[InputRowsetLotes.size()-1].id_lote] where field='act_es_last_id'"></jdbc-ee:query>  
    </jdbc-ee:outbound-endpoint>  
    <foreach collection="InputRowsetLotes" counterVariableName="counterLotes" rootMessageVariableName="rootMessageLotes" doc:name="For Each Lote"> 
        <flow-ref name="adapter_act_es_insert" doc:name="Flow Reference Dispatcher"></flow-ref>  
    </foreach>  
    <catch-exception-strategy doc:name="Catch Exception Strategy"> 
        <flow-ref name="error_handler_act_es_insert" doc:name="Ref Error Handler"></flow-ref>  
    </catch-exception-strategy>  
</flow>
<flow name="adapter_act_es_insert" doc:name="adapter_act_es_insert"> 
    <choice doc:name="Choice"> 
        <when expression="!payload.isEmpty()"> 
            <logger message="--TRACE Id Lote en proceso: #[payload.id_lote]" level="INFO" doc:name="Logger"></logger>  

我们在Ubuntu服务器64位上使用mule-standalone-3.5.0-M4.tar.gz


提前感谢您。

尝试使用3.5.0,M4是一个早期的access版本,不适用于生产部署。完美,Ale!你说得对。我们改为3.5.0,没有错误。谢谢你。