静的なサブスクリプションの suppressible 属性を使用する

メッセージ ブローカ チャネルの静的なサブスクリプションは、ビジネス プロセスでサブスクリプションの suppressible 属性を設定することで「抑制可能なもの」として指定できます。suppressible の有効な値は、true および false (デフォルト) です。suppressibletrue に設定すると、動的サブスクリプションが優先され、静的サブスクリプションが使用されないように指定されます。つまり、メッセージ ブローカ チャネルの特定のメッセージによって新しいビジネス プロセスが開始されないようにできます。代わりに、すでに実行されているビジネス プロセスで、動的サブスクリプションによってメッセージが受信されます。

一般的に suppressible 属性は、同じビジネス プロセスに対して同じグループ ID を持つメッセージのルーティングを設計するために使用されます。理想的なシナリオは、JMS イベント ジェネレータによって処理されるメッセージの JMS プロパティをグループ ID として使用することです。

このようなシナリオの設計には、以下の節で説明するように、ビジネス プロセスとイベント ジェネレータの設定が必要になります。

ビジネス プロセスを設定する

この例では、JMS イベント ジェネレータによって処理されるメッセージの JMS プロパティをグループ ID として使用し、同じビジネス プロセスに対して同じグループ ID を持つメッセージのルーティングを設計します。

次のコード例は、JMS イベント ジェネレータのプロパティを示します。

<JmsEventGenerator>
 
	<property>
 
		<Name>GROUPID</Name>
 
		<Value>100</Value>
 
	</property>
 
	... 
</JmsEventGenerator>
 

特定のメッセージ ブローカ チャネルで送信された、同じ GROUPID プロパティを持つすべてのメッセージを受信するビジネス プロセスを作成するには

  1. メッセージが購読されるメッセージ ブローカ チャネルからメッセージを受信すると開始されるように、ビジネス プロセスを設計します。その方法については、[Subscription] による開始 (同期) を参照してください。
  2. 注意 : この例では、/my/orders というチャネルを使用します。

  3. suppressible 属性を true に設定します。手順は次のとおりです。
    1. ビジネス プロセスが WebLogic Workshop のグラフィカル設計環境で開かれた状態で、[ソース ビュー] タブをクリックし、ソース コードに静的サブスクリプション メソッドを配置します。先頭に次の JPD 注釈が付きます。
    2. @jpd:mb-static-subscription
       
    3. 静的サブスクリプション メソッド内の任意の場所をクリックします。プロパティ エディタmb-static-subscription の下に一連の属性 (suppressible を含む) が表示されます。
    4. image

    5. プロパティ エディタで、suppressible 属性に対して true を選択します。ソース コードの JPD 注釈が更新され、suppressible 属性が含まれるようになります。
    6. @jpd:mb-static-subscription suppressible="true"
       
  4. メッセージを受信するようにビジネス プロセスを設計します。
  5. メッセージから変数 (myOrderNumber 変数など) に $metadata/property[name='GROUPID'] を抽出します。
  6. myOrderNumber 変数をフィルタ値として使用して、/my/orders チャネルを (動的に) サブスクライブします。つまり、上記の手順でデータを変数に抽出するのに使用したものと同じ XPath 式を持つフィルタ式を使用します。
  7. $metadata/property[name='GROUPID']
     

    動的サブスクリプションの設計方法については、メッセージ ブローカ サブスクリプション コントロールを参照してください。

  8. サブスクリプション コントロールを使用して、同じ GROUPID を持つメッセージの残りを受信するように、ループを設計します。
  9. ループ ロジックの設計方法については、リスト内の項目を反復処理するを参照してください。

注意 : 競合状態を回避するには、手順 1 〜 5 を同期的なメッセージ ブローカ サブスクリプション内で実行する必要があります。同期サブスクリプションの作成方法については、[Subscription] による開始 (同期) を参照してください。

イベント ジェネレータを設定する

この例での抑制可能パターンが正しく機能するには、所定のグループ ID 用のパブリッシャが 1 つ必要になります。所定のグループ ID 用のパブリッシャを 1 つ用意するということは、新しいサブスクライバが動的なサブスクライブを行っているとき (上記の節ビジネス プロセスを設定するの手順 1 〜 5 を参照) にそのパブリッシャが中断されることを意味します。これにより、サブスクリプションの競合状態が回避されます。JMS イベント ジェネレータを使用している場合、1 つのパブリッシャが所定のグループ ID を確実にパブリッシュする方法は 2 種類あります。

Previous Document