15 Oracle BAMエンタープライズ・メッセージ・ソースの作成

この章では、Oracle Business Activity Monitoring (Oracle BAM)でエンタープライズ・メッセージ・ソース(EMS)を作成して使用する方法について説明します。ここでは、EMS XMLフォーマット構成パラメータの使用方法、日時パターンやロケール情報の指定方法、EMSペイロードのエラー処理方法、リモート・プロバイダでホストされているJava Message Service (JMS)リソースの使用方法について説明します。

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

15.1 エンタープライズ・メッセージ・ソースの理解

エンタープライズ・メッセージ・ソース(EMS)は、Java Message Service (JMS)をOracle BAMサーバーに直接接続します。JMSは、アプリケーション・コンポーネント間でデータを受け渡し、異種およびレガシー環境間でのビジネス統合を可能にするための標準メッセージングAPIです。

EMSはExtract Transform and Load (ETL)シナリオを構成しませんが、メッセージからOracle BAMサーバーのデータ・オブジェクトに直接マップします。ただし、XML Stylesheet Language (XSL)を使用して両者の変換を実行することはできます。各EMSは特定のJMSトピックまたはキューに接続され、その情報はOracle BAMのデータ・オブジェクトに配信されます。Oracle BAMコンポーザの「管理者」ページを使用して、EMS定義を構成します。

デフォルトのJMSプロバイダは、Oracle WebLogic Serverのメッセージングです。Oracle Advanced Queuing (AQ) JMSがサポートされています。Tibco JMS (Oracle以外のプロバイダ)もサポートされています。

詳細は、「外部JMSプロバイダの使用」を参照してください。

次のメッセージ・タイプがサポートされています。

  • マップ・メッセージ

  • XMLペイロードを使用したテキスト・メッセージ

次のXMLフォーマット・オプションがテキスト・メッセージ・トランスフォーメーションでサポートされています。

  • 事前処理

  • メッセージ仕様

  • 列値(列値はXMLペイロードの要素または属性として提供できます)。

15.2 エンタープライズ・メッセージ・ソースの作成

各EMSは特定のJMSトピックまたはキューに接続され、その情報はOracle BAMのデータ・オブジェクトに配信されます。Oracle BAMコンポーザの「管理者」ページを使用して、EMS定義を構成します。

この項には次のトピックが含まれます:

15.2.1 エンタープライズ・メッセージ・ソースの作成準備

EMSを定義する前に、次のことを検討してください。

  • サード・パーティのJMSアプリケーションを使用している場合は、JMSアダプタを構成してメッセージ・ソース接続の詳細を指定する必要があります。Oracle BAMでは、JMSアダプタを使用して接続します。詳細は、「外部JMSプロバイダの使用」を参照してください。

  • Oracle WebLogic Server以外のJMSサーバー(Tibcoなど)を使用する場合は、作成するどのエンタープライズ・メッセージ・ソースでも永続サブスクリプション名を繰り返さないでください。一部のJMSサーバーでは、クライアントが1つのトピック宛先に複数のConnectionFactoryを持つことはできないため、Oracle BAMが同じトピックに対して同じConnectionFactoryを再利用することはサポートされていません。

  • (キューおよびトピックをホストしている) JMSサーバーは、Oracle BAMサーバーをホストしているシステムとは別のシステムで構成可能です(Oracle Advanced Queuing (AQ)の場合は、データベースでJMSサーバーをホストするためOracle BAMと同じサーバーでホストできますが、他の場合は別のシステムでJMSサーバーをホストすることをお薦めします)。

  • 同じトピックまたはキューに2つのエンタープライズ・メッセージ・ソースを構成しないでください。同じキューで2つのエンタープライズ・メッセージ・ソースを要求した場合には、各EMSに別々の「メッセージ・セレクタ」値を指定する必要があります。そうしないと、両方のエンタープライズ・メッセージ・ソースでメッセージが重複するためです。

  • いつでも、1つのEMSで複数のデータ・オブジェクトを更新しないようにすることをお薦めします。それにより、同じデータ・オブジェクトに複数の手段で書き込んだ結果として発生する不一致を回避するとともに、イベントの順序を保持できます。

    ソース・イベントが複数のソースから公開されている場合であっても、それらはすべて、そのデータ・オブジェクト用の同じメッセージ・セレクタ(必要な場合)で同じJMSトピックまたはキューに書き込むことができます。

  • EMSを定義する場合は、受信するメッセージ内のすべてのフィールドを指定します。可変数のユーザー定義フィールドを持つメッセージ・システムもあれば、固定数のフィールドを持つシステムもあります。

    任意の文字列タイプ・フィールドに対して、そのフィールドにフォーマットを適用し、フィールドの内容を分離された個別のフィールドに分けることができます。これは、ユーザー定義のフィールドを作成できないため、メッセージ本文全体が1つの大きなフィールドとして受信されるメッセージ・システムで役立ちます。フォーマット仕様を使用すると、XMLツリー内の場所のパスを指定した後、属性またはタグをフィールドとして抽出できます。

  • 大きいXMLドキュメントの場合には、パフォーマンスに対する通常のXSLT処理の影響が適用されます。このため、可能な場合は、BAMの消費に対してバインドされているJMSキューに移入する前に、ソースでデータ変換を行うことをお薦めします。

  • EMSの分散JMSキューを単一のトランザクションとしてデータ・オブジェクトに書き込むには、キューに関連するアウトバウンド接続JNDIの接続ファクトリ値がXAに対応している必要があります(weblogic.jms.XAConnectionFactory)。これにより、JMSセッションがJTAトランザクションに自動的に登録されます。BAMではXAデータ・ソースがすでに使用されているため、XAトランザクションでJMSおよび永続性APIがシームレスに参加します。

    JMSメッセージは、配信後にデキューされます。トランザクションがコミットされた場合、データベースの変更がコミットされ、JMSメッセージはキューから削除されます。ロールバックが発生すると、メッセージは再試行するためにキューに戻されます。

15.2.2 エンタープライズ・メッセージ・ソースの作成: ステップ

EMSを作成するには:

  1. 「管理者」ページに移動します。
  2. 「エンタープライズ・メッセージ・ソース」をクリックするか、「エンタープライズ・メッセージ・ソース」を右クリックして「作成」メニュー・アイテムを選択します。

    「エンタープライズ・メッセージ・ソース」ダイアログが表示されます。

  3. 「名前」を入力し、オプションで「表示名」を編集します。

    「名前」は、大/小文字が区別され、文字で始まる必要があり、文字、数字およびアンダースコア文字のみを含めることができます。最大128文字を使用できます。EMSの作成後は変更できません。

    「表示名」は、大/小文字が区別され、フォルダ・パスを示すスラッシュ(/)を除く任意の文字を含めることができます。最大128文字を使用できます。いつでも変更できます。

  4. 「作成」をクリックします。

    EMSが新しいタブで開きます。

  5. 次の「接続情報」設定を指定します。
    • アウトバウンド接続JNDI — JMSアダプタを使用して作成されたJMS接続ファクトリのJNDI名を入力します。デフォルトはeis/bam/wls/Queueです。

      永続サブスクライバの場合は、アウトバウンド接続JNDIのFactoryPropertiesにClientIDが必要です。eis/bam/wls/DurableTopicを使用するか、そのプロパティを確認できます。

      アウトバウンド接続JNDIの作成方法は、「アウトバウンド接続JNDIの作成」を参照してください。

    • トピック/キュー名 — JMSトピックまたはキューのJNDI名を入力します。デフォルトはjms/demoQueueです。

    • 永続サブスクライバ名 — BAMFilteredSubscriptionなどの、サブスクライバの名前を入力します。永続サブスクライバ名は、イベント・パブリッシャのサブスクライバ名プロパティ(指定されている場合)と一致する必要があります。

      永続サブスクリプションを使用すると、サブスクライバがアクティブでない間にトピックについてパブリッシュされたメッセージを保持できます。これによって、Oracle BAMをJMSプロバイダから一定期間切断した状態にし、後でそのプロバイダに再接続して、切断していた期間中にパブリッシュされたメッセージを処理できます。

    • 自動起動 — Oracle BAMサーバーの起動または再起動と同時に、EMSがメッセージの読取りとデータ・オブジェクトへの送信を開始するように指定するには、「はい」を選択します。デフォルト値はNo

      ノート:

      サーバーが起動すると、EMSのステータスを監視するEmsStatusと呼ばれるシステム生成のデータ・オブジェクトが自動的に作成されます。このデータ・オブジェクトは削除しないことをお薦めします。
  6. 次の「メッセージ構成」設定を指定します。
    • ソース値の書式設定: 日時指定の使用: 「日時仕様の構成」を参照してください。

    • エラー処理「EMSエラー処理の構成」を参照してください。

    • JMSメッセージ・タイプ — 「テキスト・メッセージ」または「マップ・メッセージ」を選択します。

      「テキスト・メッセージ」では、ペイロード・コンテンツはXML形式になり、「XMLメッセージ書式設定」設定を指定する必要があります。

    • メッセージ・セレクタ — -単一の名前/値のペアを入力し、アプリケーション固有の基準を使用して、かわりにJMSプロバイダで選択、フィルタまたはメッセージを実行します。このパラメータを設定すると、アプリケーションが定義したメッセージ・プロパティ値は、メッセージ受信用に指定された基準に一致する必要があります。メッセージ・プロパティ値を設定するには、MessageインタフェースのstringProperty()メソッドを使用します。

      名前/値のペアの書式は、name='value'(message='mymessage'など)にする必要があります。等価符号(=)は、名前/値ペアのセパレータです。現在サポートされている名前/値ペアは1つのみです。

    • パラレル・メッセージ処理にスレッド・プールを使用 — このボックスを選択すると、複数のメッセージを一度に処理できるため、パフォーマンスが向上します。

  7. 「JMSメッセージ・タイプ」が「テキスト・メッセージ」の場合は、次の「XMLメッセージ書式設定」設定を指定します。
    • メッセージ要素名 — サブ要素または属性に列値を含む親要素を入力します。

    • メッセージ要素ネームスペース — メッセージを修飾するには、オプションで、メッセージ要素のネームスペースURIを入力します。このネームスペースを含むメッセージの要素のみが保持されます。

    • バッチ・メッセージ — 単一のJMSメッセージで複数のメッセージをバッチ処理する場合にこのボックスを選択します。「バッチ要素名」にラッパー要素を指定します。バッチ処理されたメッセージを修飾するには、必要に応じて、ネームスペースURIを「バッチ要素ネームスペース」に指定します。

    • XSL書式設定: 事前処理を使用: このボックスを選択すると、メッセージの取得および列のマッピングの前に、受信したテキスト・メッセージにXSL変換が適用されます。「拡張XMLフォーマットの使用」を参照してください。

    • XML列値 — 「要素タグ」または「属性」を選択します。XMLペイロードの要素または属性を使用して、列値を指定できます。

  8. 次の「ソースからデータ・オブジェクト・フィールドへのマッピング」設定を指定します。
    • 自己記述ペイロードの使用 — このボックスは、EMSペイロードにデータ・オブジェクト・フィールドのマッピング情報が含まれる場合に選択します。

      自己記述ペイロードでは、ルート要素の属性としてdataObjectNameoperationTypeおよびkeysを指定する必要があります。挿入操作の場合、キーはオプションです。複数のキーをカンマで区切って指定します。たとえば:

      <msgRoot dataObjectName="DATADO" operationType="insert" keys="region">
        <region>N100</region>
        <state>DF</state>
        <sales>665</sales>
      </msgRoot>
      
    • 永続性ペイロードの使用 — このボックスは、EMSペイロードにデータ・オブジェクト・フィールドのマッピング情報が含まれない場合に選択します。

      永続性ペイロードはDataObjectOperations XSDに準拠し、EMSはペイロードでXML解析を実行しません。各ペイロードは、処理するためにBAMの永続性に直接渡されます。つまり、ペイロードでは、データ・オブジェクトのセットに対して、どの操作の組合せでも許可されます(挿入、更新、アップサート、削除など)。このため、その複数のデータ・オブジェクトのセットは一度にすべて更新されます。

      ノート:

      「ペイロードの永続性」オプションを使用すると、「日時仕様」および「XMLメッセージ書式設定」プロパティは適用できません。
    • データ・オブジェクト名 — 名前を入力するか、「参照」をクリックして、データ・オブジェクトを選択します。

    • 操作 — 「挿入」、「アップサート」、「更新」または「削除」を選択します。

    • キー — フィールドがキーの場合にこのボックスを選択します。

    • タグ/属性名 — 対応する「データ・オブジェクト・フィールド」にソース・タグまたは属性名を入力します。

  9. 「保存」をクリックします。

    EMSを保存すると、「編集」「開始」「停止」「メトリック」および「EMSのコピー」のボタンが表示され、EMS設定を編集できなくなります。詳細は、「エンタープライズ・メッセージ・ソースの使用」を参照してください。

15.2.3 日時仕様の構成

日時パターンを入力して、ロケール情報を指定できます。

EMSペイロードにタイムスタンプ・フィールドを含める場合は、次のことを考慮してください。

  • タイムスタンプ・フィールドにnullを挿入すると、EMSのようなクライアントで管理されなくなる可能性があります。

  • (Oracle BAMのように)タイムスタンプ・フィールドに値を指定しない場合、EMSは現在の日時を割り当てます。

  • 受信タイムスタンプ値がxsd:dateTimeまたはEMSで指定された日時書式に従っていない場合は、現在の日時が挿入されます。

日時仕様の使用が無効な(選択されていない)場合、入力値の書式はxsd:dateFormatである必要があります。つまり、「日時仕様」が構成されていない場合は、xsd:dateFormat([-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm])がデフォルト書式です。

次に、xsd:dateTimeの有効な値パターンの例を示します。

  • 2001-10-26T21:32:52

  • 2001-10-26T21:32:52+02:00

  • 2001-10-26T19:32:52Z

  • 2001-10-26T19:32:52+00:00

  • -2001-10-26T21:32:52

  • 2001-10-26T21:32:52.12679

日時仕様を構成するには:

  1. 作成中または編集中のEMSで、日時仕様の使用を選択します。

    デフォルトの書式を示す日時書式リンク<MM/dd/yyyy HH:mm:ss.SSS>が表示されます。

  2. 日時書式リンクをクリックします。

    「日時指定」ダイアログが表示されます。

  3. 「パターン」ドロップダウン・リストから日時パターンを選択するか、パターンを入力します。

    Java SimpleDateFormatに準拠した有効な日時パターンを入力する必要があります。表15-1でSimpleDateFormatの構文要素を示し、表15-2でいくつか例を示します。

    HH:mm:ss日時書式を明示的に選択すると、日付のデフォルト値1/1/1970が挿入され、EMSが日付値を無視します。

    日時書式として日付のみを明示的に選択した(時、分および秒を選択しない)場合、日付は、時、分および秒が12:00:00 AMに設定されて挿入されます。EMSは時間値を無視します。

  4. 必要に応じて、ロケール情報を入力します。
    • 言語 — 小文字2文字のISO-639コード(enfrdeitなど)を入力します。

    • — 大文字2文字のISO-3166コード(CNTWFRDEなど)を入力します。

    • 変数 — ベンダーまたはブラウザ固有のコードを入力します。たとえば、WindowsにはWIN、MacintoshにはMACを使用します。2つの変数がある場合は、アンダースコアで区切り、最も重要な変数を最初に記述します。たとえば、スペイン語(スペイン - トラディショナル)の照合の場合、ロケールの言語、国、バリアントのパラメータはes, ES, Traditional_WINとなります。

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

表15-1 SimpleDateFormatの構文要素

記号 意味 プレゼンテーション

G

Era

テキスト

AD

y

Year

数値

2003

M

Month

テキストまたは数値

July、Jul、07

w

年内の週数(1から53)

数値

27

W

月内の週数(1から5)

数値

2

D

年内の日数(1から365または1から364)

数値

189

d

月内の日数

数値

10

F

月内の週数(1から5)

数値

2

E

曜日

テキスト

Tuesday、Tue

a

午前/午後マーカー

テキスト

AM

H

時間(0から23)

数値

0

k

時間(1から24)

数値

24

K

時間(0から11、AM/PM)

数値

0

h

時間(1から12、AM/PM)

数値

12

m

時間内の分数

数値

30

s

分内の秒数

数値

55

[S]

ミリ秒(0から999)

数値

978

z

タイムゾーン

一般的なタイムゾーン

太平洋標準時、PST、GMT-08:00

Z

タイムゾーン

RFC 822タイムゾーン

-0800

'

テキストのエスケープ

デリミタ

MMM ''01 -> Jul '01

表15-2の例は、日時パターンが米国のロケールでどのように解釈されるかを示しています。すべての例で使用されている日時は、アメリカ太平洋標準時タイムゾーンの2001-07-04 12:08:56ローカル時間です。

表15-2 日時パターンの例

日時パターン 結果

"yyyy.MM.dd G 'at' HH:mm:ss z"

2001.07.04 AD at 12:08:56 PDT

"EEE, MMM d, '' yy"

Wed, Jul 4, '01

"h:mm a"

12:08 PM

"hh 'o''clock' a, zzzz"

12 o'clock PM, 太平洋夏時間

"K:mm a, z"

0:08 PM, PDT

"yyyyy.MMMMM.dd GGG hh:mm aaa"

02001.July.04 AD 12:08 PM

"EEE, d MMM yyyy HH:mm:ss Z"

Wed, 4 Jul 2001 12:08:56 -0700

"yyMMddHHmmssZ"

010704120856-0700

"yyyy-MM-dd'T'HH:mm:ss.SSSZ"

2001-07-04T12:08:56.235-0700

15.2.3.1 Oracle AQ JMS日時の考慮事項

Oracle AQ JMSを介して日時データをOracle BAM EMSに送信する場合は、日時仕様を構成するときに次のことを考慮する必要があります。

Oracleデータベース内のデフォルトの日時書式は、NLSセッション・パラメータNLS_DATE_FORMATNLS_TIMESTAMP_FORMATおよびNLS_TIMESTAMP_TZ_FORMATを使用して明示的に、またはNLSセッション・パラメータNLS_TERRITORYを使用して暗黙的に指定されます。

トリガー処理コード(PL/SQL)が明示的な書式で日付書式をオーバーライドしない場合、日付はデータベース・セッションのNLSパラメータで指定された書式に従って書式設定され、それに応じてEMSに送信されます。つまり、受信データを解析および解釈するために、EMS日時仕様はNLSパラメータに相当する書式を必要とします。

ただし、データベース管理者がNLSパラメータを変更した場合、EMS側で問題が発生します。デフォルトのNLSパラメータで指定された書式に依存するのではなく、to_char()関数を使用して明示的な書式設定を使用するのが常に安全な方法です。

トリガー処理コードの次の例のような行を

'<HIREDATE>' || :new.HIREDATE || '</HIREDATE>' ||

次のように変更する必要があります。

'<HIREDATE>' || to_char(:new.HIREDATE, 'MM/dd/yy HH24:MI:SS') || '</HIREDATE>' ||

EMS日時仕様ドロップダウン・リストから選択された、対応する書式はMM/dd/yy H:mm:ssです。

同様に、タイムスタンプ・データの場合、to_char()関数を使用してデータベース側で選択された書式はMM/dd/yy HH24:MI:SS.FFです。対応するEMS日時仕様の書式はMM/dd/yy H:mm:ss:SSSです。

15.2.4 拡張XMLフォーマットの使用

拡張フォーマット・オプションを使用すると、EMSでは、メッセージ内のフォーマットされた各フィールドにユーザーが指定したXSLトランスフォーメーション(XSLT)を含めることができます。

XSLTは、次の目的で使用されます。

  • 階層データの処理。データ・フローでは、階層データは処理されません。XSLTでは、受信したXMLを、繰返しフィールドが含まれた単一のレコードにフラット化できます。

  • 単一のキュー内に複数のタイプのメッセージが含まれているメッセージ・キューの処理。データ・フローでは、Message Receiverからのすべてのレコードは同じスキーマのものである必要があります。EMS出力は、受信するメッセージ・スキーマの結合スーパーセットとして定義できます。また、XSLトランスフォーメーションによって、各メッセージ・タイプを識別して、必要に応じてこのスーパーセット・スキーマにマップできます。

  • データは階層では表されていないが、必要なデータが複数のレベルで含まれているXMLの処理。EMSフォーマットでは、XMLの1つのレベルのみから読取りを行うことができます。XSLトランスフォーメーションによって、入力XML内の様々なレベルで必要なデータを識別し、すべてのデータが1つのレベルで結合される新しいXMLにすべてを出力できます。

XSLトランスフォーメーションを指定するには:

  1. 作成中または編集中のEMSで、「XSL書式設定: 事前処理を使用」を選択します。
  2. 「拡張フォーマット・オプション」をクリックします。

    「XSL変換」ダイアログが開きます。

  3. XSL変換コードの入力フィールドに変換のXSLマークアップを入力するか貼り付けます。別の編集ツールでXSLマークアップを記述し、このダイアログ・ボックスにそのコードをコピーして貼り付けることができます。
  4. 「変換するサンプルXML」フィールドに、変換をテストするためのサンプルXMLを入力します。サンプルXMLは、このダイアログには保存されず、このダイアログを閉じて開くと、サンプルXMLは表示されなくなります。
  5. 「XSL構文の確認」をクリックしてXSL構文を確認します。
  6. 「サンプルXMLのテスト変換」をクリックして変換をテストします。

    XSL構文のエラー、サンプルのXML構文または変換を含む結果が「結果」フィールドに表示されます。

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

15.2.5 EMSエラー処理の構成

「エラー処理」設定を構成して、EMSペイロード・エラーの処理方法を指定します。EMSペイロードにおけるエラーの処理方法は、ログ・ファイルにエラー・メッセージを書き込むか、エラー・メッセージをデータ・オブジェクトに挿入するか、またはJMSトピックやJMSキューにエラー・メッセージをパブリッシュするという方法で構成できます。

エラー処理は、ロールバックの発生した後およびすべてのJMSメッセージの再試行が失敗した後に発生します。

フォルト処理を構成するには:

  1. 作成中または編集中のEMSで、「フォルト・メッセージをログ」を選択して、エラー・メッセージを送信するか、「フォルト・メッセージを書込み」を選択して、エラー・メッセージをOracle BAMデータ・オブジェクトまたはJMSトピックに書き込みます。

    フォルト・メッセージのログと書込みのオプションを両方選択できます。

  2. 「フォルト・メッセージをログ」を選択した場合は、「ペイロードを含める」を選択して、エラー・メッセージのあるペイロードをログに含めることができます。
  3. 「フォルト・メッセージを書込み」を選択した場合、メッセージをデータ・オブジェクトに挿入するには「データ・オブジェクトへ」を選択し、メッセージをJMSに書き込むには「JMSキュー/トピックへ」を選択します。その後、表15-3を使用して、選択したオプションに対して追加情報を指定します。

表15-3 「フォルト・メッセージを書込み」オプションのパラメータ

オプション パラメータ 説明

データ・オブジェクトへ

エラー・データ・オブジェクト

エラー・メッセージを書き込むデータ・オブジェクト名。

データ・オブジェクトへ

データ・オブジェクト・フィールド

エラー・メッセージを書き込むデータ・オブジェクト内のフィールド。最長のエラー・ペイロードに対応できる十分な長さの文字列フィールドを選択してください。

JMSキュー/トピックへ

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

特定のJMSコネクション・ファクトリまたは宛先の検索に使用される、初期コンテキスト・ファクトリ。たとえば:

weblogic.jndi.WLInitialContextFactory

JMSキュー/トピックへ

JNDIサービス・プロバイダURL

使用するサービス・プロバイダの構成情報。javax.naming.Context.PROVIDER_URLプロパティを設定するために使用され、initialContext()に対する引数として渡されます。不適切なプロバイダのURLが最も一般的なエラーの原因です。たとえば:

t3://localhost:7001

JMSキュー/トピックへ

トピック/キュー接続ファクトリ

以前に作成されたJMSコネクション・ファクトリのJNDIルックアップで使用される名前。たとえば:

jms/QueueConnectionFactory

JMSキュー/トピックへ

トピック/キュー名

エラー・メッセージをポストする場合に使用するトピック/キュー。たとえば:

jms/demoQueue

jms/demoTopic

JMSキュー/トピックへ

JNDIユーザー名

JNDIサービス呼出し元を認証する本人の本人証明。このユーザーにはRMIログイン許可が必要です。

JMSキュー/トピックへ

JNDIパスワード

JNDIサービス呼出し元を認証する本人の本人証明。

JMSキュー/トピックへ

JMSユーザー名(オプション)

JMSパスワード(オプション)

コネクション・ファクトリで新しいJMSコネクションが作成されたときに、この情報をオプションとして提供できます。アプリケーション管理またはコンテナ管理された認証用JMSプロバイダへの接続を認証するために使用します。

次の例は、パブリッシュされたメッセージのフォーマットを示しています。

EMS <<EMS Name>> failed to process the payload: <<payload>> with the following exception:
<<Exception details>>.

たとえば:

EMS MyInsertEMS, failed to process the payload: <testems><test>abcd</test1> 
with the following exception:
The end-tag for element type "test" must end with a '>' delimiter.

JMSトピックまたはJMSキューにエラー・メッセージをパブリッシュする場合のフォルト処理を設計するときは、注意してください。次に、このトピックまたはキューが別の(または同じ)EMSに対して構成される場合、このEMSに同じメッセージが再度使用され、これにより、再帰的な失敗が発生します。Oracle BAMでは、CDATAを使用してメッセージをエンコードすることによってメッセージを処理しますが、再帰的な失敗が発生する可能性のあるSQL例外などの、他の問題が発生する場合があります。

15.3 エンタープライズ・メッセージ・ソースの使用

EMS属性は、組織のニーズに合わせて変更できます。

この項には次のトピックが含まれます:

15.3.1 エンタープライズ・メッセージ・ソースの編集

EMSを編集するには:

  1. 「管理者」ページに移動します。
  2. 左側のナビゲーション・ペインで、「エンタープライズ・メッセージ・ソース」の左側の矢印をクリックします。

    現在のプロジェクトのすべてのEMSがリストに表示されます。

  3. EMS名をクリックするか、EMS名を右クリックして「編集」メニュー・アイテムを選択します。

    EMSが新しいタブで開きます。

  4. 以前にEMSを保存している場合は、「編集」ボタンをクリックして設定を編集可能にします。
  5. 必要な変更を加え、「保存」をクリックします。
  6. EMSタブの「X」をクリックして閉じます。

15.3.2 エンタープライズ・メッセージ・ソースの開始と停止

EMSを開くには、「エンタープライズ・メッセージ・ソースの編集」を参照してください。

EMS定義タブの「開始」および「停止」ボタンを使用して、EMSを開始および停止します。停止済ステータスでは、コンシューマは非アクティブです。

EMSを開始するとサブスクライブされ、EMSを停止するとサブスクライブ解除されます。

デフォルトで、EMSはOracle BAMサーバーの起動時に開始されます。

「編集」をクリックして、「自動起動」の設定を変更します。

ノート:

EMSの「自動起動」のデフォルト値は「いいえ」です。

次のように、bamcommandを使用してEMSを開始および停止することもできます。

bamcommand -cmd start -name <ems_name> -type ems

bamcommand -cmd stop -name <ems_name> -type ems

15.3.3 エンタープライズ・メッセージ・ソース・メトリックの監視

EMSを開くには、「エンタープライズ・メッセージ・ソースの編集」を参照してください。

EMS定義タブにある「メトリック」ボタンを使用して、選択したEMS統計を監視します。「メトリック」ダイアログに、「サーバー名」「送信メッセージ」「持続したメッセージ」および「失われたメッセージ」カウンタが表示されます。これらの値は、最後の開始時またはリセット時から累積されます。

「サーバー名」は、EMSが現在実行中のサーバーの名前を示します。これにより、クラスタ環境でEMSが実行中のノードの識別が容易になります。

「失われたメッセージ」は「送信メッセージ」から「持続したメッセージ」を引いて計算されます。

これらの最新のカウンタ値を表示するには、「リフレッシュ」をクリックします。

カウンタ値を0(ゼロ)に設定するには、「リセット」をクリックします。

ノート:

スループット向上のために「メトリック」のデータを使用しない場合は、サーバーの起動時にJVMの引数を-Dems.metrics.required=falseに設定できます。フラグを指定すると、「メトリック」にメッセージ件数は表示されなくなります。状態が保持されないため、パフォーマンスの向上を見込めます。

15.3.4 エンタープライズ・メッセージ・ソースのコピー

EMSをコピーするには:

  1. 「管理者」ページに移動します。
  2. 左側のナビゲーション・ペインで、「エンタープライズ・メッセージ・ソース」の左側の矢印をクリックします。

    現在のプロジェクトのすべてのEMSがリストに表示されます。

  3. EMS名をクリックするか、EMS名を右クリックして「編集」メニュー・アイテムを選択します。

    EMSが新しいタブで開きます。

  4. 「EMSのコピー」をクリックします。

    「EMSのコピー」ダイアログが表示されます。

  5. 「名前」および「表示名」を入力します。

    「名前」は、大/小文字が区別され、文字で始まる必要があり、文字、数字およびアンダースコア文字のみを含めることができます。最大128文字を使用できます。EMSの作成後は変更できません。

    「表示名」は、大/小文字が区別され、フォルダ・パスを示すスラッシュ(/)を除く任意の文字を含めることができます。最大128文字を使用できます。いつでも変更できます。

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

    EMSのコピーが新しいタブで開きます。

  7. 「エンタープライズ・メッセージ・ソースの作成: ステップ」のステップ5以降のステップに従います。

15.3.5 エンタープライズ・メッセージ・ソースの保護

EMSのセキュリティ設定を変更するには:

  1. 「管理者」ページに移動します。

  2. 左側のナビゲーション・ペインで、「エンタープライズ・メッセージ・ソース」の左側の矢印をクリックします。

    現在のプロジェクトのすべてのEMSがリストに表示されます。

  3. EMSを右クリックし、ポップアップ・メニューから「セキュリティ」を選択します。

    EMSのセキュリティ・タブが開きます。

  4. 明示的に権限を付与または拒否するロールまたはグループを追加するには、次のステップを実行します。

    1. 「権限の付与」表または「権限の拒否」表で「追加」アイコンをクリックします。

      「アプリケーション・ロール、グループおよびユーザーの追加」ダイアログが開きます。

      ユーザーをロールおよびグループに追加する方法の詳細は、「Oracle BAMユーザーの管理」を参照してください。

    2. 追加するロールまたはグループの名前を「名前」に入力します。

    3. ドロップダウン・リストから「アプリケーション・ロール」または「グループ」を選択します。

    4. 「検索」をクリックして、「選択可能メンバー」リストにデータを移入します。

    5. 「選択済メンバー」リストにメンバーを追加するには、メンバーを選択し、一重の右矢印をクリックします。

    6. 「選択済メンバー」リストにすべてのメンバーを追加するには、メンバーを選択し、二重の右矢印をクリックします。

    7. 「選択済メンバー」リストからメンバーを削除するには、一重および二重の左矢印を使用します。

    8. 「選択済メンバー」リストが完成したら、「OK」をクリックします。

      「アプリケーション・ロール、グループおよびユーザーの追加」ダイアログが閉じ、「名前」に指定した名前が表に表示されます。

  5. ロールまたはグループを削除するには、表の行を選択し、「削除」アイコンをクリックします。

  6. 権限を付与するには、「権限の付与」表にリストされているユーザー、ロールおよびグループに対し、「読取り」「書込み」「削除」または「セキュリティ」を選択します。

  7. 権限を拒否するには、「権限の拒否」表にリストされているユーザー、ロールおよびグループに対し、「読取り」「書込み」「削除」または「セキュリティ」を選択します。

  8. 「保存」をクリックします。

15.3.6 エンタープライズ・メッセージ・ソースの削除

EMSは削除する前に停止する必要があります。「エンタープライズ・メッセージ・ソースの開始と停止」を参照してください。

EMSを削除するには:

  1. 「管理者」ページに移動します。
  2. 左側のナビゲーション・ペインで、「エンタープライズ・メッセージ・ソース」の左側の矢印をクリックします。

    現在のプロジェクトのすべてのEMSがリストに表示されます。

  3. EMSアイコンをクリックして「削除」アイコンをクリックするか、EMS名を右クリックして「削除」メニュー・アイテムを選択します。

    EMSの削除を確認するダイアログが表示されます。

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

    リストにEMSが表示されなくなります。

15.4 アウトバウンド接続JNDIの作成

アウトバウンド接続JNDIは、Oracle WebLogic Server管理コンソールで構成します。

アウトバウンド接続JNDIを作成するには:

  1. Oracle WebLogic Serverホスト名およびコンソール・ポートを含むURLを使用して、Oracle WebLogic Serverコンソールにアクセスします。
    http://wls-hostname:console-port/console
    

    たとえば:

    http://localhost:7011/console
    
  2. Oracle WebLogic Server管理者のユーザー名とパスワードを使用してログインします。
  3. Oracle WebLogic Server管理コンソールの左ペインで、「デプロイメント」を選択します。
  4. 「デプロイメントのサマリー」ページの「制御」タブで、BamServerノードを開きます。
  5. BeamAdapter.rarリンクをクリックします。
  6. 「BeamAdapter.rarの設定」ページで、「構成」タブをクリックし、「アウトバウンド接続プール」サブタブをクリックします。
  7. oracle.tip.adapter.jms.IJmsConnectionFactoryノードを開きます。
  8. 「新規」をクリックします。
  9. oracle.tip.adapter.jms.IJmsConnectionFactoryを選択し、「次」をクリックします。
  10. 「JNDI名」に入力し、「終了」をクリックします。

    EMSのJNDI名はeisで開始する必要があります。たとえば、eis/bam/wls/TestQueueというJNDI名にします。

  11. 「OK」をクリックして、アウトバウンド接続JNDIをデプロイメント計画とともに保存します。

    デフォルトのパスはFMW_HOME/soa/bam/Plan.xmlです。

  12. 「BeamAdapter.rarの設定」ページが再度表示されたら、「構成」タブをクリックし、「アウトバウンド接続プール」サブタブを再度クリックします。
  13. oracle.tip.adapter.jms.IJmsConnectionFactoryノードを再度開きます。
  14. 作成したアウトバウンド接続JNDIの名前をクリックします。

    「アウトバウンド接続のプロパティ」ページが表示されます。

  15. 「プロパティ値」表セルをクリックして値を入力し、[Enter]を押して、次の各プロパティを指定します。
    • ConnectionFactoryLocation — JMSプロバイダの値を入力します。Oracle WebLogic Serverの場合、weblogic.jms.ConnectionFactoryまたはカスタム接続ファクトリの詳細を入力します。

    • FactoryProperties: 次のプロパティを次のフォーマットで指定します。

      InitialContextFactory=value;JNDIServiceProviderURL=value;
      JNDIUserName=value;JNDIPassword=value
      

      たとえば:

      java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory;
      java.naming.provider.url=t3://www.example.com:7001;
      java.naming.security.principal=weblogic;
      java.naming.security.credentials=weblogic1
      

      プロパティの説明は次のとおりです。

      • InitialContextFactory — 特定のJMSコネクション・ファクトリまたは宛先の検索に使用される、初期コンテキスト・ファクトリ。

      • JNDIServiceProviderURL — サービス・プロバイダの構成情報。javax.naming.Context.PROVIDER_URLプロパティを設定するために使用され、initialContext()に対する引数として渡されます。

      • JNDIUserName — JNDIサービス・コール元の認証のための当事者の識別情報。このユーザーにはRMIログイン許可が必要です。javax.naming.Context.SECURITY_PRINCIPALを設定するために使用され、initialContext()に渡されます。

      • JNDIPassword — JNDIサービス・コール元の認証のための当事者の識別情報。javax.naming.Context.SECURITY_CREDENTIALSを設定するために使用され、initialContext()に渡されます。

    • IsTopic — トピックの場合はtrueを入力し、キューの場合はfalseを入力します。

    • Password and Username — アプリケーション管理またはコンテナ管理された認証用JMSプロバイダへの接続を認証するために使用される資格証明を入力します。

  16. 「保存」をクリックします。
  17. WLSサーバーおよびBAMサーバーを再起動します。

    ノート:

    Oracle BAMアダプタのプロパティを変更した場合は、アダプタのデプロイメントを更新する必要があります。詳細は、「Oracle BAMアダプタのデプロイメントの更新」を参照してください。

15.5 Oracle BAMアダプタのデプロイメントの更新

新しいJNDIを使用してSOAコンポジットをデプロイする際、コンポジットをデプロイする前に、その名前をJCAファイルで指定し、Weblogic Server (WLS)上で参照できるようにして、BAMアダプタのプロパティが更新されるようにする必要があります。

Oracle BAMアダプタのデプロイメントを更新するには:
  1. 管理コンソールにログインします。
  2. ロックして編集ボタンをクリックします。
  3. 「デプロイメント」で、bamjcaadapterの横にあるボックスを選択します。
  4. 「更新」をクリックし、次の画面に表示される「このアプリケーションを次のデプロイメント・ファイルを使用して再デプロイします。」ボタンを選択します。
  5. 「終了」をクリックします。

15.6 外部JMSプロバイダの使用

Oracle WebLogic Serverでは、Oracle WebLogic Server以外の(外部) JMSプロバイダと、Oracle WebLogic Serverにデプロイされているアプリケーションを統合できます。このようなアプリケーションの1つがOracle BAMです。

外部JMSプロバイダには、独自のJMSクライアントおよびJava Naming and Directory Interface (JNDI)クライアントAPIが設定されています。これらの依存性を識別し、リモート・プロバイダでホストされているJMSリソースをOracle WebLogic Serverにデプロイされているアプリケーションによって参照できるようOracle WebLogic ServerでこれらのAPIを使用できるようにするには、いくつかの構成を行う必要があります。

詳細は、『テクノロジ・アダプタの理解』JMSのOracle JCAアダプタに関する項、および『Oracle WebLogic Server JMSリソースの管理』サード・パーティJMSプロバイダにアクセスするための外部サーバー・リソースの構成に関する項を参照してください。

高レベルの構成ステップは、次のとおりです。

  1. 外部プロバイダのJMSおよびJNDIクライアント・ライブラリを、Oracle WebLogic Serverにデプロイされているアプリケーションで使用できるようにします。

    外部プロバイダのJMSおよびJNDIクライアントのJavaアーカイブ(JAR)ファイルを識別し、これらのファイルをWLS_HOME/libディレクトリに格納します。

  2. Oracle WebLogic Server管理コンソールを使用して外部サーバーを作成します。

    Oracle WebLogic Server管理コンソールの「JMSモジュール」に移動し、新規モジュールを作成します。

    このモジュール内で、「新規」をクリックし、「外部サーバー」を選択し、すべてのページの指示に従って新規外部サーバーを作成します。

    外部サーバー定義に対するリモート・プロバイダの適切なJNDIプロパティを指定します。

  3. 外部JMSサーバーのJMSリソース(つまり、コネクション・ファクトリと宛先)を作成します。

    「外部サーバー」リンク内で、「宛先」タブを選択して、次に対するリンクを作成します。

    • リモート・コネクション・ファクトリ

    • リモート宛先(キュー/トピック)

    これらの宛先に対して構成したローカルJNDI名は、EMSの構成時に、これらの宛先からのメッセージを消費するために使用する必要があります。

  4. BAMコンポーザの「管理者」ページでEMS定義を構成して、外部宛先からのメッセージを消費するようにします。

    外部プロバイダでホストされているJMSリソースへのアクセスの全体プロセスは、Oracle BAMサーバーには透過的です。前述のステップに正しく従うと、外部JMSプロバイダからのリモート宛先がローカルWLサーバーのJNDIツリー上に公開され、サーバーにデプロイされているアプリケーション(Oracle BAM EMSなど)で、他の関連付けられているOracle WebLogic Server JMSリソースと同様にそれらを参照できます。Oracle WebLogic Serverは、実行時に適切な外部JMSプロバイダとの通信を処理します。

15.7 EMSのJCAアラート・メカニズムの構成

Oracle BAM EMSインスタンスによって、バックグラウンド・スレッドでJCAサービスが開始されます。JCAでリモート・キュー・エラーなどの例外が発生した場合、JCAサービスにより、BAM EMSにアラート例外が送信されます。

Oracle BAMでは、これらのJCA例外について通知できるアラート・メカニズムが提供されるようになりました。

これに対処するために、Oracle BAMにはEMSHistoryデータ・オブジェクトが付属しています。これは、サーバーの起動時に自動的に作成されます。JCA サービス例外は、このデータ・オブジェクトによって取得され、これによりEMSインスタンスの実行が維持されます。EMSインスタンスを停止する場合は、それに応じて構成できます。

JCAアラート・メカニズムを構成するには:
  1. Oracle BAM Composerで、新規プロジェクトを作成するか、既存のプロジェクトを選択します。プロジェクトの作成の詳細は、「プロジェクトの作成」を参照してください。
  2. EmsHistoryデータ・オブジェクトをプロジェクトに追加します。
  3. アラートを作成します。詳細は、「アラートの作成」を参照してください。
  4. 「データ・オブジェクトのデータ・フィールドが特定の条件を満たす場合」イベント・トリガーを選択します。
  5. <このデータ・フィールドの条件 x>条件をクリックし、EmsHistoryデータ・オブジェクトを選択します。
  6. 条件「EMS NAME」「はnullではない」を指定して行フィルタを追加し、「OK」をクリックします。
  7. <ユーザーの選択>をクリックし、適切なユーザー・ロールを割り当てます。
  8. <アクションの追加>リンクをクリックし、「電子メールでメッセージを送信」を選択して、「メッセージ・エディタ」のすべての必須フィールドに入力します。
  9. 「OK」をクリックします。