ヘッダーをスキップ
Oracle® Fusion Middleware Oracle SOAコア拡張機能開発者ガイド
12c (12.1.3)
E54313-02
  目次へ移動
目次

前
次
 

13 イベント集約プログラミング・モデルの説明

この章では、イベント集約プログラミング・モデルの概要を示し、その実装方法を説明します。

この章の内容は次のとおりです。

13.1 概要

イベント集約プログラミング・モデルによって、イベント、エンティティおよびメッセージの集約が必要なビジネス・ユースケースに対して包括的な方法が提供されます。

たとえば、イベント集約が必要になるのは、ビジネス・メッセージの完了前に複数のイベントが発生し、未完了のメッセージごとに1つのイベントがトリガーされて統合レイヤーに1つのビジネス・イベントが発生する場合です。

イベント集約プログラミング・モデルは、不連続な間隔で生成された粒度が細かいメッセージ(イベント)から粒度の粗いメッセージ(イベント)を作成するのに役立ちます。一定の間隔で生成されたメッセージは、不完全または重複である場合があります。

イベント集約プログラミング・モデルは、関係および時間ベースの集約で使用できます。

イベント集約プログラミング・モデルは、次の機能を提供します。

  • エンティティの同期化による、エンティティの単一で全体的なビューの提供。

  • 粒度の細かい複数のイベントを、粒度の粗い単一のイベントに統一。

  • 同一イベントの重複のマージ。

  • パフォーマンスの向上。

通常、粒度の細かいアプリケーションのパラレル・シミュレーションを行うと、多数のメッセージが生成されます。ネットワークを介してこれらのメッセージを送信するオーバーヘッドによって、パラレル・シミュレーションのスピードはかなり低下します。この場合は、イベント集約によってアプリケーションの粒度が上がり、通信のオーバーヘッドを削減できます。

図13-1に、ビジネス統合シナリオでイベント集約を実現する方法を示します。「顧客の作成」は粒度の粗いイベントで、イベント・プロデューサによって作成される「連絡先の作成」、「アカウントの作成」および「住所の作成」は粒度の細かいイベントです。イベント・アグリゲータ・サービスを使用すると、これらをすべてを統合して、粒度の粗い単一のイベントを発生できます。

図13-1 粒度の細かい複数のイベントから粒度の粗い単一のイベントを発生するイベント集約サービス

この図は周囲のテキストで説明しています。

13.1.1 イベント・プロデューサ

イベント・プロデューサは、集約対象のメッセージを作成します。作成されたメッセージは、不完全で、他のメッセージに関連したり依存している可能性があります。

イベント・プロデューサの例として、新規のアカウント・オブジェクトが作成され、関連するイベントをトリガーするSiebel CRMシステムがあります。このアカウント・エンティティには子オブジェクトとして連絡先エンティティがあり、アカウント・エンティティとともに作成されるときに粒度の細かい別のイベントを発生できます。

13.1.2 イベント・アグリゲータ・サービス

イベント・アグリゲータ・サービスは、粒度の細かい複数のイベントを統合して、粒度の粗い単一のイベントを発生します。JavaまたはPL/SQLを使用して、担当者、アカウントおよび住所イベント間の関係を実装します。

イベント・アグリゲータ・サービスは、2つの部分に分けられます。

最初の部分は、実際のプログラミング・ロジックを実装して、エンティティ間の集約および関係を保持します。

2番目の部分は、外部クライアントからこのプログラミング・ロジックを呼び出すサービス・ラッパーです。プログラミング・ロジックがPL/SQLを使用して開発されている場合、これらのデータベース・オブジェクトはデータベース・アダプタ・インタフェースを使用して公開できます。プログラミング・ロジックがJavaで開発されている場合、JavaオブジェクトはWebサービス呼出しフレームワーク(WSIF)インタフェースを使用して公開できます。

イベント・アグリゲータ・サービスのフロントエンドとして機能するには、BPELの使用をお薦めします。JavaまたはPL/SQLオブジェクトが呼び出されて、様々な理由で失敗した場合は、イベント・プロデューサに通知して処理する必要があります。BPELは、このシナリオに対して適切なフォルトおよび例外処理機能を備えています。

エンティティ間の関係を保持するプログラミング・ロジックを実装するには、Javaの使用をお薦めします。これは、拡張、モジュール性および例外処理にJavaが適しているためです。

13.1.3 サービスの消費

実際のイベント集約はデータベース内で発生します。これは時間ベースの集約で、コンシューマ・サービスがスレッドを生成して、データベース・アダプタを使用して表オブジェクトをポーリングし、その表にプッシュされたメッセージを検索することを意味します。ポーリングは、構成可能な時間間隔に基づいて発生します。コンシューマ・サービスは、特定の時間間隔内のメッセージをすべてフェッチして、リクエスタ・アプリケーション・ビジネス・コネクタ(ABC)サービスに渡します。

メッセージがデータベースからフェッチされると、コンシューマ・サービスはメッセージを削除します。

13.2 イベント集約プログラミング・モデルの実装

イベント集約プログラミング・モデルの実装には、イベント集約サービスとコンシューマ・サービスの作成、およびエラー処理の実装が含まれます。

この方法を使用すると、単一の自己参照表およびストアド・プロシージャを使用して、集約がデータベース・レイヤーで発生します。自己参照集計表構造では、エンティティ間の複数レベルの関係がサポートされています。

ストアド・プロシージャは、該当するイベントの生成時に集約表を入力するのに役立ちます。また、これは、最初のレベルのオブジェクトについて重複レコードを削減するのに役立ちます。ストアド・プロシージャでは、集約表内のレコードを更新する前に、オプティミスティック・ロックを取得します。

ユースケース: Siebel CRMを使用するCustomer Master Data Management

この実装は、このユースケースに基づいて説明します。

Oracle Customer Master Data Management (MDM)の顧客プロセス統合フローで、Siebel CRMアプリケーションは、ビジネス・レイヤー・レベルで定義されたトリガーを作成および更新します。更新または作成アクションによって、統合に対して複数のイベントが発生する可能性があります。したがって、粒度の細かい各イベントを個別に処理するのではなく、これらのイベントを集約してバッチ処理します。

これらのイベントは、アカウント、担当者および住所の各ビジネス・エンティティで発生できます。

アカウント、担当者および住所エンティティ間の関係は、集約を使用して保持する必要があります。

  • アカウントには、1つ以上の担当者と住所を添付できます。

  • 担当者には、1つ以上の住所を添付できます。

  • 担当者と住所は、複数のアカウント間で共有できます。

13.2.1 イベント集約サービスの作成

この項では、イベント集約サービスの作成(次の方法を含む)について説明します。

  • PL/SQLオブジェクトを作成します。

  • データベース・サービスと集約サービスを作成します。

13.2.1.1 PL/SQLオブジェクトの作成

PL/SQLオブジェクトを作成する手順は、次のとおりです。

  1. 図13-2に示すように、データベースに表オブジェクトAIA_AGGREGATED_ENTITIESを作成します。

    図13-2 表オブジェクトの作成例

    この図は周囲のテキストで説明しています。
  2. 図13-3に示すように、ステップ1で作成した表オブジェクトの担当者、アカウントおよび住所間の関係を保持するためのプログラミング・ロジックが含まれる、ストアド・プロシージャ・オブジェクトAIA_AGGREGATOR_PUBを作成します。

    図13-3 ストアド・プロシージャ・オブジェクトの作成例

    この図は周囲のテキストで説明しています。

13.2.1.2 データベース・サービスと集約サービスの作成

データベース・サービスと集約サービスを作成する手順は、次のとおりです。

  1. 図13-4に示すように、前の手順で作成したデータベース・サービスを呼び出すBPELプロジェクトを作成します。

    図13-4 データベース・サービスを呼び出すBPELプロジェクト

    この図は周囲のテキストで説明しています。

データベースが使用不可、ストアド・プロシージャの失敗、サービス・レベルでのその他のエラーの場合に備えて、このサービスはエラー処理を実装してクライアント・サービスに速やかに通知する必要があります。

詳細は、「イベント集約プログラミング・モデル用のエラー処理の実装」を参照してください。

外部クライアントは、イベント集約のためにこのBPELサービスを呼び出します。

外部クライアント(Siebel CRMなど)がメッセージを永続キューにポストし、イベント・アグリゲータ・サービスがそのキューからメッセージを取得してイベント集約することをお薦めします。この推奨方法の実装が不可能な場合は、イベント・アグリゲータ・サービスを外部クライアントから直接呼び出すことができます。

13.2.2 コンシューマ・サービスの作成

コンシューマ・サービスを作成する手順は、次のとおりです。

  1. メディエータ・コンポジットを使用するコンシューマ・サービスを作成します。

    データ・エンリッチメントの実行が必要でないかぎり、メディエータを使用するコンシューマ・サービスを実装することをお薦めします。データベース・アダプタ機能を使用して、正常に処理された時点でレコードをデータベースからパージします。図13-5に、メディエータ・コンポジットを使用するコンシューマ・サービスの実装方法を示します。

    図13-5 メディエータ・コンポジットを使用するコンシューマ・サービス

    この図は周囲のテキストで説明しています。
  2. コンシューマ・サービスをポーリングする時間間隔を構成します。

    実際の集約は、コンシューマ・サービスに設定されたこの時間間隔に基づいて発生します。コンシューマ・サービスは特定の時間間隔内のメッセージをフェッチし、間隔内のすべてのレコードがバッチとして処理されます。図13-6に、コンシューマ・サービスをポーリングする時間間隔の構成方法を示します。

    図13-6 コンシューマ・サービスをポーリングする時間間隔の構成

    この図は周囲のテキストで説明しています。

ポーリング間隔およびその他の構成可能プロパティの構成方法については、テクノロジ・アダプタの理解のPollingInterval、MaxTransactionSizeおよびActivationInstancesの構成に関する項を参照してください。

13.2.3 イベント集約プログラミング・モデル用のエラー処理の実装

イベント集約プログラミング・モデルのエラー処理は、Oracle Application Integration Architecture (AIA)のエラー処理の推奨事項に準拠する必要があります。

エラー処理フレームワークの詳細は、Oracle Application Integration Architecture Foundation Packインフラストラクチャ・コンポーネントとユーティリティ・ユーザーズ・ガイドのエラー処理の設定に関する項を参照してください。

リソースが利用不可またはアプリケーション・エラーのためにイベント・アグリゲータ・サービスでエラーが発生した場合は、エラーがイベント・アグリゲータ・サービス・レイヤーで処理され、プロデューサ・サービスに伝播される必要があります。イベント・プロデューサによって生成されたイベントが集約に参加できない場合は、イベント・プロデューサに通知される必要があります。

イベント・アグリゲータ・サービス・レイヤーの実装には、BPELの使用をお薦めします。BPELを使用すると、ユーザーはエラー処理をより制御しやすくなります。このレイヤーが実装されるプログラミング言語に関係なく、アプリケーション例外を処理できる必要があります。

イベント・アグリゲータ・サービスがPL/SQLで実装される場合は、OUTパラメータをプロビジョニングしてイベント・プロデューサに伝播する必要があります。SUCCESSまたはFAILUREのいずれかのメッセージで構成されるリプライをプロデューサ・サービスに返すのと同様に、例外処理のために単純に適切なOUT変数を定義できます。

イベント・アグリゲータ・サービスがJavaで実装される場合は、WSIFインタフェースを使用して例外をプロビジョニングして伝播する必要があります。WSIFインタフェースで使用される適切な例外オブジェクトを定義します。