イベント集約プログラミング・モデルによって、イベント、エンティティおよびメッセージの集約が必要なビジネス・ユースケースに対して包括的な方法が提供されます。
たとえば、イベント集約が必要になるのは、ビジネス・メッセージの完了前に複数のイベントが発生し、未完了のメッセージごとに1つのイベントがトリガーされて統合レイヤーに1つのビジネス・イベントが発生する場合です。
イベント集約プログラミング・モデルは、不連続な間隔で生成された粒度が細かいメッセージ(イベント)から粒度の粗いメッセージ(イベント)を作成するのに役立ちます。一定の間隔で生成されたメッセージは、不完全または重複である場合があります。
イベント集約プログラミング・モデルは、関係および時間ベースの集約で使用できます。
イベント集約プログラミング・モデルは、次の機能を提供します。
エンティティの同期化による、エンティティの単一で全体的なビューの提供。
粒度の細かい複数のイベントを、粒度の粗い単一のイベントに統一。
同一イベントの重複のマージ。
パフォーマンスの向上。
通常、粒度の細かいアプリケーションのパラレル・シミュレーションを行うと、多数のメッセージが生成されます。ネットワークを介してこれらのメッセージを送信するオーバーヘッドによって、パラレル・シミュレーションのスピードはかなり低下します。この場合は、イベント集約によってアプリケーションの粒度が上がり、通信のオーバーヘッドを削減できます。
図13-1に、ビジネス統合シナリオでイベント集約を実現する方法を示します。「顧客の作成」は粒度の粗いイベントで、イベント・プロデューサによって作成される「連絡先の作成」、「アカウントの作成」および「住所の作成」は粒度の細かいイベントです。イベント・アグリゲータ・サービスを使用すると、これらをすべてを統合して、粒度の粗い単一のイベントを発生できます。
図13-1 粒度の細かい複数のイベントから粒度の粗い単一のイベントを発生するイベント集約サービス
イベント・プロデューサは、集約対象のメッセージを作成します。作成されたメッセージは、不完全で、他のメッセージに関連したり依存している可能性があります。
イベント・プロデューサの例として、新規のアカウント・オブジェクトが作成され、関連するイベントをトリガーするSiebel CRMシステムがあります。このアカウント・エンティティには子オブジェクトとして連絡先エンティティがあり、アカウント・エンティティとともに作成されるときに粒度の細かい別のイベントを発生できます。
イベント・アグリゲータ・サービスは、粒度の細かい複数のイベントを統合して、粒度の粗い単一のイベントを発生します。JavaまたはPL/SQLを使用して、担当者、アカウントおよび住所イベント間の関係を実装します。
イベント・アグリゲータ・サービスは、2つの部分に分けられます。
最初の部分は、実際のプログラミング・ロジックを実装して、エンティティ間の集約および関係を保持します。
2番目の部分は、外部クライアントからこのプログラミング・ロジックを呼び出すサービス・ラッパーです。プログラミング・ロジックがPL/SQLを使用して開発されている場合、これらのデータベース・オブジェクトはデータベース・アダプタ・インタフェースを使用して公開できます。プログラミング・ロジックがJavaで開発されている場合、JavaオブジェクトはWebサービス呼出しフレームワーク(WSIF)インタフェースを使用して公開できます。
イベント・アグリゲータ・サービスのフロントエンドとして機能するには、BPELの使用をお薦めします。JavaまたはPL/SQLオブジェクトが呼び出されて、様々な理由で失敗した場合は、イベント・プロデューサに通知して処理する必要があります。BPELは、このシナリオに対して適切なフォルトおよび例外処理機能を備えています。
エンティティ間の関係を保持するプログラミング・ロジックを実装するには、Javaの使用をお薦めします。これは、拡張、モジュール性および例外処理にJavaが適しているためです。
イベント集約プログラミング・モデルの実装には、イベント集約サービスとコンシューマ・サービスの作成、およびエラー処理の実装が含まれます。
この方法を使用すると、単一の自己参照表およびストアド・プロシージャを使用して、集約がデータベース・レイヤーで発生します。自己参照集計表構造では、エンティティ間の複数レベルの関係がサポートされています。
ストアド・プロシージャは、該当するイベントの生成時に集約表を入力するのに役立ちます。また、これは、最初のレベルのオブジェクトについて重複レコードを削減するのに役立ちます。ストアド・プロシージャでは、集約表内のレコードを更新する前に、オプティミスティック・ロックを取得します。
ユースケース: Siebel CRMを使用するCustomer Master Data Management
この実装は、このユースケースに基づいて説明します。
Oracle Customer Master Data Management (MDM)の顧客プロセス統合フローで、Siebel CRMアプリケーションは、ビジネス・レイヤー・レベルで定義されたトリガーを作成および更新します。更新または作成アクションによって、統合に対して複数のイベントが発生する可能性があります。したがって、粒度の細かい各イベントを個別に処理するのではなく、これらのイベントを集約してバッチ処理します。
これらのイベントは、アカウント、担当者および住所の各ビジネス・エンティティで発生できます。
アカウント、担当者および住所エンティティ間の関係は、集約を使用して保持する必要があります。
アカウントには、1つ以上の担当者と住所を添付できます。
担当者には、1つ以上の住所を添付できます。
担当者と住所は、複数のアカウント間で共有できます。
この項では、イベント集約サービスの作成(次の方法を含む)について説明します。
PL/SQLオブジェクトを作成します。
データベース・サービスと集約サービスを作成します。
データベース・サービスと集約サービスを作成する手順は、次のとおりです。
データベースが使用不可、ストアド・プロシージャの失敗、サービス・レベルでのその他のエラーの場合に備えて、このサービスはエラー処理を実装してクライアント・サービスに速やかに通知する必要があります。
詳細は、「イベント集約プログラミング・モデル用のエラー処理の実装」を参照してください。
外部クライアントは、イベント集約のためにこのBPELサービスを呼び出します。
外部クライアント(Siebel CRMなど)がメッセージを永続キューにポストし、イベント・アグリゲータ・サービスがそのキューからメッセージを取得してイベント集約することをお薦めします。この推奨方法の実装が不可能な場合は、イベント・アグリゲータ・サービスを外部クライアントから直接呼び出すことができます。
コンシューマ・サービスを作成する手順は、次のとおりです。
ポーリング間隔およびその他の構成可能プロパティの構成方法については、テクノロジ・アダプタの理解のPollingInterval、MaxTransactionSizeおよびActivationInstancesの構成に関する項を参照してください。
イベント集約プログラミング・モデルのエラー処理は、Oracle Application Integration Architecture (AIA)のエラー処理の推奨事項に準拠する必要があります。
エラー処理フレームワークの詳細は、Oracle Application Integration Architecture Foundation Packインフラストラクチャ・コンポーネントとユーティリティ・ユーザーズ・ガイドのエラー処理の設定に関する項を参照してください。
リソースが利用不可またはアプリケーション・エラーのためにイベント・アグリゲータ・サービスでエラーが発生した場合は、エラーがイベント・アグリゲータ・サービス・レイヤーで処理され、プロデューサ・サービスに伝播される必要があります。イベント・プロデューサによって生成されたイベントが集約に参加できない場合は、イベント・プロデューサに通知される必要があります。
イベント・アグリゲータ・サービス・レイヤーの実装には、BPELの使用をお薦めします。BPELを使用すると、ユーザーはエラー処理をより制御しやすくなります。このレイヤーが実装されるプログラミング言語に関係なく、アプリケーション例外を処理できる必要があります。
イベント・アグリゲータ・サービスがPL/SQLで実装される場合は、OUTパラメータをプロビジョニングしてイベント・プロデューサに伝播する必要があります。SUCCESSまたはFAILUREのいずれかのメッセージで構成されるリプライをプロデューサ・サービスに返すのと同様に、例外処理のために単純に適切なOUT変数を定義できます。
イベント・アグリゲータ・サービスがJavaで実装される場合は、WSIFインタフェースを使用して例外をプロビジョニングして伝播する必要があります。WSIFインタフェースで使用される適切な例外オブジェクトを定義します。