如何在Mule 3.5批处理中使用存储过程



我使用的是Mule 3.5 Anypoint连接器,并且已经从一个选择查询转移到批处理作用域组件中的一个存储过程。由于这个变化,mule不喜欢存储过程返回的对象类型。

这是我得到的错误:

ERROR 2014-06-26 15:15:00,426 [pool-15-thread-1] org.mule.exception.DefaultMessagingExceptionStrategy: 
********************************************************************************
Message               : Object "java.util.HashMap" not of correct type. It must be of type "{interface java.lang.Iterable,interface java.util.Iterator,interface org.mule.routing.MessageSequence,interface java.util.Collection}" (java.lang.IllegalArgumentException)
Code                  : MULE_ERROR--2
--------------------------------------------------------------------------------

数据库连接器使用存储过程返回的对象类型如下:

java.util.HashMap
对于Select语句(这是有效的),类型如下:
org.mule.util.CaseInsensitiveHashMap

就像上面的select语句一样,这是可以工作的。

关于系统的一些额外信息:

  • SQL Server 2008 R2
  • 数据库连接器与存储过程工作正常,但当它到达过程记录部分时出现错误

    <batch:job name="ons-esb-mainBatch1">
    <batch:threading-profile poolExhaustedAction="WAIT"/>
    <batch:input>
        <poll doc:name="Poll">
            <fixed-frequency-scheduler frequency="15" timeUnit="SECONDS"/>
            <db:stored-procedure config-ref="Generic_Database_Configuration" doc:name="Database">
                <db:parameterized-query><![CDATA[{ CALL otis.GetEntityQueueByTime() }]]></db:parameterized-query>
            </db:stored-procedure>
        </poll>
        <logger level="INFO" doc:name="Logger"/>
    </batch:input>
    <batch:process-records>
        <batch:step name="Batch_Step">
            <choice doc:name="Choice">
                <!-- Choice Selector Logic -- Taken Out to Save Space --!>
            </choice>
        </batch:step>
    </batch:process-records>
    <batch:on-complete>
        <logger message="EntityQueues Completed Queueing into ActiveMQ" level="INFO" doc:name="Logger"/>
    </batch:on-complete>
    

总结

我想找到一种方法,让对象通过批处理过程将工作作为一个选择语句将被处理。

java.util.HashMap是不可迭代的。尝试用entrySet():

替换消息有效负载

<batch:input> <poll doc:name="Poll"> <fixed-frequency-scheduler frequency="15" timeUnit="SECONDS"/> <db:stored-procedure config-ref="Generic_Database_Configuration" doc:name="Database"> <db:parameterized-query><![CDATA[{ CALL otis.GetEntityQueueByTime() }]]></db:parameterized-query> </db:stored-procedure> </poll> <set-payload value="#[message.payload.entrySet()]" /> <logger level="INFO" doc:name="Logger"/> </batch:input>

最新更新