この章では、SOAコンポジット・アプリケーションでビジネス・イベントを公開し、サブスクライブする方法を説明します。ビジネス・イベントは、ビジネス環境で発生した結果として送信されるメッセージ・データから構成されます。ビジネス・イベントが公開されると、他のサービス・コンポーネントはそれをサブスクライブできます。
項目は次のとおりです。
Oracle Mediatorでビジネス・イベントを使用する方法を示したサンプルは、次のURLを参照してください。
http://www.oracle.com/technology/sample_code/products/mediator
SOAコンポジット・アプリケーションでのビジネス・イベントの作成方法の詳細は、『Oracle Fusion Middleware Oracle SOA Suiteアプリケーションの作成および実行のためのチュートリアル』を参照してください。
目的の状況が発生した場合は、ビジネス・イベントを発生させることができます。たとえば、融資フロー・シナリオにおいて、融資プロセスを実行するBPELプロセスは、プロセスの完了時に融資完了イベントを発生させることができます。 このアプリケーションのインフラストラクチャの範囲内で、他のシステムはこれらのイベントをリスニングし、イベントの受信時に次の処理を実行できます。
イベント・コンテキストを使用して、ビジネス・インテリジェンスまたはダッシュボード・データを導出します。
融資パッケージを顧客に送る必要があることをメール部門に知らせます。
別のビジネス・プロセスを起動します。
Oracle Business Activity Monitoring(BAM)に情報を送信します。
ビジネス・イベントは通常、一方向(fire-and-forget)、非同期方式でビジネス発生の通知を送信します。ビジネス・プロセスには、次のような特徴があります。
ビジネス・イベントの完了を受信するサービス・コンポーネントに依存しません。
他のサービス・コンポーネントがビジネス・イベントを受信しても関係ありません。
サブスクライバの存在(存在する場合)およびデータがサブスクライバに与える影響を知る必要がありません。
これらは、Web Services Description Language(WSDL)ファイル規定に依存する直接サービス起動(Simple Object Access Protocolサービス・クライアントなど)とビジネス・イベントの重要な相違点です。イベントの発生がイベントの受信者に依存する場合、メッセージは通常、ビジネス・イベントではなくサービス起動を通して配信する必要があります。直接サービス起動とは異なり、ビジネス・イベントはサーバーからクライアントを分離します。
ビジネス・イベントは、イベント定義言語(EDL)を使用して定義されます。EDLは、ビジネス・イベント定義の作成に使用するスキーマです。アプリケーションは、ビジネス・イベント定義のインスタンスと協調して動作します。
EDLの構成内容は次のとおりです。
グローバル名
通常はJavaパッケージ名(com.acme.ExpenseReport.created
など)ですが、必須ではありません。
カスタム・ヘッダー
高速ルーティングのために使用されます。たとえば、作成済経費レポートという名前のイベントに通貨ヘッダーがある場合、実行時にイベントを作成するコンポーネントは、通貨ヘッダーの移入を担当します。イベント・ペイロードへのXPath問合せを行うより速く、ヘッダーの値に基づいてイベントをルーティングできます。
ペイロード定義
定義には、XMLスキーマ(XSD)が最も一般的に使用されます。ビジネス・イベントのペイロードはXSDを使用して定義されます。スキーマのURIは、ペイロードのルート要素に含まれます。
例44-1に、BugReport
イベント定義内に2つのビジネス・イベントbugUpdated
およびbugCreated
があるEDLファイルを示します。ネームスペース(BugReport
)および関連するスキーマ・ファイル(BugReport.xsd
)が参照されます。
例44-1 2つのビジネス・イベントがあるEDLファイル
<?xml version = '1.0' encoding = 'UTF-8'?> <definitions targetNamespace="/model/events/edl/BugReport" xmlns:ns0="/model/events/schema/BugReport" xmlns="http://schemas.oracle.com/events/edl"> <schema-import namespace="/model/events/schema/BugReport" location="BugReport.xsd"/> <event-definition name="bugCreated"> <content element="ns0:bugCreatedInfo"/> </event-definition> <event-definition name="bugUpdated"> <content element="ns0:bugUpdatedInfo"/> </event-definition> </definitions>
これら2つのイベントはOracle Mediatorのサブスクリプションで使用できます。
ビジネス・イベントは、メタデータ・サービス(MDS)リポジトリにデプロイされます。ビジネス・イベントをそのアーチファクト(XSDなど)とともにMDSにデプロイすることを、EDL(またはイベント定義)の公開とも呼びます。このアクションにより、EDLおよびそのアーチファクトがMDS内の共有領域に転送されます。MDS共有領域内のオブジェクトは、Oracle JDeveloperのリソース・パレット内のすべてのアプリケーションで参照できます。 公開されたEDLは、他のアプリケーションでサブスクライブできます。EDLの公開を解除することはできません。定義は常に存在します。
サブスクリプションは、特定の修飾名(QName)(x.y.z/newOrders
など)に対して行います。 QNameはタプル(URI
、localName
)であり、xmlns:prefix=URI
などのネームスペース宣言またはネームスペース・コンテキストとの組合せで、文字列prefix:localName
から導出できます。 また、コンテンツ・ベースのフィルタを使用すると、サブスクリプションをさらに絞り込むことができます。
ビジネス・イベントは、イベント配信ネットワーク(EDN)内で公開されます。EDNは、すべてのSOAインスタンスの範囲内で実行されます。発生したイベントはEDNにより、サブスクライブするサービス・コンポーネントに配信されます。
このリリースでは、次のSOAサービス・コンポーネントおよびアクションがサポートされます。
Oracle Mediatorはイベントをサブスクライブし、公開できます。
Oracle Mediatorは、BPELプロセスに接続されるイベントをサブスクライブできます。 この機能を使用すると、コンポーネント・レベルの認可ポリシー実行点に対して、セキュリティ・インターセプタを介してプリンシパルを渡すことができます。
注意: EDNには、JMSおよび(PL/SQL APIをサポートする)AQの2つの実装があります。 |
1つのSOAコンポジット・アプリケーション・インスタンスは、1つのコンテナ内に配置することも、複数のコンテナにわたってクラスタ化することもできます。 別のアプリケーション(Oracle Application Development Framework(ADF)Business Componentアプリケーションなど)を構成し、SOAコンポジット・アプリケーション・インスタンスと同じコンテナ内または異なるコンテナ内で実行できます。
ローカル・イベント接続またはリモート・イベント接続を通して、Java EEアプリケーションからイベントを発生させることができます。
ローカル・イベント接続
パブリッシャがアプリケーションと同じOracle WebLogic Serverに存在し、パブリッシャがローカル・ビジネス・イベント接続ファクトリを使用する場合、イベントはローカル・イベント接続を通して発生します。このシナリオでは、同期サブスクリプションが同期して実行されます。
リモート・イベント接続
コール元がアプリケーションと異なるコンテナ(異なるJVM)内に存在する場合、イベントはリモート・イベント接続を通して発生します。リモート・イベント接続では、非同期サブスクリプションのみがサポートされます。
PL/SQL APIを通してイベントを発生させることもできます。
別のアプリケーション(Oracle ADF Business Componentアプリケーションなど)を構成し、SOAコンポジット・アプリケーションと同じコンテナ内で実行すると、このアプリケーションはローカル・イベント接続を使用するように最適化されます。イベントの境界は、アプリケーション・インスタンスです。イベントがアプリケーション・インスタンス内で発生すると、アプリケーション・インスタンスに登録されたサブスクリプションが実行されます。イベントは、1つのアプリケーション・インスタンスから別のインスタンスに伝播されません。 伝播は、イベントをリスニングし、イベントをJMSキューに公開するOracle Mediatorを通して、両方のインスタンスで可能になります。
この項では、ビジネス・イベントの作成方法およびサブスクライブ方法の高レベルな概要が提供されます。 このシナリオでは、ストアフロント・アプリケーション(StoreFrontServiceサービス)でユーザーから注文を受けたときに、NewOrderSubmittedというビジネス・イベントが作成されます。 その後、このビジネス・イベントをサブスクライブするOracle Mediatorサービス・コンポーネントを作成します。
このシナリオは、これより規模の大きいWebLogic Fusion Order Demoアプリケーションの一部です。 このアプリケーションの詳細は、『Oracle Fusion Middleware Oracle SOA Suiteアプリケーションの作成および実行のためのチュートリアル』を参照してください。
ビジネス・イベントを作成する手順は、次のとおりです。
SOAプロジェクトを空のコンポジットとして作成します。
次の2つの方法のいずれかにより、イベント定義の作成ウィザードを起動します。
SOAコンポジット・エディタで、デザイナの上のアイコンをクリックします。 図44-1に例を示します。
「ファイル」メイン・メニューから、「新規」→「SOA層」→「サービス・コンポーネント」→「イベント定義」の順に選択します。
「イベント定義の作成」ダイアログが表示されます。
表44-1に記載されている詳細を入力します。
「追加」アイコンをクリックして、イベントを追加します。
「イベントの追加」ダイアログが表示されます。
「検索」アイコンをクリックしてペイロードを選択し、「OK」をクリックします。 図44-2に詳細を示します。
図44-3に示すように、「名前」フィールドに名前を入力します。
「OK」をクリックします。
図44-4に示すように、追加したイベントが「イベント」セクションに表示されます。
エディタの上部にある、event_definition_name
.edl
の横のxをクリックして、イベント・エディタを閉じます。
変更を保存するように求められた場合は、「はい」をクリックします。変更を保存しないとイベントは作成されず、「イベント・チューザ」ウィンドウでは選択できません。
ビジネス・イベントがMDSに公開され、SOAコンポジット・エディタに戻ります。 「リソース・パレット」に、ビジネス・イベントが表示され参照できます。
ビジネス・イベントをサブスクライブする手順は、次のとおりです。
「コンポーネント・パレット」からSOAコンポジット・エディタに、メディエータ・サービス・コンポーネントをドラッグします。このサービス・コンポーネントにより、ビジネス・イベントをサブスクライブできます。
「名前」フィールドに、名前を入力します。
「オプション」リストから、「イベントのサブスクライブ」を選択します。
ウィンドウがリフレッシュされ、イベント表が表示されます。
「追加」アイコンをクリックして、イベントを選択します。
「イベント・チューザ」ウィンドウが表示されます。
作成したイベントを選択し、「OK」をクリックします。
「メディエータの作成」ダイアログが再び表示されます。
イベントと一貫性がある配信のレベルを選択します。
唯一
イベントは、それ自体のグローバル(つまりJTA)トランザクションのサブスクライバに配信されます。 イベント処理が完了すると、そのトランザクション内でサブスクライバが行ったあらゆる変更がコミットされます。サブスクライバが失敗すると、トランザクションはロールバックされます。 失敗したイベントは、設定された回数だけ再試行されます。
保証付き
イベントは、グローバル・トランザクションなしでサブスクライバに非同期で配信されます。サブスクライバは、独自のローカル・トランザクションを作成して処理できますが、そのトランザクションは、残りのイベント処理とは別にコミットされます。イベントはサブスクライバに渡されることが保証されていますが、グローバル・トランザクションがないため、システムの障害が原因でイベントが2回以上配信される可能性があります。 サブスクライバが例外をスローすると(または失敗すると)、例外は記録されますが、イベントは再送信されません。
即時
イベントは、パブリッシャと同じグローバル・トランザクションとスレッドで、サブスクライバに配信されます。すべての即時サブスクライバが処理を完了するまで、公開コールは返されません。いずれかのサブスクライバが例外をスローすると、追加のサブスクライバは起動されず、例外はパブリッシャにスローされます。 即時処理中にエラーが発生した場合、トランザクションはロールバックされます。
イベントをフィルタリングするには、選択したイベントの「フィルタ」列をダブルクリックするか、またはイベントを選択して、表の上の「フィルタ」アイコン(最初のアイコン)をクリックします。 これにより「式ビルダー」ダイアログが表示されます。 このダイアログで、XPathフィルタ式を指定できます。フィルタ式では、サービスの起動前にメッセージのコンテンツ(ペイロードまたはヘッダー)が分析されるように指定します。 たとえば、メッセージに顧客IDが含まれている場合のみサービスを起動することを指定するフィルタ式を適用できます。
式のロジックが満たされると、イベントの配信が可能になります。
フィルタの詳細は、第19.2.2.6項「フィルタリング・メッセージの式の指定」を参照してください。
図44-5は、「メディエータの作成」ダイアログを示しています。
「OK」をクリックします。
図44-6に、イベント・サブスクリプションのためにOracle Mediatorが構成されたことを示す左側のアイコンを示します。
例44-2のソース・コードに、Oracle Mediatorサービス・コンポーネントのサブスクライブするイベントに関する詳細を示します。
例44-2 サブスクライブするイベント
<component name="OrderPendingEvent"> <implementation.mediator src="OrderPendingEvent.mplan"/> <business-events> <subscribe xmlns:sub1="/oracle/fodemo/storefront/entities/events/edl/OrderEO" name="sub1:NewOrderSubmitted" consistency="oneAndOnlyOne" runAsRoles="$publisher"/> </business-events> </component>
この例では具体的に明示されていませんが、イベントのXPathフィルタを定義できます。 例44-3では、頭金が50000
を超える場合にのみ、イベントの配信が可能になります。
例44-3 イベントに対するXPathフィルタの定義
<business-events>
. . .
. . .
<filter>
<xpath xmlns:be="http://oracle.com/fabric/businessEvent"
xmlns:ns1="http://xmlns.oracle.com/singleString"
<xpath expression= "/be:business-event/be:content/
sub1:AccountInfo/Details[@initialDeposit > 50000]" />
</filter>
. . .
. . .
</business-events>
SOAコンポジット・アプリケーションのデフォルト以外のリビジョンに存在するサブスクライバでも、ビジネス・イベントを取得できることに注意してください。 たとえば、次の動作に注意してください。
M1という最初のOracle Mediatorサービス・コンポーネントとM2という2番目のOracle Mediatorサービス・コンポーネントを含む、コンポジット・アプリケーションを作成します。M1はイベントを公開し、M2はイベントをサブスクライブします。 出力はディレクトリに書き込まれます。
コンポジット・アプリケーションをリビジョン1としてデプロイします。
コンポジット・アプリケーションを変更して、M3という3番目のOracle Mediatorサービス・コンポーネントを追加します。M3は、同じイベントをサブスクライブし、別のディレクトリに出力を書き込みます。
コンポジット・アプリケーションをリビジョン2(デフォルト)としてデプロイします。
リビジョン2のコンポジット・アプリケーションを起動します。
Oracle Mediator M2は、同じ内容の出力をディレクトリ内の2つのファイルに書き込むことに注意してください。 Oracle Mediator M3は、予想どおりに、イベントを取得し、別のディレクトリに出力を正常に書き込みます。 しかし、(リビジョン1の)Oracle Mediator M2も、コンポジット・アプリケーションのリビジョン2から公開されたイベントを取得し、処理しています。 したがって、同じディレクトリ内にもう1つ出力ファイルが作成されます。
第44.2.2項「ビジネス・イベントをサブスクライブする方法」でサブスクライブしたイベントを公開するための、2番目のOracle Mediatorを作成できます。
ビジネス・イベントを公開する手順は、次のとおりです。
最初のOracle Mediatorがサブスクライブしたイベントを公開する、2番目のOracle Mediatorサービス・コンポーネントを作成します。
最初のOracle Mediatorサービス・コンポーネントに戻ります。
「ルーティング・ルール」セクションで、「追加」アイコンをクリックします。
「ターゲット・タイプ」ウィンドウでプロンプトが表示されたら、「サービス」をクリックします。
2番目のOracle Mediatorサービス・コンポーネントを選択します。
「ファイル」メイン・メニューから「すべて保存」を選択します。
例44-4には、2つのOracle Mediatorサービス・コンポーネントが示されていることに注意してください。 1つのサービス・コンポーネント(OrderPendingEvent
)はイベントをサブスクライブし、もう1つのサービス・コンポーネント(PublishOrderPendingEvent
)はイベントを公開します。
例44-4 イベントのサブスクリプションと公開
<component name="PublishOrderPendingEvent"> <implementation.mediator src="PublishOrderPendingEvent.mplan"/> <business-events> <publishes xmlns:sub1="/oracle/fodemo/storefront/entities/events/edl/OrderEO" name="pub1:NewOrderSubmitted"/> </business-events> </component> <component name="OrderPendingEvent"> <implementation.mediator src="OrderPendingEvent.mplan"/> <business-events> <subscribe xmlns:sub1="/oracle/fodemo/storefront/entities/events/edl/OrderEO" name="sub1:NewOrderSubmitted" consistency="oneAndOnlyOne" runAsRoles="$publisher"/> </business-events> </component>
この項では、Oracle ADF Business Componentイベント条件をOracle Mediatorに統合する方法に関する高レベルな概要が提供されます。
Oracle ADF Business Componentのビジネス・イベントをOracle Mediatorに統合する手順は、次のとおりです。
ビジネス・コンポーネント・プロジェクトを作成します。
ビジネス・イベント定義をプロジェクトに追加します。このアクションにより、EDLファイルおよびXSDファイルが生成されます。XSDファイルにはペイロードの定義が含まれます。また、作成時には、Oracle ADF Business Componentによってイベントが発生するように必ず指定します。
SOAコンポジット・アプリケーションを作成し、EDLスキーマ・ファイルとXSDスキーマ・ファイルをSOAプロジェクトのルート・ディレクトリに手動でコピーします。次に例を示します。
JDeveloper/mywork/SOA_application_name/SOA_project_name
スキーマ・ファイルを、インポートに基づいて、EDLファイルからの適切な相対位置に格納します。
第44.2.2項「ビジネス・イベントをサブスクライブする方法」の説明に従って、Oracle Mediatorサービス・コンポーネントを作成します。
第44.2.2項「ビジネス・イベントをサブスクライブする方法」の説明に従って、「イベント・チューザ」ウィンドウでイベントのEDLファイルを選択します。
Oracle Mediatorを起動するために、同じSOAコンポジット・アプリケーション内にBPELプロセス・サービス・コンポーネントを作成します。「詳細」タブの「入力要素」フィールドでは、手順2で作成したBusiness Componentビジネス・イベントXSDのペイロードを必ず選択します。
BPELプロセスをダブルクリックします。
emailアクティビティをBPELプロセスにドラッグします。
ビジネス・イベントXSDのペイロードを参照して、「件名」フィールドおよび「本文」フィールドに入力します。
SOAコンポジット・エディタのOracle Mediatorサービス・コンポーネントに戻ります。
BPELプロセスまたは2番目のOracle Mediatorサービス・コンポーネントのように、イベントを公開する2番目のサービス・コンポーネントを設計します。
これで、SOAコンポジット・アプリケーションの設計は完了です。
Oracle ADF Business Componentビジネス・イベントの作成および公開の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。