2017-06-28 6 views
0

ラップ時にMuleエンリッチャによって返されるデータ型は、非常に奇妙な動作を表示します。いくつかの状況ではResultSetIteratorを返し、それ以外のときにはListを返します。私は、唯一の違い、つまりここではサブフローであるフローで全く同じ構成を持っています。エンリッチャ内のデータベースコンポーネントがフロー内にある場合よりもサブフロー内にある場合、戻り値の型が異なる動作をしますか?ResultsetIteratorまたはList <Map <String、Object>を返すMule DBコンポーネント

<sub-flow name="process.customer"> 
    <enricher target="#[variable:customers]" 
     doc:name="Customer Enrichment"> 
     <db:select config-ref="MySQLConfig" 
       doc:name="Customer Query" 
       fetchSize="3000" streaming="true"> 
       <db:parameterized-query><![CDATA[ 
       SELECT * FROM CUSTOMER WHERE STATUS='ACTIVE' 
       ]]></db:parameterized-query> 
      </db:select> 
    </enricher> 
    <custom-transformer class="com.gdc.transformer.CustomerTransformer" /> 
    <vm:outbound-endpoint exchange-pattern="one-way" 

    public class CustomerTransformer extends AabstractMessageTransformer{ 

     @Override 
     public Object transformMessage(MuleMessage message, String 
     outputEncoding) throws TransformerException { 
      //Throws ClassCastException i.e. cannot cast ResultSetIterator to 
      // LinkedList  
      List<Map<String,Object>> r=  
       message.getInvocationProperty("customers")); 
     .... 

     } 
    } 

答えて

0

db:selectコンポーネントでstreaming = "true"を使用すると、ResultSetIteratorが取得されます。この場合、fetchSize = "3000"となり、一度に3000レコードを選択しようとします。 streaming = "false"の場合、該当するすべてのレコードが一度にロードされたリストが取得されます。

+0

ありがとう、本当にありがとう! – BreenDeen

0

ブリーン、

マップはその後、その後、属性が真作るあなたが反復可能オブジェクトとしてあなたの出力を必要とする他のStreaming=falseを無効にする場合は、リストとしてあなたの出力をしたい場合。

関連する問題