カスタム・インスタンス・ルーティング・ロジックの使用

メッセージが非ブロードキャスト・モードでインスタンスが複数あるシステムに送信される場合、メッセージを受信するインスタンスを決定するためのカスタム・インスタンス・ルーティング・ロジックを用意する必要があります。次の要件を満たすコードを作成します。

複数インスタンス・システムのアクティビティへの遷移に属す「遷移」プロパティ・ダイアログで、カスタム・インスタンス・ルーティング・ロジックをJavaコードのブロックとして入力します。コードを入力するには、次のいずれかを行います。

アクティビティ図から生成すると、RoutingLogicdiagram_name.javaという名前のルーティング・コードのクラス・ファイルが作成されます。ジェネレータは、各アクティビティ図に対してルーティング・ファイルを1つ作成します。このファイルには、複数インスタンス・システムに存在する統合点の各ターゲットに対するルーティング・コードが含まれます。デフォルトでは、クラスは生成元のアクティビティ図と同じパッケージに配置されます。

入力したコードは、最初にE-Business統合コード・ジェネレータを実行する際にJavaファイルに生成されます。再びジェネレータを実行しても、最初に生成されたメソッドは変更されません。これは、生成後にメソッドに対して変更を行った場合に備えた処置です。

注意: RoutingLogicdiagram_name.javaファイルには、内容ベースのルーティングを必要とするダイアグラムの各判断に対するカスタム内容ルーティング・ロジックも含まれます。

特定のインスタンスへのルーティングが必要な各判断では、1つ以上のinstanceSelectorActivity_name(Document[] messages、String agentName、String agentInstance)メソッドがファイルに含まれます。各判断のメソッド数は、ターゲット・システムにある複数インスタンスの数で決まります。

判断に使用できるメッセージすべての内容(通常は1つのメッセージのみですが、結合された判断および同期点では複数になる場合があります)は、タイプorg.w3c.dom.Documentのオブジェクトを含む配列messagesを介してアクセスできます。BESエージェントの名前であるagentName、およびエージェントがサービスする個々のインスタンスの名前であるagentSystemも渡されます。

例として、メッセージを複数インスタンス・システムにルーティングする判断を図1に示します。Order[received]メッセージは、Overseas ShippingシステムのClear for Exportアクティビティか、複数インスタンスのDomestic ShippingシステムのいずれかのインスタンスにあるShip Orderアクティビティに送信できます。

Domestic Shippingシステムには、Eastern Shipping CenterおよびWestern Shipping Centerという2つのインスタンスがあります。この例では、メッセージの送信先のShipping Center名をリスト表示する「destination」フィールドがメッセージに含まれていると想定します。インスタンス・セレクタのコードでは、このフィールドの値を使用してメッセージの宛先を判断します。

図1: インスタンス・セレクタのコードが必要な判断

This illustration is described in the text.

プロパティ・ダイアログの「インスタンス・セレクタのコード」プロパティに、OR擬似状態からShip Orderアクティビティへの遷移に対するコードを入力します。メッセージを受信するインスタンスを判断するために入力するコードは、次のようになります。

for (int i=0; i<messages.length; i++)
{
  Document msg=messages[i];
  Element docEl=msg.getDocumentElement();
  NodeList nodes=docEl.getElementsByTagName("destination");
  Node node=nodes.item(0);
  Text orderCode=(Text) node.getFirstChild();
  if (orderCode.getData().equals(agentInstance))
  {
    return true;
  }
}
return false;    

関連項目

遷移について

遷移の作成

 

 

Copyright © 1997, 2004, Oracle. All rights reserved.