Mule MEL从第二个“数据库出站端点”读取数据库结果集

时间:2013-10-28 15:16:07

标签: mule mule-el

我有一个像这样的流程

  1. '数据库入站端点',它会轮询(每5分钟一次)到mySQL数据库服务器并通过select-query获取结果集(自动成为当前有效负载,即#[message.payload])

  2. '对于每个'组件和'Logger'组件,使用表达式#[message.payload]

  3. 现在,flow还有一个'Database-out-bound-endpoint'组件,它执行另一个select-query并获得结果集。

  4. '对于每个'组件,其中包含'Logger'组件,表达式为#[message.payload]

  5. 注意:在记录器中,第一个DB的结果集正在打印。我的意思是第二个记录器也显示第一个查询本身的结果集。因为结果集存储为有效负载

    所以,我的问题是

    1. 在上述场景中读取第二个数据库查询结果集的MEL是什么。

    2. 在流程中是否有另一种阅读结果集的方法

    3. 这是配置XML

      <jdbc-ee:connector name="oracle_database" dataSource-ref="Oracle_Data_Source" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database"/>
          <flow name="testFileSaveFlow3" doc:name="testFileSaveFlow3">
              <poll frequency="1000" doc:name="Poll">
                  <jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="selectTable1" queryTimeout="-1" connector-ref="oracle_database" doc:name="get data from table 1">
                      <jdbc-ee:query key="selectTable1" value="SELECT * FROM TABLE1"/>
                  </jdbc-ee:outbound-endpoint>
              </poll>
              <foreach doc:name="For Each">
                  <logger message="#[message.payload]" level="INFO" doc:name="prints result-set of table1"/>
              </foreach>
              <jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="selectTable2" queryTimeout="-1" connector-ref="oracle_database" doc:name="get data from table 2">
                  <jdbc-ee:query key="selectTable2" value="SELECT * FROM TABLE2"/>
              </jdbc-ee:outbound-endpoint>
              <foreach doc:name="For Each">
                  <logger message="#[message.payload]" level="INFO" doc:name="prints result-set of table2"/>
              </foreach>
          </flow>
      

      提前感谢。

1 个答案:

答案 0 :(得分:1)

这不是MEL的问题。这是您的流逻辑的问题。

消息中没有第二个结果集。

JDBC出站端点是单向的。因此,Mule流不会等待流中间的第二个JDBC(出站)的回复(结果集)。所以第二次也是打印第一个结果集。

类型1:

Try making your JBDC outbound  request-response instead of one-way. 

类型2:

Try Mule Enricher to call the JDBC outbound to call the DB and store the result set into a varaible and try looping the varaible.

希望这有帮助。