WrapperFoundation コラボレーション・テンプレートは、Business Integration Express 標準を順守するユーザー定義のラッパー・コラボレーションの開発を容易にするツールです。
ラッパー・コラボレーションとは、別のコラボレーションのビジネス・オブジェクトの検査または同期を処理するコラボレーションです。呼び出し側コラボレーションは、自身のトリガー・ビジネス・オブジェクトで参照されるトップレベルのビジネス・オブジェクトをラッパー・コラボレーションに送信します。
例えば、SalesOrderProcessing コラボレーションは汎用 Order ビジネス・オブジェクトを同期します。汎用 Order には、注文を行う顧客を表す汎用 Customer ビジネス・オブジェクトへの参照が含まれます。また、汎用 Order には汎用 OrderLineItem ビジネス・オブジェクトの配列も含まれます。各 OrderLineItem は汎用 Item ビジネス・オブジェクトを参照し、注文された品目を表します。
このような状況でコラボレーション・ロジックをモジュール化するため、Business Integration Express では、汎用 Order とそれが参照する汎用ビジネス・オブジェクトを処理するための別々のコラボレーション・テンプレートが用意されています。例えば、Business Integration Express には、Customer および Item ビジネス・オブジェクトを参照する Order ビジネス・オブジェクトを処理するために、以下のテンプレートが用意されています。
ビジネス・オブジェクトの処理をそれぞれ異なる特定のコラボレーションに分けると、各コラボレーション・テンプレートの再利用が増えるだけでなく、2 つのコラボレーションが同じデータを同時に変更しないようにします。詳細については、並行処理の問題点を参照してください。
すべての同期における整合性を維持し、コラボレーションを使用するため、WebSphere Business Integration Express では、CollaborationFoundation テンプレートからこれらのコラボレーション用のテンプレートが作成されます。すべてのラッパー・コラボレーションで整合性を維持するため、すべてのラッパー・コラボレーション・テンプレートは WrapperFoundation テンプレートから作成されます。WrapperFoundation を使用すると、ユーザー固有のラッパー・コラボレーションを作成できます。
WrapperFoundation テンプレートから生成されたラッパー・コラボレーション・オブジェクトは、自身のトリガー・ビジネス・オブジェクトが宛先アプリケーションに存在するか検証したり、同期を容易にすることができます。このセクションの内容は次のとおりです。
ラッパー・コラボレーションがその参照値と Exists 動詞を持つトリガー・ビジネス・オブジェクトを受け取ると、宛先アプリケーションでトリガー・ビジネス・オブジェクトを検索してそれが存在するか検証します。ラッパー・コラボレーションは、この検証に Retrieve 動詞を使用します。
検証が成功した場合、ラッパー・コラボレーションは呼び出し側コラボレーションに成功状況を戻します。
検証が失敗した場合、ラッパー・コラボレーションの振る舞いは CONTINUE_WITH_WARNING 構成プロパティーの設定によって異なります。
検証プロセスの詳細および図は、ご使用のラッパー・コラボレーション用のユーザーズ・ガイドを参照してください。
ラッパー・コラボレーションがその参照値と Sync 動詞を持つトリガー・ビジネス・オブジェクトを受け取ると、ビジネス・オブジェクトの同期を容易にします。このためには、ラッパー・コラボレーションはソース・アプリケーションからすべての値を検索し、完全な値と Create 動詞を持つビジネス・オブジェクトを適切な同期コラボレーションに送信します。
同期コラボレーションが宛先アプリケーションでのビジネス・オブジェクトの作成に成功した場合、ラッパー・コラボレーションは呼び出し側コラボレーションに成功状況を戻します。
同期コラボレーションが宛先アプリケーションでのビジネス・オブジェクトの作成に失敗した場合、ラッパー・コラボレーションの振る舞いは CONTINUE_WITH_WARNING 構成プロパティーの設定によって異なります。
呼び出し先同期コラボレーションが既存オブジェクトの作成を試行してラッパー・コラボレーションに失敗状況を戻すことのないように、同期コラボレーションを以下のように設定してください。
同期プロセスの詳細および図は、ご使用のラッパー・コラボレーション・テンプレート用のユーザーズ・ガイドを参照してください。
WrapperFoundation テンプレートを使用する場合、以下の操作を実行します。
図 13 に、WrapperFoundation のポートを示します。図に続く表には、各ポートの詳細を示します。
図 13. WrapperFoundation コラボレーションのポート
表 15 に、WrapperFoundation テンプレートの DestinationAppRetrieve ポートの機能をリストします。
表 15. WrapperFoundation DestinationAppRetrieve ポートのポート機能
ポート機能 | 値 |
---|---|
ビジネス・オブジェクト | ラッパー・コラボレーションの名前の由来となるビジネス・オブジェクト。例えば、CustomerWrapper は参照値を持つ Customer ビジネス・オブジェクトを送信します。このビジネス・オブジェクトのデフォルトは Controller です。 |
使用する動詞 | Retrieve |
目的 | 宛先アプリケーションからビジネス・オブジェクトを検索します。 |
バインド先 | 宛先アプリケーションのコネクター |
表 16 は、WrapperFoundation テンプレートの From ポートの機能をリストしています。
表 16. WrapperFoundation From ポートのポート機能
ポート機能 | 値 |
---|---|
ビジネス・オブジェクト | ラッパー・コラボレーションの名前の由来となるビジネス・オブジェクト。例えば、CustomerWrapper は Customer ビジネス・オブジェクトによって起動されます。デフォルト値は Controller です。 |
使用する動詞 | Sync、Exists |
目的 | 呼び出し側コラボレーションからトリガー・ビジネス・オブジェクトを受け取ります。 |
バインド先 | 呼び出し側コラボレーションの ToBusObjWrapper ポート |
表 17 に、WrapperFoundation テンプレートの SourceApp ポートの機能をリストします。
表 17. WrapperFoundation SourceApp ポートのポート機能
ポート機能 | 値 |
---|---|
ビジネス・オブジェクト | ラッパー・コラボレーションの名前の由来となるビジネス・オブジェクト。例えば、CustomerWrapper はソース・アプリケーションから Customer ビジネス・オブジェクトを検索します。このビジネス・オブジェクトのデフォルトは Controller です。 |
使用する動詞 | Retrieve |
目的 | ソース・アプリケーションからトリガー・ビジネス・オブジェクトを検索します。 |
バインド先 | ソース・アプリケーションのコネクター |
表 18 に、WrapperFoundation テンプレートの To ポートの機能をリストします。
表 18. WrapperFoundation To ポートのポート機能
ポート機能 | 値 |
---|---|
ビジネス・オブジェクト | ラッパー・コラボレーションの名前の由来となるビジネス・オブジェクト。例えば、CustomerWrapper は参照値を持つ Customer ビジネス・オブジェクトを送信します。このビジネス・オブジェクトのデフォルトは Controller です。 |
使用する動詞 | Create |
目的 | コラボレーションの外部にビジネス・オブジェクトを送信します。通常は、完全な値を持つビジネス・オブジェクトを関連する同期コラボレーションに送信するために使用します。 |
バインド先 | そのビジネス・オブジェクトを同期するかサブスクライブしているコラボレーションの From ポート |
CustomerPartnerWrapper および ItemWrapper は、WrapperFoundation から作成され、特定の要件に合うように変更された、WebSphere Business Integration Express コラボレーションの例です。このセクションでは、WrapperFoundation テンプレートを変更する例としてこれらの変更について説明します。
異なるアプリケーションは明らかに異なる方法で CustomerPartner データを使用するので、CustomerPartnerWrapper はビジネス・オブジェクトのキーを固有の方法で処理します。一部のアプリケーションでは、CustomerPartner に関連する Customer オブジェクトとその ID を CustomerPartner に含める必要があります。他のアプリケーションは、Customer オブジェクトの ID を必要とせず、Business Integration Express システムにビジネス・オブジェクトを送信する場合に Customer オブジェクト ID を提供しません。
あるコラボレーションが Customer ID を提供しないシステムから CustomerPartner ビジネス・オブジェクトを受け取り、ID を要求するシステムとそのオブジェクトを同期する必要がある場合、コラボレーションは追加データを収集して、それを宛先アプリケーションに提供する必要があります。このため、CustomerPartnerWrapper はビジネス・オブジェクトのキーの設定に WrapperFoundation から提供される次のコマンドを使用しません。
SourceAppBusObj.setKeys(triggeringBusObj);
上記のコマンド (WrapperFoundation が Sync シナリオの Retrieve from Source ノードに用意している) を使用する代わりに、CustomerPartnerWrapper は以下の 2 つの個別のステートメントでキー値を取得します。
SourceAppBusObj.set("ObjectId", triggeringBusObj.getString("ObjectID")); SourceAppBusObj.set("AdditionalKey", triggeringBusObj.getString("AdditionalKey"));
これらのステートメントも Sync シナリオの Retrieve from Source ノードにあり、どちらも潜在キーとして ObjectId 属性と AdditionalKey 属性を使用します。
WrapperFoundation は、Sync シナリオの Prepare Object for Sync Collaboration ノードに次のコードを持たせています。
ToBusObj =(SourceAppBusObj).duplicate(); ToBusObj.setKeys(triggeringBusObj);
等価のノードにおいて、CustomerPartnerWrapper は 2 つの個別ステートメントを使用して ToBusObj のキーを設定します。
ToBusObj =(SourceAppBusObj).duplicate(); ToBusObj.set("ObjectId", triggeringBusObj.getString("ObjectId")); ToBusObj.set("AdditionalKey", triggeringBusObj.getString("AdditionalKey"));
表 14 は、WebSphere Business Integration Express に用意されている 4 タイプの汎用 Item ビジネス・オブジェクトを示しています。ユーザーは、自身の環境の特定の要件に合う固有のタイプの汎用 Item ビジネス・オブジェクトを定義することが前提となっています。したがって、ItemSync コラボレーションはユーザー定義のトリガー・ビジネス・オブジェクトと必須 Item ビジネス・オブジェクトを処理するために容易に拡張できるよう設計されています。詳細については、ItemSync コラボレーションのユーザーズ・ガイドを参照してください。
ItemWrapper はあらゆるタイプの汎用 Item ビジネス・オブジェクトによって起動されるので、コラボレーションはまず自身を起動したビジネス・オブジェクトのタイプを判別する必要があります。このため、ItemWrapper の Verify および Sync シナリオのシナリオ定義には、次のステートメントが含まれます。このステートメントは、他のラッパー・コラボレーション・テンプレートには含まれません。
BusObj getItemFlvrBusObj = new BusObj(triggeringBusObj.getType());
上記のステートメントにより、ItemWrapper 固有のビジネス・オブジェクト (getItemFlvrBusObj) が作成されます。また、このステートメントはトリガー・ビジネス・オブジェクトのタイプも取得し、それを使用して ItemWrapper の検証および同期シナリオで使用するビジネス・オブジェクトのタイプを設定します。
すべてのラッパー・コラボレーションは、コラボレーションのテンプレート定義の宣言節に DestinationAppBusObj および SourceAppBusObj ビジネス・オブジェクトを作成します。これらのビジネス・オブジェクトのタイプは、トリガー・ビジネス・オブジェクトのタイプと同じです。他のラッパー・コラボレーションは、DestinationAppBusObj および SourceAppBusObj を使用して宛先およびソース・アプリケーションからデータを検索しますが、ItemWrapper は getItemFlvrBusObj を使用します。Verify シナリオで宛先アプリケーションから項目を検索する前、または Sync シナリオでソース・アプリケーションから項目を検索する前に、ItemWrapper は triggeringBusObj のキー値を使用して getItemFlvrBusObj のキーを設定します。
getItemFlvrBusObj.setKeys(triggeringBusObj);
Sync シナリオでは、ItemWrapper は getItemFlvrBusObj の値を使用して、宛先への送信を行うビジネス・オブジェクトを以下のように作成します。
toItemFlvrBusObj = getItemFlvrBusObj.duplicate(); //toItemFlvrRef.copy(getItemFlvrRef); toItemFlvrBusObj.setKeys(triggeringBusObj);
標準ラッパー・コラボレーション (ContactWrapper など) は、SourceAppBusObj からインスタンス化される ToBusObj を作成します。以下に、この作成およびインスタンス化を示します。
ToBusObj =(SourceAppBusObj).duplicate(); ToBusObj.setKeys(triggeringBusObj);
ItemWrapper は標準 FromBusObj を使用しないので、コラボレーションのコードでは Verify および Sync シナリオの Initialize Variables ノードのコードをコメント化します。
WrapperFoundation を拡張して、追加のポート、プロパティー、処理ロジック、およびメッセージを組み込むことができます。詳細については、CollaborationFoundation の拡張を参照してください。