2016-06-18 4 views
0

私は以下のようなデータベーステーブルからいくつかのレコードを選択するミュールフローを持っています。ESBのミュールを使用してデータベースレコードをグループ化します

StudentID Subject  Mark 
1   Maths  98 
2   Literature 62 
1   Science  56 
1   Anatomy  63 
3   Zoology  38 
2   Algebra  63 

ここで私はstudentIDに基づいてレコードをグループ化する必要があり、それ以降の処理のために送信する必要があります。したがって、データベースノードの直後にスプリッタコンポーネントを配置しました。しかし、MELの表現ではどのようにレコードをグループ化できますか?

このESBミュールを行うには他の方法がありますか?

更新 - 私はStudentID(group by)に基づいてメッセージを分割する必要があります。私はgroovy can do groupingを見つけました。しかし、groovyを使ってメッセージを分割できるかどうか。

+0

あなたはこの例では、グループ分けに基づいてメッセージを分割しません。ご希望の出力 –

答えて

0

私はJavaオブジェクトを作成し、呼び出し可能に実装します。このメソッドを使用してペイロードを変更します。次に、2番目のデータベースコンポーネントを使用し、2番目のクエリでペイロードオブジェクト(MEL)を使用します。

このオブジェクトは、データをデータベースコンポーネントの出力フローから、子データの埋め込み配列でJSONを表示するために使用されるハイブリッドオブジェクトに変換します。

https://github.com/dlwhitehurst/modusbox-orders/blob/master/src/main/java/org/dlw/transport/OrdersTransformSingleton.java

呼び出し可能なメソッドの戻り値をチェックし、あなた自身のデータを「変換」する方法を参照してください。

ここには、必要なJavaコンポーネントをインスタンス化するミュール設定のスニペットがあります。

<spring:beans> 
    <spring:bean id="ordersTransform" name="OrdersTransformSingleton" 
    class="org.dlw.transport.OrdersTransformSingleton" scope="singleton"> 
    </spring:bean> 
    <spring:bean id="jdbcDataSource" class="org.enhydra.jdbc.standard.StandardDataSource" destroy-method="shutdown"> 
    <spring:property name="driverName" value="com.mysql.jdbc.Driver"/> 
    <spring:property name="url" value="${database.url}"/> 
    </spring:bean>  
</spring:beans> 

オブジェクトは、このような流れの中で使用されている...

<flow name="get:/orders:api-config"> 
    <set-payload value="[&#xD;&#xA; {&#xD;&#xA; &quot;orderId&quot;: 1233,&#xD;&#xA; &quot;placementDate&quot;: &quot;2016-06-02&quot;,&#xD;&#xA; &quot;customerName&quot;: &quot;Sally Hansen&quot;,&#xD;&#xA;  &quot;orderItems&quot;:[&#xD;&#xA;  {&#xD;&#xA;   &quot;orderItemId&quot;: 1323,&#xD;&#xA;   &quot;orderId&quot;: 438577,&#xD;&#xA;   &quot;itemId&quot;: 23058,&#xD;&#xA;   &quot;itemName&quot;: &quot;Salt&quot;,&#xD;&#xA;   &quot;itemCount&quot;: 3,&#xD;&#xA;   &quot;qtyItemCost&quot;: &quot;$2.76&quot;&#xD;&#xA;  },&#xD;&#xA;  {&#xD;&#xA;   &quot;orderItemId&quot;: 1323,&#xD;&#xA;   &quot;orderId&quot;: 438577,&#xD;&#xA;   &quot;itemId&quot;: 23058,&#xD;&#xA;   &quot;itemName&quot;: &quot;Pepper&quot;,&#xD;&#xA;   &quot;itemCount&quot;: 3,&#xD;&#xA;   &quot;qtyItemCost&quot;: &quot;$8.79&quot;&#xD;&#xA;  }&#xD;&#xA;  ] &#xD;&#xA; },&#xD;&#xA; {&#xD;&#xA; &quot;orderId&quot;: 1233,&#xD;&#xA; &quot;placementDate&quot;: &quot;2016-06-02&quot;,&#xD;&#xA; &quot;customerName&quot;: &quot;Billy Wilson&quot;,&#xD;&#xA;  &quot;orderItems&quot;:[&#xD;&#xA;  {&#xD;&#xA;   &quot;orderItemId&quot;: 1323,&#xD;&#xA;   &quot;orderId&quot;: 438577,&#xD;&#xA;   &quot;itemId&quot;: 23058,&#xD;&#xA;   &quot;itemName&quot;: &quot;Wheat Flour&quot;,&#xD;&#xA;   &quot;itemCount&quot;: 3,&#xD;&#xA;   &quot;qtyItemCost&quot;: &quot;$10.12&quot;&#xD;&#xA;  },&#xD;&#xA;  {&#xD;&#xA;   &quot;orderItemId&quot;: 1323,&#xD;&#xA;   &quot;orderId&quot;: 438577,&#xD;&#xA;   &quot;itemId&quot;: 23058,&#xD;&#xA;   &quot;itemName&quot;: &quot;Tomato Paste&quot;,&#xD;&#xA;   &quot;itemCount&quot;: 3,&#xD;&#xA;   &quot;qtyItemCost&quot;: &quot;$9.21&quot;&#xD;&#xA;  }&#xD;&#xA;  ] &#xD;&#xA; }&#xD;&#xA;]" doc:name="Set Payload"/> 
    <db:select config-ref="MySQL_Configuration" doc:name="Database"> 
     <db:parameterized-query><![CDATA[SELECT a.orderId, a.customerName, a.placementDate, b.orderItemId, b.itemId, c.itemName, b.itemCount, c.itemCost FROM modusbox.orders a, modusbox.orderitems b, modusbox.items c WHERE a.orderId = b.orderId AND b.itemId = c.itemId]]></db:parameterized-query> 
    </db:select> 
    <component doc:name="Java"> 
     <spring-object bean="OrdersTransformSingleton" /> 
    </component> 
    <json:object-to-json-transformer doc:name="Object to JSON"/> 
    <logger level="INFO" doc:name="Logger"/> 
</flow> 
0

ベタープレイスのdataweaveコンポーネントと 'GROUPBY' ロジックを使用しています。

https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-reference-documentation#group-by

+0

を投稿してくださいすることができます。 studentIDに基づいてメッセージを分割する必要があります。私の質問がより説明的ではない場合私はお詫び申し上げます。メッセージを分割するデータベースノードの直ぐ後ろにどんなグルーヴなコンポーネントもありますか? http://stackoverflow.com/questions/25870210/using-groupby-in-groovy – Simbu

関連する問題