メッセージ ブローカ チャネルの静的なサブスクリプションは、ビジネス プロセスでサブスクリプションの suppressible 属性を設定することで「抑制可能なもの」として指定できます。suppressible の有効な値は、true および false (デフォルト) です。suppressible を true に設定すると、動的サブスクリプションが優先され、静的サブスクリプションが使用されないように指定されます。つまり、メッセージ ブローカ チャネルの特定のメッセージによって新しいビジネス プロセスが開始されないようにできます。代わりに、すでに実行されているビジネス プロセスで、動的サブスクリプションによってメッセージが受信されます。
一般的に suppressible 属性は、同じビジネス プロセスに対して同じグループ ID を持つメッセージのルーティングを設計するために使用されます。理想的なシナリオは、JMS イベント ジェネレータによって処理されるメッセージの JMS プロパティをグループ ID として使用することです。
このようなシナリオの設計には、以下の節で説明するように、ビジネス プロセスとイベント ジェネレータの設定が必要になります。
この例では、JMS イベント ジェネレータによって処理されるメッセージの JMS プロパティをグループ ID として使用し、同じビジネス プロセスに対して同じグループ ID を持つメッセージのルーティングを設計します。
次のコード例は、JMS イベント ジェネレータのプロパティを示します。
<JmsEventGenerator>
<property>
<Name>GROUPID</Name>
<Value>100</Value>
</property>
...
</JmsEventGenerator>
特定のメッセージ ブローカ チャネルで送信された、同じ GROUPID プロパティを持つすべてのメッセージを受信するビジネス プロセスを作成するには
注意 : この例では、/my/orders というチャネルを使用します。
@jpd:mb-static-subscription
@jpd:mb-static-subscription suppressible="true"
$metadata/property[name='GROUPID']
動的サブスクリプションの設計方法については、メッセージ ブローカ サブスクリプション コントロールを参照してください。
ループ ロジックの設計方法については、リスト内の項目を反復処理するを参照してください。
注意 : 競合状態を回避するには、手順 1 〜 5 を同期的なメッセージ ブローカ サブスクリプション内で実行する必要があります。同期サブスクリプションの作成方法については、[Subscription] による開始 (同期) を参照してください。
この例での抑制可能パターンが正しく機能するには、所定のグループ ID 用のパブリッシャが 1 つ必要になります。所定のグループ ID 用のパブリッシャを 1 つ用意するということは、新しいサブスクライバが動的なサブスクライブを行っているとき (上記の節ビジネス プロセスを設定するの手順 1 〜 5 を参照) にそのパブリッシャが中断されることを意味します。これにより、サブスクリプションの競合状態が回避されます。JMS イベント ジェネレータを使用している場合、1 つのパブリッシャが所定のグループ ID を確実にパブリッシュする方法は 2 種類あります。
JMS イベント ジェネレータのプール サイズを設定するには、デプロイメント記述子を手動で編集する必要があります。そのためには、WebLogic Workshop 設計コンソールのメニュー バーから使用できる WebLogic Builder ツールを使用します。
[ツール|WebLogic Server|WebLogic Builder]
注意 : サブスクライバのプール サイズを制限する必要はありません。
下の図で示されたシナリオでは、100 〜 299 の範囲の GROUPID を持つキューが定義されています。一方は 100 〜 199 の範囲の GROUPID を処理し、もう一方は 200 〜 299 の範囲の GROUPID を処理する、2 つの JMS イベント ジェネレータが定義されています。
上記の節 (ビジネス プロセスを設定する) で説明した静的サブスクリプションおよび動的サブスクリプションは、同期的なサブスクリプションによる開始ブロック内にあるので、GROUPID=101 のメッセージをパブリッシュする JMS イベント ジェネレータは、最初のメッセージの配信後、動的サブスクリプションなどのロジックが同期的なサブスクリプションのブロック内で実行されるまでブロックされます。その後、次の GROUPID=101 のメッセージがパブリッシュされます。ビジネス プロセスの静的サブスクリプションに対して suppressible が true に設定されていると、2 番目のメッセージによって新しいビジネス プロセスは開始されません。代わりに、2 番目のメッセージは、最初の GROUPID=101 のメッセージを受信することで開始されたビジネス プロセスで動的サブスクリプションによって受信されます。
![]() |
|