イベント順序付けの仕組みを理解するために、ソース・アプリケーション (コンポーネント A) が ターゲット・アプリケーション (コンポーネント B) を非同期的に呼び出して 新規オーダーを作成した後、変更後のデータでそれらのオーダーを 更新する場合について考えます。
属性 | タイプ |
---|---|
ID | string |
customer | string |
productName | string |
quantity | integer |
イベントごとに、メッセージは、呼び出しと同じ順序で サービス統合バス宛先に格納されます。メッセージ駆動型 Bean (MDB) がメッセージを読み取り、ターゲット・コンポーネント (この場合はコンポーネント B) に 送信して処理させます。モジュールごとの MDB の数は 1 個だけですが、 その MDB の複数のインスタンスが存在し、これら 5 つのメッセージは 並列に処理されます。Update2 に対するメッセージを 処理している MDB スレッドが、Create1 イベントに対するメッセージを処理している スレッドより先に完了する可能性があります。その場合にはオーダーが まだ作成されていないため、Update2 イベントは失敗します。
このようなエラーを防ぐために、この例ではイベント順序付けを 実装しています。下記のコンポーネント定義の例では、create メソッドと update メソッドの両方に イベント順序付け修飾子を指定しています。 これらのメソッドはいずれも同じイベント順序付けキー (Order ビジネス・オブジェクトの ID 属性に 設定されます) を使用し、同じイベント順序付けグループに 置かれます。3 番目のメソッド (retrieve) は順序付けしていません。
<interfaces> <interface xsi:type="wsdl:WSDLPortType" portType="ns1:ProcessOrder"> <method name="create"> <scdl:interfaceQualifier xsi:type="es.EventSequencingQualifier"> <es:eventSequencing sequencingGroup="default" conintueOnError="true"> <keySpecification> <parameter name="Order"> <xpath>ID</xpath> </parameter> </keySpecification> </es:eventSequencing> </scdl:interfaceQualifier> </method> <method name="update"/> <scdl:interfaceQualifier xsi:type="es:EventSequencingQualifier"> <es.eventSequencing sequencingGroup="default' continueOnError="true"> <keySpecification> <parameter name="Order"> <xpath>ID</xpath> </parameter> </keySpecification> </es:eventSequencing> </scdl:interfaceQualifier> <method name="retrieve/"> </interface> </interfaces>
(c) Copyright IBM Corporation 2005, 2006. All rights reserved.
(c) Copyright IBM Japan 2006
このインフォメーション・センターでは、Eclipse テクノロジー (http://www.eclipse.org) が採用されています。