プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle SOA SuiteでのSOAアプリケーションの開発
12c (12.2.1.2.0)
E82771-02
目次へ移動
目次

前
次

42 ビジネス・イベントおよびイベント配信ネットワークの使用

この章では、SOAコンポジット・アプリケーションでOracle MediatorまたはBPELプロセスからビジネス・イベントをサブスクライブまたは公開する方法を説明します。ビジネス・イベントは、イベント配信ネットワーク(EDN)に公開され、ビジネス環境で発生した結果として送信されるメッセージ・データから構成されます。ビジネス・イベントが公開されると、他のサービス・コンポーネントはそれをサブスクライブできます。

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

ビジネス・イベントをサブスクライブするサービス・コンポーネントでのコンポジット・センサーの作成の詳細は、「コンポジット・センサーの定義」を参照してください。

スレッド数の指定、イベント配信の停止、最大配信数の指定などビジネス・イベントのトラブルシューティングの詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』の付録「Oracle SOA SuiteおよびOracle BPM Suiteのトラブルシューティング」を参照してください。

Oracle Enterprise Manager Fusion Middleware Controlからのビジネス・イベントの管理の詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』の「ビジネス・イベントの管理」を参照してください。

ビジネス・イベント・チューニングの詳細は、『パフォーマンスのチューニング』を参照してください。

42.1 ビジネス・イベントの概要

目的の状況が発生したときにビジネス・イベントを起動できます。たとえば、ローン・フローのシナリオで、ローン・プロセスを実行しているBPELプロセス・サービス・コンポーネントは、プロセスの完了時にローン完了イベントを起動できます。このアプリケーションのインフラストラクチャ内の他のシステムは、これらのイベントをリスニングし、イベントのインスタンスの受信時に次の処理を実行できます。

  • イベント・コンテキストを使用して、ビジネス・インテリジェンスまたはダッシュボード・データを導出します。

  • 融資パッケージを顧客に送る必要があることをメール部門に知らせます。

  • 別のビジネス・プロセスを起動します。

  • Oracle Business Activity Monitoring (BAM)に情報を送信します。

通常、ビジネス・イベントは、ビジネスの状態変化に関する通知を送信するための一方向のfire-and-forget非同期方法です。ビジネス・プロセスは、次の処理を行いません

  • ビジネス・イベントの完了を受信するサービス・コンポーネントに依存しません。

  • 他のサービス・コンポーネントがビジネス・イベントを受信しても関係ありません。

  • サブスクライバの存在(存在する場合)およびデータがサブスクライバに与える影響を知る必要がありません。

これらは、Web Services Description Language (WSDL)ファイル規定に依存する直接サービス起動(SOAPサービス・クライアントなど)とビジネス・イベントの重要な相違点です。イベントの発生がイベントの受信者に依存する場合、メッセージは通常、ビジネス・イベントではなくサービス起動を通して配信する必要があります。直接サービス起動とは異なり、ビジネス・イベントはサーバーからクライアントを分離します。

ビジネス・イベントは、イベント定義言語(EDL)を使用して定義されます。EDLは、ビジネス・イベント定義の作成に使用するスキーマです。アプリケーションは、ビジネス・イベント定義のインスタンスと協調して動作します。

EDLは、次のもので構成されます。

  • 定義済イベント

    同じネームスペース(definitionsルート要素のtargetNamespace属性)を持つ1つ以上のイベント定義(event-definition要素)の場合、それぞれがローカル名(event-definition要素のname属性)を持ちます。ネームスペースおよびローカル名は、イベント名(QName)を構成します。

  • ペイロード定義

    定義には、XMLスキーマ(XSD)が最も一般的に使用されます。ビジネス・イベントのペイロードは、(schema-import要素を介して)EDLにインポートされたXSDで定義されます。定義済の各イベント(つまりevent-definition要素)には、インポートされたペイロードのXSD要素(content要素のelement属性)への参照を含めることができます。スキーマのURIは、ペイロードのルート要素に含まれます。

次の例は、BugReportイベント定義内に2つのビジネス・イベントbugUpdatedおよびbugCreatedがあるEDLファイルを示しています。ネームスペース(/model/events/edl/BugReport)および関連するスキーマ・ファイル(BugReport.xsd)が参照されます。

<?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およびBPELプロセスのサブスクリプションで使用できます。

ビジネス・イベントは、Oracle Metadata Servicesリポジトリ(MDSリポジトリ)にデプロイされます。ビジネス・イベントをそのアーティファクト(XSDなど)とともにMDSリポジトリにデプロイすることを、EDL (またはイベント定義)の公開とも呼びます。このアクションにより、EDLおよびそのアーティファクトがMDSリポジトリ内の共有領域に転送されます。MDSリポジトリ共有領域内のオブジェクトは、Oracle JDeveloperの「リソース」ウィンドウ内のすべてのアプリケーションで参照できます。EDLは公開後、Oracle MediatorやBPELプロセスなどのSOAコンポーネントでサブスクライブできます。

サブスクリプションは、特定の修飾名(QName)(x.y.z/newOrdersなど)に対して行います。QNameはタプル(URIlocalName)であり、xmlns:prefix=URIなどのネームスペース宣言またはネームスペース・コンテキストとの組合せで、文字列prefix:localNameから導出できます。また、コンテンツ・ベースのフィルタを使用すると、サブスクリプションをさらに絞り込むことができます。

ビジネス・イベントは、EDNに公開されます。EDNはOracle SOA Suiteの各インスタンス内で実行されます。発生したイベントはEDNにより、サブスクライブするサービス・コンポーネントに配信されます。Oracle Mediatorサービス・コンポーネントとBPELプロセス・サービス・コンポーネントはイベントをサブスクライブし、公開できます。

EDNは、Oracle SOA SuiteコンポーネントとOracle SOA Suite以外のコンポーネントとの間のビジネス・イベントベースの相互作用をサポートする、標準のJMSメッセージング・インフラストラクチャに基づいています。EDNは次の2つのJMSベースのタイプを提供します。

  • Oracle WebLogic Server JMS: デフォルトでは、すべてのビジネス・イベントで、1つのデフォルトOracle WebLogic Server JMSトピックを使用します。

  • Oracle Advanced Queueing (AQ) JMS

追加のJMSトピック(Oracle WebLogic Server JMSまたはAQ JMS)を作成して、Oracle Enterprise Manager Fusion Middleware Controlでこれらの追加のJMSトピックに別々のイベント・タイプをマッピングできます。

42.1.1 Oracle SOA SuiteとのEDN統合

Oracle SOA Suite EDNには、次の機能があります。

  • 次の機能を備えた標準JMSベースのメッセージング・インフラストラクチャ。

    • JMSベースのイベントが、Oracle SOA SuiteクライアントおよびOracle SOA Suite以外のクライアント用のアーキテクチャを公開およびサブスクライブします。

    • 双方向の相互作用をサポートします(Oracle SOA SuiteOracle SOA Suite以外のクライアント間で公開とサブスクライブの両方を実行できます)。

    • Oracle AQ JMSおよびOracle WebLogic Server JMSプロバイダの両方をサポートします。Oracle WebLogic Server JMSトピック(デフォルト)およびAQ JMSトピックは、インストール後にEDNを使用できるよう自動的に構成されます。デフォルトのJMSタイプは、Oracle Enterprise Manager Fusion Middleware Controlで、Oracle WebLogic Server JMS (デフォルト)からAQ JMSに切替え可能です。詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』の「ビジネス・イベント」ページでのJMSトピック宛先へのビジネス・イベントのマッピングに関する項を参照してください。

    • EDNが軽量マネージャとして、前述のJMSプロバイダをサポートします。

    • プレーンJMS APIおよびOracle SOA Suite、リモート用に値を追加したEDN API、Oracle SOA Suiteとの統合に使用するOracle SOA Suite以外のクライアント。詳細は、を参照してください

    • EDN配信を保証するJMSトランザクション(OAOO (one-and-only-one)と一貫性保証済メソッドの両方)。

    • メッセージ・ロスを防ぐ、永続的な公開配信オプション。これらのデフォルト・オプションは、リモートのOracle SOA Suite以外のクライアントとの相互作用に役立ちます。

    • 多数のJMSの機能の実装に内部で使用されるJMSアダプタ。JMSアダプタの詳細は、『テクノロジ・アダプタの理解』の「JMS用のOracle JCAアダプタ」を参照してください。

    • マルチノード・クラスタではイベントを重複して処理しません。

  • 非常に詳細なレベルのスケーラビリティ。これにより、様々なイベントを様々なJMSトピックの接続先にマッピングできるので、1箇所ですべてのイベントを処理する必要がなくなります。これにより、ボトルネックの可能性がなくなります。マッピングは、Oracle Enterprise Manager Fusion Middleware Controlの管理者が実行します。詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のJMSトピックの接続先へのビジネス・イベントのマッピングに関する項を参照してください。

  • 次の公開およびサブスクライブのシナリオをサポートします。

    • 同じコンポジット間または別のコンポジット間でイベントを公開およびサブスクライブします。

      • 自動的に提供されるデフォルトEDN Oracle WebLogic Server JMSトピックを使用します。

      • Oracle Enterprise Manager Fusion Middleware Controlで提供される、イベントからJMSトピックへのカスタム・マッピングを使用します。

    • 次のいずれかのAPIを使用して、リモートのOracle SOA Suite以外の参加者からイベントを公開およびサブスクライブします。

      • プレーンJMS API (J2SEクライアント環境用)

      • EDI API EdnJmsConnection (J2SEおよびJ2EEクライアント環境用)

  • エラー・ホスピタルでインスタンス・トラッキングおよびフォルト・リカバリをサポートします。詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』を参照してください。

  • MDSリポジトリのEDLファイルの記憶域。これにより、ファイルをOracle JDeveloperの「リソース」ウィンドウで参照できます。詳細は、「デザインタイムとの共有データの管理」を参照してください。

注意:

Oracle AQ JMSによるイベント配信ネットワーク(EDN)で大規模なペイロードを送信する際のメモリーの推奨サイズについては、「SOAコンポジット・アプリケーション用JVMメモリーのサイズ設定の推奨事項」を参照してください。

42.1.2 ビジネス・イベントAPIでのリモート・クライアントのサポート

Oracle SOA Suiteでイベントを公開およびサブスクライブするリモート・クライアントには、APIオプションがいくつかあります。表42-1に詳細を示します。

表42-1 リモートAPIオプション

オプション 説明 サポート メリット/デメリット

プレーンJMS API

EDN JMSトピックとの直接対話に使用します。これは通常、RAW JMSアクセスを使用するJ2SEクライアントです。

リモート・クライアントでは、SOAサーバーを指すようにJNDIプロパティを構成する必要があります。

  • Oracle WebLogic Server JMS

  • AQ JMS

このメリットは、次のとおりです。

  • 標準JMS APIをサポートします。つまり、多くのJMSソフトウェア・ツールを使用できます。

このデメリットは、次のとおりです。

  • サービス・レベルが低下します。

  • マッピングされたJMSやJNDIの構成を手動で探す必要があります。

  • 内部EDNイベント構造の処理、フィルタ変換、サブジェクト伝播、トランザクション、エラー処理など、追加のコーディングが必要です。

EDN API - EdnJmsConnection

Oracle Event ProcessingなどのJ2SEクライアント用です。このオプションには、標準の公開およびサブスクライブ・オプションがすべて用意されています。

リモート・クライアントでは次のタスクを実行する必要があります。

  • SOAサーバーを指すようにJNDIプロパティを構成します。

  • EDNヘルパー・メソッドfindRelevantBEConnFactoryを呼び出して、適切なコネクション・ファクトリを返します。これにより、JMSコネクションでイベントの公開およびサブスクライブが使用可能になります。

  • Oracle WebLogic Server JMS

  • AQ JMS

このメリットは、次のとおりです。

  • クライアントJNDIの構成またはJMSアダプタ・デプロイメントがありません。

  • JMSのマッピング、変換および翻訳を処理します。

このデメリットは、次のとおりです。

  • プレーンJMSコネクション・ファクトリおよびトピックをベースにしています。

JMSアダプタの詳細は、『テクノロジ・アダプタの理解』の「JMS用のOracle JCAアダプタ」を参照してください。

EDN APIの詳細は、を参照してください。

42.1.2.1 BusinessEvent.setProperty APIを呼び出す際のイベント配信ネットワーク・プロパティの手動設定に関するガイドライン

イベント配信ネットワーク(EDN)ビジネス・イベントを公開する場合、ほとんどのプロパティではBusinessEvent.setProperty(String name, Object value) APIを呼び出して手動設定することはできません。

42.1.2.1.1 手動で設定できないプロパティ

次のEDNビジネス・イベント・プロパティは設定しないでください。これらのプロパティの値は内部で設定され、EDNによって使用されます。

  • 一般プロパティ:

    • BusinessEvent.EVENT_ID ("id")

    • BusinessEvent.PARENT_ID ("parent-id")

    • BusinessEvent.PUBLISHED_TIME ("published-time")

    • BusinessEvent.OWNER ("owner")

    • BusinessEvent.SOURCE ("source")

    • BusinessEvent.MODE ("mode")

  • すべてのトラッキング・プロパティの例:

    • BusinessEvent.PROPERTY_ECID ("tracking.ecid")

    • BusinessEvent.PROPERTY_COMPOSITE_INSTANCE_ID ("tracking.compositeInstanceId")

    • BusinessEvent.PROPERTY_PARENT_COMPONENT_INSTANCE_ID ("tracking.parentComponentInstanceId")

    • BusinessEvent.PROPERTY_CONVERSATION_ID ("tracking.conversationId")

    • tracking.compositeInstanceCreatedTime"

42.1.2.1.2 手動で設定可能なプロパティ

次のプロパティを設定できます。

  • BusinessEvent.PRIORITY ("priority")

  • BusinessEvent.CONTEXT ("context")

42.1.3 ローカル・イベント接続およびリモート・イベント接続

1つのSOAコンポジット・アプリケーション・インスタンスは、1つのコンテナ内に配置することも、複数のコンテナにわたってクラスタ化することもできます。別のアプリケーション(Oracle Application Development Framework (ADF) Business Componentアプリケーションなど)を構成し、SOAコンポジット・アプリケーション・インスタンスと同じコンテナ内または異なるコンテナ内で実行できます。

ローカル・イベント接続またはリモート・イベント接続を通して、Java EEアプリケーションからイベントを発生させることができます。

  • ローカル・イベント接続

    パブリッシャがアプリケーションと同じOracle WebLogic Serverに存在し、パブリッシャがローカル・ビジネス・イベント・コネクション・ファクトリを使用する場合、イベントはローカル・イベント接続を通して発生します。

  • リモート・イベント接続

    コール元がアプリケーションと異なるコンテナ(異なるJVM)内に存在する場合、イベントはリモート・イベント接続を通して発生します。

別のアプリケーション(Oracle ADF Business Componentアプリケーションなど)を構成し、SOAコンポジット・アプリケーションと同じコンテナ内で実行すると、このアプリケーションはローカル・イベント接続を使用するように最適化されます。

42.2 Oracle JDeveloperでのビジネス・イベントの作成

この項では、ビジネス・イベントの作成方法およびサブスクライブ方法の高レベルな概要が提供されます。

42.2.1 ビジネス・イベントの作成方法

ビジネス・イベントを作成する手順は、次のとおりです。

  1. SOAプロジェクトを空のコンポジットとして作成します。

  2. 次の方法のいずれかにより、イベント定義の作成ウィザードを起動します。

    1. 「ファイル」メイン・メニューで、「新規」「イベント定義」を選択します。

    2. 「ファイル」メイン・メニューで、「新規」「アプリケーション」「SOA層」「サービス・コンポーネント」「イベント定義」を選択します。

    「イベント定義の作成」ダイアログが表示されます。

  3. 表42-2に記載されている詳細を入力します。

    表42-2 「イベント定義の作成」ダイアログのフィールドと値

    フィールド

    名前

    名前を入力するか、EventDefinitionnumberのデフォルト名をそのまま使用します。ここで入力した名前が「アプリケーション」ウィンドウの「EDLファイル名」になります。

    注意: イベント名としてスラッシュ(/)を入力しないでください。スラッシュを入力すると、名前が拡張子のみのイベント定義ファイル(.edn)が作成されます。

    ディレクトリ

    イベント定義ファイルを作成するディレクトリ・パスを表示します。

    ネームスペース

    デフォルトのネームスペースをそのまま使用するか、イベントを配置するネームスペースに対する値を入力します。これにより、サブスクライバは指定されたネームスペースのイベントを受信します。

  4. 「追加」アイコンをクリックして、イベントを追加します。

    「イベントの作成」ダイアログが表示されます。

  5. 「検索」アイコンをクリックしてペイロードを選択し、「OK」をクリックします。図42-1に詳細を示します。

    図42-1 ペイロードの選択

    図42-1の説明が続きます
    「図42-1 ペイロードの選択」の説明

    「イベントの作成」ダイアログに戻ります。

  6. 「名前」フィールドに、名前を入力します。

  7. 「OK」をクリックします。

    これで、追加されたイベントが「イベント」セクションに表示されます。図42-2に詳細を示します。

    図42-2 イベント定義の作成

    図42-2の説明が続きます
    「図42-2 イベント定義の作成」の説明
  8. エディタの上部にある、event_definition_name.edlの横のxアイコンをクリックして、エディタを閉じます。

  9. 変更を保存するように求められた場合は、「はい」をクリックします。変更を保存しないとイベントは作成されず、「イベント・チューザ」ウィンドウでは選択できません。

    ビジネス・イベントがMDSリポジトリに公開され、に戻ります。「リソース」ウィンドウに、ビジネス・イベントが表示され参照できます。

42.3 Oracle Mediatorサービス・コンポーネントからのビジネス・イベントのサブスクライブまたは公開

この項では、Oracle Mediatorサービス・コンポーネントからビジネス・イベントをサブスクライブまたは公開する方法について説明します。

42.3.1 ビジネス・イベントをサブスクライブする方法

ビジネス・イベントをサブスクライブするには:

  1. 「コンポーネント」ウィンドウからに、メディエータ・サービス・コンポーネントをドラッグします。このサービス・コンポーネントにより、ビジネス・イベントをサブスクライブできます。
  2. 「名前」フィールドに、名前を入力します。
  3. 「テンプレート」リストから、「イベントのサブスクライブ」を選択します。

    ダイアログがリフレッシュされ、イベント表が表示されます。

  4. 「追加」アイコンをクリックして、イベントを選択します。

    「イベント・チューザ」ダイアログが表示されます。

  5. 既存のイベントを選択するか、「追加」アイコンをクリックして新規イベントを作成し、「OK」をクリックします。

    「メディエータの作成」ダイアログが再び表示されます。

  6. ダイアログの残りのフィールドを完成します。表42-3に詳細を示します。

    表42-3 「メディエータの作成」ダイアログのイベント表

    要素 説明

    一貫性

    「一貫性」列内をクリックし、イベントに対する配信一貫性のレベルを選択します。

    • 唯一

      イベントは、それ自体のグローバル(つまりJTA)トランザクションのサブスクライバに配信されます。イベント処理が完了すると、そのトランザクション内でサブスクライバが行ったあらゆる変更がコミットされます。サブスクライバが失敗すると、トランザクションはロールバックされます。再試行可能例外で失敗したイベントは、リカバリのために「エラー・ホスピタル」に移動される(手動再試行の対象となる)前に、構成された回数だけ自動的に再試行されます。再試行不能な例外で失敗したイベントは、自動再試行せずに「エラー・ホスピタル」に移動され、リカバリできません。

    • 保証付き

      ローカルJMSトランザクションでサブスクライバにイベントを配信します。サブスクライバは、処理用にサブスクライバ自体のローカル・トランザクションの作成を選択できますが、他のイベント処理とは個別にコミットされます。「保証付き」一貫性レベルは、ローカル・トランザクションがグローバル・トランザクションのかわりに使用されるため、「唯一」よりも低品質のサービス・オプションです。再試行可能な例外で失敗したイベントは、リカバリ可能な「エラー・ホスピタル」に移動される(手動再試行の対象となる)前に、構成された回数が自動的に再試行されます。再試行不能な例外で失敗したイベントは、自動再試行せずに「エラー・ホスピタル」に移動され、リカバリできません。

      「エラー・ホスピタル」の詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のエラー・ホスピタルでのフォルトからのリカバリに関する項を参照してください。

    恒久

    恒久サブスクリプションでは、パブリッシャ、サブスクライバおよびフレームワークのライフ・サイクルの相違によるメッセージ・ロスを防ぎます。次のオプションを選択します。

    • はい: サブスクライバが実行中でない場合、イベントが保持されます。これはデフォルト選択です。

    • いいえ: サブスクライバが実行中でない場合、イベントが削除されます。

    パブリッシャとして実行

    セキュリティ公開オプションを選択します。

    • はい: サブスクライバにイベント・パブリッシャのセキュリティIDがあります。これはデフォルト選択です。

    • いいえ: サブスクライバにイベント・パブリッシャのセキュリティIDがありません。

    フィルタ

    イベントをフィルタリングするには、選択したイベントの「フィルタ」列をダブルクリックするか、またはイベントを選択して、表の上の「フィルタ」アイコン(最初のアイコン)をクリックします。これにより「式ビルダー」ダイアログが表示されます。このダイアログで、XPathフィルタ式を指定できます。フィルタ式では、サービスの起動前にメッセージのコンテンツ(ペイロードまたはヘッダー)が分析されるように指定します。たとえば、メッセージに顧客IDが含まれている場合のみサービスを起動することを指定するフィルタ式を適用できます。

    式のロジックが満たされると、イベントの配信が可能になります。

    フィルタの詳細は、「メッセージをフィルタリングする式の指定方法」を参照してください。

    図42-3は、「メディエータの作成」ダイアログを示しています。

    図42-3 「メディエータの作成」ダイアログ

    図42-3の説明が続きます
    「図42-3 「メディエータの作成」ダイアログ」の説明
  7. 「OK」をクリックします。

    図42-4に、イベント・サブスクリプションのためにOracle Mediatorが構成されたことを示す左側のアイコンを示します。

    図42-4 イベント・サブスクリプションの構成

    図42-4の説明が続きます
    「図42-4 イベント・サブスクリプションの構成」の説明

42.3.2 ビジネス・イベントを公開する方法

「ビジネス・イベントをサブスクライブする方法」でサブスクライブしたイベントを公開するための、2番目のOracle Mediatorを作成できます。ここには示されていませんが、イベントを公開するためのBPELコンポーネントも作成できます。

ビジネス・イベントを公開するには:

  1. 最初のOracle Mediatorがサブスクライブしたイベントを公開する、2番目のOracle Mediatorサービス・コンポーネントを作成します。
  2. 最初のOracle Mediatorサービス・コンポーネントに戻ります。
  3. 「ルーティング・ルール」セクションで、「追加」アイコンをクリックします。
  4. 「ターゲット・タイプ」ウィンドウでプロンプトが表示されたら、「サービス」をクリックします。
  5. 2番目のOracle Mediatorサービス・コンポーネントを選択します。
  6. 「ファイル」メイン・メニューから、「すべて保存」を選択します。

42.3.3 ビジネス・イベントの作成およびサブスクライブ時の処理内容

次の例のソース・コードに、Oracle Mediatorサービス・コンポーネントのサブスクライブするイベントに関する詳細を示します。

<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"
         durable="true" runAsRoles="$publisher"/>
</business-events>
</component>

この例では明示的に示されていませんが、イベントにおいてXPathフィルタを定義できます。次の例では、初期デポジットが50000を超える場合にのみ、イベントの配信が可能になります。

    <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>

42.3.4 ビジネス・イベント公開時の処理内容

次の例には、2つのOracle Mediatorサービス・コンポーネントが示されています。1つのサービス・コンポーネント(OrderPendingEvent)はイベントをサブスクライブし、もう1つのサービス・コンポーネント(PublishOrderPendingEvent)はイベントを公開します。

<component name="PublishOrderPendingEvent">
    <implementation.mediator src="PublishOrderPendingEvent.mplan"/>
    <business-events>
      <publishes xmlns:sub1="/oracle/fodemo/storefront/entities/events/edl/OrderEO"
 name="pub1:NewOrderSubmitted" persistent="true" priority="7"
 timeToLive="36000000"/> 
    </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"
          durable="true" runAsRoles="$publisher"/>
</business-events>
</component>

42.3.5 ビジネス・イベントのサブスクライブに関する必知事項

SOAコンポジット・アプリケーションのデフォルト・リビジョンのサブスクライバのみがビジネス・イベントを受信できます。たとえば、次の動作に注意してください。

ビジネス・イベントをサブスクライブするには:

  1. M1という最初のOracle Mediatorサービス・コンポーネントとM2という2番目のOracle Mediatorサービス・コンポーネントを含む、コンポジット・アプリケーションを作成します。M1はイベントを公開し、M2はイベントをサブスクライブします。出力はディレクトリに書き込まれます。
  2. コンポジット・アプリケーションをリビジョン1としてデプロイします。
  3. コンポジット・アプリケーションを変更して、M3という3番目のOracle Mediatorサービス・コンポーネントを追加します。M3は、同じイベントをサブスクライブし、別のディレクトリに出力を書き込みます。
  4. コンポジット・アプリケーションをリビジョン2(デフォルト)としてデプロイします。
  5. リビジョン2のコンポジット・アプリケーションを起動します。

    Oracle Mediator M2は、ディレクトリ内の1つのファイルに出力を書き込みます。Oracle Mediator M3は、予想どおりに、イベントを取得し、別のディレクトリに出力を正常に書き込みます。ただし、(リビジョン1の) Oracle Mediator M2は、コンポジット・アプリケーションのリビジョン2から公開されたイベントを取得しません。

42.3.6 SAFを使用するドメイン間でのイベント公開に関する必知事項

SAF (Store-and-Forward)を使用するドメイン間でイベントを公開する際、ローカル・サブスクライバはそのイベントをサブスクライブできません。たとえば、次のサブスクライバがあるとします。

  • ローカル・サブスクライバ(イベント・パブリッシャと同じドメインでデプロイ)

  • リモート・サブスクライバ(イベント・パブリッシャの外部のドメインにデプロイ)

いずれも、同じイベント(たとえばEという名前)をサブスクライブし、このイベントはSAFトピックをリスニングするよう構成されています。この環境では、リモート・サブスクライバのみがこのイベントをサブスクライブできます。ローカル・サブスクライバはこのイベントをサブスクライブできません。

EDNのJMSトピックは、インポート済SAFトピックとしてではなく、物理JMSトピックとしてプロビジョニングされる必要があります。これは、インポート済SAFトピックに、EDNではネイティブにサポートされていないコンテキスト参照およびセキュリティ・チェックの独自ルールがあるためです。

42.3.6.1 ローカル・サブスクライバの回避策

回避策として、次の手順を実行する必要があります。

  1. パブリッシャから特定可能なローカルJMSトピックを作成します。たとえば、イベント・パブリッシャから特定可能なローカル・ドメインAで、標準のOracle WebLogic Server JMSトピック(たとえば、Taという名前)をイベントの公開先、およびこのトピックをリスニングするサブスクライバ(ドメインAのローカル)にプロビジョニングします。

  2. リモート・サブスクライバから特定可能なリモート・ドメインBで、ドメインAのトピックTaにマッピングするインポート済SAFトピック(たとえば、safTbという名前)を作成し、リモート・サブスクライバがsafTbをリスニングするようにします。

手順2のかわりに、リモート・サブスクライバがリスニングするドメインBの別のJMSトピック(たとえば、Tbという名前)をプロビジョニングし、ソース・トピックTaと接続先トピックTbをブリッジするJMSブリッジを作成できます。

42.3.7 管理サーバー・アプリケーションでSOAサーバーにイベントを公開できるように外部JNDIプロバイダを構成する方法

この項では、公開側のアプリケーション(ADF EARファイルなど)がSOAサーバーではなく管理サーバーでデプロイされている場合に、外部JNDIプロバイダを構成する方法について説明します。

管理サーバー・アプリケーションでSOAサーバーにイベントを公開できるように外部JNDIプロバイダを構成する手順は、次のとおりです。

  1. Oracle WebLogic Server管理コンソールにログインします。
    http://host:port/console
    
  2. 「ドメイン構造」セクションで、「サービス」「外部JNDIプロバイダ」を展開します。
  3. 「ロックして編集」をクリックします。
  4. 「新規」をクリックします。
  5. 「名前」フィールドに名前(SOA_JNDIなど)を入力し、「次」をクリックします。
  6. 「AdminServer」チェック・ボックスを選択して、「終了」をクリックします。
  7. 「名前」列で、手順5で入力したプロバイダ名をクリックします。
  8. 表42-4に記載されている詳細を入力し、「保存」をクリックします。

    表42-4 構成の詳細

    フィールド 説明

    初期コンテキスト・ファクトリ

    weblogic.jndi.WLInitialContextFactoryと入力します。

    プロバイダURL

    t3://hostname:soa_server_portを入力します。

    ユーザー

    Oracle WebLogic Serverユーザー名を入力します。

    パスワードおよびパスワードの確認

    Oracle WebLogic Serverユーザー名のパスワードを入力します。

  9. 「リンク」「新規」をクリックします。
  10. 表42-5に記載されている詳細を入力し、「OK」をクリックします。

    表42-5 構成の詳細

    フィールド 説明

    名前

    SOA_EDNDataSourceを入力します。

    ローカル名

    jdbc/EDNDataSourceを入力します。

    リモート名

    jdbc/EDNDataSourceを入力します。

  11. 「新規」をクリックします。
  12. 表42-6に記載されている詳細を入力し、「OK」をクリックします。

    表42-6 構成の詳細

    フィールド 説明

    名前

    SOA_EDNLocalTxDataSourceを入力します。

    ローカル名

    jdbc/EDNLocalTxDataSourceを入力します。

    リモート名

    jdbc/EDNLocalTxDataSourceを入力します。

  13. 「OK」をクリックします。
  14. 「変更のアクティブ化」をクリックします。
  15. LinuxのFMW_Home/user_projects/domains/domain_name/bin/setDomainEnv.shファイル(または、Windowsの場合はsetDomainEnv.batファイル)を次のように変更します。
    WLS_JDBC_REMOTE_ENABLED="-Dweblogic.jdbc.remoteEnabled=true"
    
  16. サーバーを再起動します。

42.3.8 Oracle WebLogic Server JMSがJMSアダプタと同じローカルJVMで動作しているときのコネクション・ファクトリの構成方法

Oracle WebLogic Server JMSをローカルJVM (JMSアダプタと同じJVM)で実行している場合は、isTransactedコネクタ・ファクトリ・プロパティを正しく構成する必要があります。サーブレット・クライアント(動作するOracle WebLogic Server JMSサーバーとともにローカルにコロケートされる)では、次の手順を実行します。

  1. Oracle WebLogic Server管理コンソールにログインして、「デプロイメント」「JMSAdapter」「構成」「アウトバウンド接続プール」の順に選択します。
  2. グループおよびインスタンスを開き、「eis/wls/EDNLocalTxDurableTopic」「eis/wls/EDNLocalTxTopic」の両方を選択します。
  3. isTransactedfalseに設定します。
  4. 保存して、SOAサーバーを再起動します。

    詳細は、『テクノロジ・アダプタの理解』の同期/非同期リクエスト・リプライ相互作用パターンに関する項を参照してください。

42.4 BPELプロセス・サービス・コンポーネントからのビジネス・イベントのサブスクライブまたは公開

この項では、BPELプロセス・サービス・コンポーネントからビジネス・イベントをサブスクライブまたは公開する方法について説明します。

42.4.1 ビジネス・イベントをサブスクライブする方法

ビジネス・イベントをサブスクライブするには:

  1. 「コンポーネント」ウィンドウからに、BPELプロセス・サービス・コンポーネントをドラッグします。
  2. 「名前」フィールドに、名前を入力します。他のデフォルトの選択は変更せずに、「OK」をクリックします。

    BPELプロセス・サービス・コンポーネントが作成されます。

  3. BPELプロセス・サービス・コンポーネントをダブルクリックします。Oracle BPELデザイナが開きます。または、BPELプロセス・サービス・コンポーネントを右クリックして「編集」をクリックすることもできます。
  4. 「コンポーネント」ウィンドウからSOAコンポジット・エディタのreceiveInputアクティビティの下に、receiveアクティビティをドラッグします。

    注意:

    pickアクティビティのonMessageブランチは、EDNからイベントを受信するように設定することもできます。onMessageブランチの詳細は、「pickアクティビティのプロセスの待機または継続の選択」を参照してください。

  5. receiveアクティビティをダブルクリックします。「Receive」ダイアログが開きます。または、receiveアクティビティを右クリックして「編集」をクリックすることもできます。
  6. 「名前」フィールドに、名前を入力します。
  7. 「相互作用タイプ」リストから「イベント」を選択します。「Receive」ダイアログのレイアウトが変更されます。
  8. 「イベント」フィールドの右側にある「イベントの参照」アイコンをクリックします。図42-5に示すように、「サブスクライブ済イベント」ダイアログが表示されます。

    図42-5 「サブスクライブ済イベント」ダイアログ

    図42-5の説明が続きます
    「図42-5 「サブスクライブ済イベント」ダイアログ」の説明
  9. 「追加」アイコンをクリックして、イベントを選択します。

    図42-6に示すように、「イベント・チューザ」ダイアログが表示されます。

    図42-6 「イベント・チューザ」ダイアログ

    図42-6の説明が続きます
    「図42-6 「イベント・チューザ」ダイアログ」の説明
  10. 作成したイベントを選択し、「OK」をクリックします。

    「サブスクライブ済イベント」ダイアログが再び表示されます。

  11. イベントと一貫性がある配信のレベルを選択します。表42-7に詳細を示します。

    表42-7 「サブスクライブ済イベント」ダイアログのイベント表

    要素 説明

    一貫性

    「一貫性」列内をクリックし、イベントに対する配信一貫性のレベルを選択します。

    • 唯一

      イベントは、それ自体のグローバル(つまりJTA)トランザクションのサブスクライバに配信されます。イベント処理が完了すると、そのトランザクション内でサブスクライバが行ったあらゆる変更がコミットされます。サブスクライバが失敗すると、トランザクションはロールバックされます。再試行可能例外で失敗したイベントは、リカバリのために「エラー・ホスピタル」に移動される(手動再試行の対象となる)前に、構成された回数だけ自動的に再試行されます。再試行不能な例外で失敗したイベントは、自動再試行せずに「エラー・ホスピタル」に移動され、リカバリできません。

    • 保証付き

      ローカルJMSトランザクションでサブスクライバにイベントを配信します。サブスクライバは、処理用にサブスクライバ自体のローカル・トランザクションの作成を選択できますが、他のイベント処理とは個別にコミットされます。「保証付き」一貫性レベルは、ローカル・トランザクションがグローバル・トランザクションのかわりに使用されるため、「唯一」よりも低品質のサービス・オプションです。再試行可能な例外で失敗したイベントは、リカバリ可能な「エラー・ホスピタル」に移動される(手動再試行の対象となる)前に、構成された回数が自動的に再試行されます。再試行不能な例外で失敗したイベントは、自動再試行せずに「エラー・ホスピタル」に移動され、リカバリできません。

      「エラー・ホスピタル」の詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のエラー・ホスピタルでのフォルトからのリカバリに関する項を参照してください。

    恒久

    恒久サブスクリプションでは、パブリッシャ、サブスクライバおよびフレームワークのライフ・サイクルの相違によるメッセージ・ロスを防ぎます。次のオプションを選択します。

    • はい: サブスクライバが実行中でない場合、イベントが保持されます。これはデフォルト選択です。

    • いいえ: サブスクライバが実行中でない場合、イベントが削除されます。

    パブリッシャとして実行

    セキュリティ公開オプションを選択します。

    • はい: サブスクライバにイベント・パブリッシャのセキュリティIDがあります。これはデフォルト選択です。

    • いいえ: サブスクライバにイベント・パブリッシャのセキュリティIDがありません。

    フィルタ

    イベントをフィルタリングするには、選択したイベントの「フィルタ」列をダブルクリックするか、またはイベントを選択して、表の上の「フィルタ」アイコン(最初のアイコン)をクリックします。これにより「式ビルダー」ダイアログが表示されます。このダイアログで、XPathフィルタ式を指定できます。フィルタ式では、サービスの起動前にメッセージのコンテンツ(ペイロードまたはヘッダー)が分析されるように指定します。たとえば、メッセージに顧客IDが含まれている場合のみサービスを起動することを指定するフィルタ式を適用できます。

    式のロジックが満たされると、イベントの配信が可能になります。

    フィルタの詳細は、「メッセージをフィルタリングする式の指定方法」を参照してください。

  12. 「OK」をクリックして、「サブスクライブ済イベント」ダイアログを閉じます。

    「Receive」ダイアログが再び表示されます。

    注意:

    このreceiveアクティビティがBPELプロセス・サービス・コンポーネント・インスタンスを起動する起動receiveアクティビティの場合は、必要に応じて「インスタンスの作成」チェック・ボックスを選択できます。この操作によって、すべての起動に対して新しいBPELプロセス・サービス・コンポーネント・インスタンスを作成できます。

    この receive アクティビティが中間プロセスの receive アクティビティで、BPELインスタンスがすでに起動されている場合、この receive アクティビティは、そのBPELインスタンスの実行を続行するために、別のイベントを待機します。

  13. 「OK」をクリックします。

    図42-7に、イベント・サブスクリプション用に構成されたBPELプロセス・サービス・コンポーネントを示します。

    図42-7 イベント・サブスクリプション用のBPELプロセス・サービス・コンポーネントの構成

    図42-7の説明が続きます
    「図42-7 イベント・サブスクリプション用のBPELプロセス・サービス・コンポーネントの構成」の説明

42.4.2 ビジネス・イベントを公開する方法

ビジネス・イベントを公開するには:

  1. invokeアクティビティを「コンポーネント」ウィンドウから、SOAコンポジット・エディタのreceiveアクティビティ(「ビジネス・イベントをサブスクライブする方法」で作成)の下にドラッグします。
  2. invokeアクティビティをダブルクリックします。「Invoke」ダイアログが開きます。または、invokeアクティビティを右クリックして「編集」をクリックすることもできます。
  3. 「名前」フィールドに、名前を入力します。
  4. 「相互作用タイプ」リストから「イベント」を選択します。「Invoke」ダイアログのレイアウトが変更されます。
  5. 「イベント」フィールドの右側にある「イベントの参照」アイコンをクリックします。「イベント・チューザ」ダイアログが表示されます。
  6. 作成したイベントを選択し、「OK」をクリックします。

    「Invoke」ダイアログが再び表示されます。

  7. 「OK」をクリックします。

    図42-8は、イベントのサブスクリプションおよび公開用に構成されたBPELプロセス・サービス・コンポーネントを示します。左側にある丸囲みの青い稲妻は、イベントのサブスクリプションを示します。右側にある丸囲みの黄色い稲妻は、イベントの公開を示します。タイトル内の青い矢印をクリックすると、公開されたイベントのタイトルが表示されます。

    図42-8 イベント・サブスクリプションおよび公開用のBPELプロセス・サービス・コンポーネントの構成

    図42-8の説明が続きます
    「図42-8 イベント・サブスクリプションおよび公開用のBPELプロセス・サービス・コンポーネントの構成」の説明

42.4.3 ビジネス・イベントのサブスクライブおよび公開時の処理内容

次の例のソース・コードに、BPELプロセス・サービス・コンポーネントのサブスクライブおよび公開するイベントに関するcomposite.xmlソース変更の様子を示します。

<component name="EventBPELProcess">
   <implementation.bpel src="EventBPELProcess.bpel"/>
   <property name="configuration.monitorLocation" type="xs:string"
             many="false">EventBPELProcess.monitor</property>
   <business-events>
     <subscribe xmlns:sub1="http://mycompany.com/events/orders"
                name="sub1:OrderReceivedEvent" consistency="oneAndOnlyOne"
                durable="true" runAsRoles="$publisher"/>
     <publishes xmlns:pub1="http://mycompany.com/events/orders"
                name="pub1:ProductSoldAlert" persistent="true" priority="7"
                timeToLive="36000000"/>/>
   </business-events>
</component>

    <business-events>
      <publishes xmlns:sub1="/oracle/fodemo/storefront/entities/events/edl/OrderEO"
 name="pub1:NewOrderSubmitted" persistent="true" priority="7"
 timeToLive="36000000"/> 
    </business-events>
  </component>

この例では明示的に示されていませんが、イベントにおいてXPathフィルタを定義できます。フィルタは、通常、イベント・サブスクリプションにあります。subscribe要素によって、このサービス・コンポーネントがサブスクライブされる対象のイベントのタイプが制限され、filterセクションによってさらに、コンポーネントが関連する特定のコンテンツにイベントが制限されます。次の例では、初期デポジットが50000を超える場合にのみ、イベントの配信が可能になります。

    <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>

特別な属性のbpelx:eventNameを使用すると、receive、invoke、onMessageおよびonEvent (BPEL 2.0)などの標準BPELアクティビティが拡張されるため、BPELプロセス・サービス・コンポーネントでEDNイベント・バスからのイベントを受信できます。次の例に、eventName属性のスキーマを示します。

<xs:attribute name="eventName" type="xs:QName">
        <xs:annotation>
            <xs:appinfo>
                <tns:parent>
                    <bpel11:onMessage/>
                    <bpel11:receive/>
                    <bpel11:invoke/>
                </tns:parent>
            </xs:appinfo>
        </xs:annotation>
    </xs:attribute>

次の例に、BPELソース・ファイルでのeventName属性の使用方法を示します。

<receive name="OrderPendingEvent" createInstance="yes"
         bpelx:eventName="ns1:OrderReceivedEvent"/>
<invoke name="Invoke_1" bpelx:eventName="ns1:ProductSoldAlert"/>

bpelx:eventName属性をreceive、invoke、onMessageまたはonEvent (BPEL 2.0)の各アクティビティで使用した場合、partnerLinkoperationportType属性などの標準属性は存在しません。これは、bpelx:eventName属性の存在が、このアクティビティがEDNイベント・バスからのイベントの受信またはEDNイベント・バスへのイベントの公開のみを対象としていることを表しているためです。

BPELプロセス・サービス・コンポーネントのXSDファイルは若干変更され、partnerLinkoperationおよびportType属性は必須ではなくなりました。bpelx:eventName属性、またはpartnerLinkoperationおよびportType属性(どちらか一方)の存在については、Oracle JDeveloperで検証ロジックを実施されます。次の例は、BPELのreceiveアクティビティの変更されたスキーマ定義を示しています。

<complexType name="tReceive">
        <complexContent>
           <extension base="bpws:tExtensibleElements">
                <sequence>
                    <element name="correlations" type="bpws:tCorrelations" minOccurs="0"/>
                    <group ref="bpws:activity"/>
                </sequence>
                <!- BPEL mandatory attributes relaxed to optional for supporting BPEL-EDN ->
                <attribute name="partnerLink" type="NCName" use="optional"/>
                <attribute name="portType" type="QName" use="optional"/>
                <attribute name="operation" type="NCName" use="optional"/>
                <attribute name="variable" type="NCName" use="optional"/>
            </extension>
        </complexContent>
    </complexType>

invokeおよびonMessageアクティビティのスキーマ定義も同様に変更されています。

42.5 Oracle ADF Business Componentビジネス・イベントをOracle Mediatorに統合する方法

この項では、Oracle ADF Business Componentイベント条件をSOAコンポーネントに統合する方法に関する高レベルな概要が提供されます。SOAコンポーネントには、Oracle Mediatorサービス・コンポーネントとBPELプロセス・サービス・コンポーネントが含まれています。

Oracle ADF Business Componentのビジネス・イベントをSOAコンポーネントに統合する手順は、次のとおりです。

  1. ビジネス・コンポーネント・プロジェクトを作成します。
  2. ビジネス・イベント定義をプロジェクトに追加します。このアクションにより、EDLファイルおよびXSDファイルが生成されます。XSDファイルにはペイロードの定義が含まれます。また、作成時には、Oracle ADF Business Componentによってイベントが発生するように必ず指定します。

    Oracle ADF Business Componentのビジネス・イベントの作成および公開の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』を参照してください。

  3. SOAコンポジット・アプリケーションを作成し、EDLスキーマ・ファイルとXSDスキーマ・ファイルをSOAプロジェクトのルート・ディレクトリに手動でコピーします。次に例を示します。
    JDeveloper/mywork/SOA_application_name/SOA_project_name
    
  4. スキーマ・ファイルを、インポートに基づいて、EDLファイルからの適切な相対位置に格納します。
  5. 「ビジネス・イベントをサブスクライブする方法」の説明に従って、Oracle Mediatorサービス・コンポーネントを作成します。
  6. 「ビジネス・イベントをサブスクライブする方法」の説明に従って、「イベント・チューザ」ウィンドウでイベントのEDLファイルを選択します。
  7. Oracle Mediatorを起動するために、同じSOAコンポジット・アプリケーション内にBPELプロセス・サービス・コンポーネントを作成します。手順2で作成したBusiness Componentビジネス・イベントXSDのペイロードを選択していることを確認します。
  8. BPELプロセス・サービス・コンポーネントをダブルクリックします。
  9. emailアクティビティをBPELプロセス・サービス・コンポーネントにドラッグします。
  10. ビジネス・イベントXSDのペイロードを参照して、「件名」フィールドおよび「本文」フィールドに入力します。
  11. Oracle Mediatorサービス・コンポーネントに戻ります。
  12. BPELプロセス・サービス・コンポーネントまたは2番目のOracle Mediatorサービス・コンポーネントのように、イベントを公開する2番目のサービス・コンポーネントを設計します。

    これで、SOAコンポジット・アプリケーションの設計は完了です。