ヘッダーをスキップ
Oracle® Fusion Middleware Oracle SOA Suite開発者ガイド
11g リリース1 (11.1.1.7)
B56238-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

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

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

この章には次の項が含まれます:

56.1 エンタープライズ・メッセージ・ソースの概要

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

EMSは、抽出、変換およびロード(ETL)シナリオを構成せず、かわりにメッセージからOracle BAMサーバー上のデータ・オブジェクトに直接マップされます。ただし、XMLスタイルシート言語(XSL)はこれらの間でトランスフォーメーションを実行するために継続して使用できます。各EMSは特定のJMSトピックまたはキューに接続され、その情報はOracle BAMアクティブ・データ・キャッシュのデータ・オブジェクトに配信されます。Oracle BAMアーキテクトWebアプリケーションを使用して、EMS定義を構成します。

次のJMSプロバイダがサポートされています。

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

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

既存のEMS定義を表示するには、Oracle BAMアーキテクトの機能リストから「エンタープライズ・メッセージ・ソース」を選択します。

図56-1 Oracle BAMアーキテクトの機能リスト

アーキテクトの機能リスト
「図56-1 Oracle BAMアーキテクトの機能リスト」の説明

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

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

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

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

EMSを定義する前に、Oracle BAMアーキテクトでメッセージ・ソース接続の詳細を指定できるように、メッセージを提供するサード・パーティ・アプリケーションについて理解しておく必要があります。さらに、(キュー/トピックをホストしている)JMSサーバーは、Oracle BAMサーバーをホストしているシステムとは別のシステムで構成可能です。(Oracle Advanced Queuing (AQ)の場合は、データベースでJMSサーバーをホストするためOracle BAMと同じサーバーでホストできますが、他の場合は別のシステムでJMSサーバーをホストすることをお薦めします。)

EMSを定義する手順は、次のとおりです。

  1. Oracle BAMアーキテクトの機能リストから「エンタープライズ・メッセージ・ソース」を選択します(図56-1を参照)。

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

    bam_ar_ems_create.gifの説明が続きます
    図bam_ar_ems_create.gifの説明

  3. 表56-1を参考にして、各フィールドに適切な値を入力します。示されている例は、Messaging for Oracle WebLogic Serverに接続する場合の例です。


    注意:

    Oracle BAMオブジェクト名(データ・オブジェクト名、レポート名、EMS名など)に一重引用符または二重引用符が含まれていると、実行時エラーが発生します。Oracle BAMオブジェクト名には、一重引用符または二重引用符を含めないでください。

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

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


    bam_ar_ems_form.gifの説明が続きます
    図bam_ar_ems_form.gifの説明

  4. 「TextMessage」タイプを使用している場合は、表56-2を参考にして、「XMLフォーマット」セクションに適切なパラメータを構成します。

    bam_ar_ems_xmlform.gifの説明が続きます
    図bam_ar_ems_xmlform.gifの説明

  5. 「ソース値フォーマット」セクションの「日時仕様」の構成方法は、第56.2.2項「日時仕様の構成方法」を参照してください。

    「日時仕様」が無効な(選択されていない)場合、入力値の書式は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

  6. ソースからデータ・オブジェクトへのフィールド・マッピングのセクションで、ソース・メッセージのフィールドを、選択したデータ・オブジェクトにマップします。

    bam_ar_ems_map.gifの説明が続きます
    図bam_ar_ems_map.gifの説明

    1. 「追加」をクリックし、マップしたフィールドを追加します。

    2. フィールドがキーの場合は、「キー」チェック・ボックスを選択します。

    3. 「タグ/属性名」フィールドに、ソース・タグまたは属性名を入力します。

    4. 「データ・オブジェクト・フィールド」リストからターゲットのデータ・オブジェクト・フィールドを選択します。


    注意:

    EMSペイロードにタイムスタンプ・フィールドが含まれる場合、次の点を考慮する必要があります。

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

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

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

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

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


  7. EMSペイロードにおけるエラーの処理方法を「フォルト」セクションで構成します。オプションの詳細は、第56.2.4項「EMSエラー処理の構成方法」を参照してください。

    bam_fault_basic.gifの説明が続きます
    図bam_fault_basic.gifの説明

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

表56-1 EMS構成パラメータ

パラメータ 説明

名前

Oracle BAMアーキテクトのEMSリストに表示される、一意の表示名。

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

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

weblogic.jndi.WLInitialContextFactory

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

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

t3://localhost:7001

トピック/キューConnectionFactory名

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

jms/QueueConnectionFactory

トピック/キュー名

以前に作成されたJMSトピックまたはキューのJNDIルックアップで使用される名前。例:

jms/demoQueue

jms/demoTopic

JNDIユーザー名

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

javax.naming.Context.SECURITY_PRINCIPALを設定するために使用され、initialContext()に渡されます。

JNDIパスワード

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

javax.naming.Context.SECURITY_CREDENTIALSを設定するために使用され、initialContext()に渡されます。

JMSメッセージ・タイプ

TextMessageまたはMapMessage。

TextMessageを選択した場合は、XMLを使用してペイロードの内容を指定し、XMLフォーマット構成パラメータの追加セットを完成する必要があります。詳細は、表56-2を参照してください。

永続サブスクライバ名

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

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

EMSの開始後にEMSを永続サブスクリプションからサブスクライブ解除する方法の詳細は、第56.3.3項「エンタープライズ・メッセージ・ソースをサブスクライブおよびサブスクライブ解除する方法」を参照してください。

メッセージ・セレクタ(オプション)

アプリケーション固有の基準を使用するかわりに、JMSプロバイダによるメッセージの選択またはフィルタリングを可能にする、単一の名前と値のペア(現在は、名前と値の1つのペアのみサポート)。このパラメータを設定すると、アプリケーションが定義したメッセージ・プロパティ値は、メッセージ受信用に指定された基準に一致する必要があります。メッセージ・プロパティ値を設定するには、メッセージ・インタフェースのstringProperty()を使用します。

名前と値のペアの書式は、name=valueである必要があります。例: message=mymessage。等価符号(=)は、名前/値ペアのセパレータです。

データ・オブジェクト名

メッセージ・データを格納しておくOracle BAMのデータ・オブジェクト。EMSごとに1つのデータ・オブジェクトのみ操作可能です。データ・オブジェクトに「参照」列を含めることができます。

「参照」をクリックして、データ・オブジェクトを選択します。

操作

リストから次の操作を選択します。

挿入: すべての新しいデータを新しい行として挿入

アップサート: データを既存の行にマージ

更新: 既存の行を更新

削除: データ・オブジェクトから行を削除

バッチング

EMSが、バッチ処理対応のOracle BAMアクティブ・データ・キャッシュAPIと通信するかどうかを指定します。バッチ処理を使用すると、複数のメッセージを単一のテキスト・メッセージで挿入できます。バッチ処理が無効(デフォルトの状態)な場合、JMSから読み取られた各行は、行バッチの一部ではなく、個別の単位としてアクティブ・データ・キャッシュに送信されます。

バッチ処理プロパティは構成ファイルに格納されます。詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

トランザクション

トランザクションを有効にすると、バッチ処理が有効な場合に、操作がアトミックになります(バッチ処理を使用すると、複数のメッセージを単一のテキスト・メッセージで挿入できます)。

トランザクション自体はアクティブ・データ・キャッシュのバッチ処理に影響を与えませんが、「トランザクション」をtrueに設定することで、メッセージ・バッチング(多数のメッセージを単一のバッチで処理する場合)のすべてのメッセージがアトミック操作の一部になります。表56-2の「メッセージ・バッチング」を参照してください。

BAMサーバーの起動時に起動

EMSが、Oracle BAMサーバーの起動(または再起動)後すぐにメッセージを読み取り、アクティブ・データ・キャッシュに送信するかどうかを指定します。

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

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

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


表56-2 EMS XMLフォーマット構成パラメータ

パラメータ 説明

事前処理

XSLトランスフォーメーションは、メッセージ取得および列のマッピングが行われる前に、受信テキスト・メッセージに適用できます。詳細は、第56.2.3項「拡張XMLフォーマットの使用方法」を参照してください。

XML名は修飾できます。修飾されている場合は、「修飾されたネームスペース」ボックスを選択し、フィールドにネームスペースURIを入力します。

メッセージ要素名

サブ要素または属性に列の値を含む親要素です。

XML名は修飾できます。修飾されている場合は、「修飾されたネームスペース」ボックスを選択し、フィールドにネームスペースURIを入力します。

メッセージ・バッチング

複数のメッセージを1つのJMSメッセージにまとめることができます。この場合は、ラッパー要素を「バッチ要素名」にコンテナ要素として指定する必要があります。

修飾されている場合は、「修飾されたネームスペース」ボックスを選択し、フィールドにネームスペースURIを入力します。

列値

列値はXMLペイロードの要素または属性を使用して提供できます。ペイロードにどの列値タイプが提供されるか指定します。


56.2.2 日時仕様の構成方法

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

日時仕様を構成する手順は、次のとおりです。

  1. 図56-2に示すように、「日時仕様」チェック・ボックスを選択します。

  2. 「パターン」フィールドに、日時パターンを入力します。

    ドロップダウン・リストに表示される、サポートされている推奨パターンの1つを選択するか、またはテキスト・ボックスに手動で入力できます。

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


    注意:

    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です。



    注意:

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

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


  3. オプションで、「言語」「国」および「変数」の各フィールドにロケール情報を入力できます。

図56-2 EMS構成の「ソース値フォーマット」セクション

図56-2の説明が続きます
「図56-2 EMS構成の「ソース値フォーマット」セクション」の説明

表56-3 SimpleDateFormatの構文要素

記号 意味 表示

G

時代

テキスト

AD

y

数値

2003

M

テキストまたは数値

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


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

表56-4 日時パターンの例

日時パターン 結果

"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


56.2.3 拡張XMLフォーマットの使用方法

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

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

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

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

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

XSLトランスフォーメーションを指定する手順は、次のとおりです。

  1. 定義中または編集中のEMSで、「XMLフォーマット」セクションの「事前処理」を選択します。

    bam_ar_ems_advanced.gifの説明が続きます
    図bam_ar_ems_advanced.gifの説明

  2. 「拡張フォーマット・オプション」をクリックします。

    「拡張フォーマット」ダイアログが表示されます。

  3. このフィールドにXML変換用のXSLマークアップを入力するか、または貼り付けます。別の編集ツールでXSLマークアップを記述した後で、このダイアログにそのコードをコピーして貼り付けることができます。

  4. 「変換するサンプルXML」フィールドに、変換をテストするためのサンプルXMLを入力します。サンプルXMLは、このダイアログには保存されません。このダイアログを閉じて開くと、サンプルXMLは表示されなくなります。

  5. 「変換構文の確認」をクリックしてXSL構文を確認します。

  6. 「サンプルXMLのテスト変換」をクリックして変換をテストします。

    結果は、リンクの下のフィールドに表示されます。XSL構文内、サンプルXML構文内または変換時にエラーが検出された場合は、このフィールドにエラー・テキストが表示されます。

56.2.4 EMSエラー処理の構成方法

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

フォルト処理を構成する手順は、次のとおりです。

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

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

  2. 「フォルト・メッセージをログ」を選択した場合、ログのエラー・メッセージにペイロードを含めるには、「ペイロードを含める」を選択します。

    bam_fault_log.gifの説明が続きます
    図bam_fault_log.gifの説明

  3. 「フォルト・メッセージを書込み」を選択した場合、メッセージをデータ・オブジェクトに挿入するには「データ・オブジェクトへ」を選択し、メッセージをJMSに書き込むには「JMSキュー/トピックへ」を選択します。その後、表56-5を使用して、選択したオプションに対して追加情報を指定します。

    bam_fault_write_do.gifの説明が続きます
    図bam_fault_write_do.gifの説明

    bam_fault_write_jms.gifの説明が続きます
    図bam_fault_write_jms.gifの説明

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

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

データ・オブジェクトへ

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

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


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

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

JMSキュー/トピックへ

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

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

weblogic.jndi.WLInitialContextFactory


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

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

t3://localhost:7001


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

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

jms/QueueConnectionFactory


トピック/キュー名

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

jms/demoQueue

jms/demoTopic


JNDIユーザー名

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


JNDIパスワード

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


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例外などの、他の問題が発生する場合があります。

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

Oracle BAMアーキテクトの「エンタープライズ・メッセージ・ソース」ページを使用して、EMS定義を表示し、EMS定義に対する操作を実行します。「エンタープライズ・メッセージ・ソース」リストでEMSを選択し、そのEMSの情報を表示して操作します。

bam_ar_ems_links.gifの説明が続きます
図bam_ar_ems_links.gifの説明

EMS定義ページ(ブラウザ・ウィンドウの右側のペイン)上部に表示されるリンクを使用して、EMSに対する操作を実行します。

56.3.1 エンタープライズ・メッセージ・ソースの編集、コピーおよび削除方法

個々のEMS定義ページにある「編集」「コピー」および「削除」の各リンクを使用して、現在のEMS定義を編集、コピーまたは削除します。

56.3.2 エンタープライズ・メッセージ・ソースの開始および停止方法

個々のEMS定義ページにある「開始」および「停止」の各リンクを使用して、EMSを開始および停止します。EMSを停止すると、コンシューマが「停止済」ステータスで非アクティブになります。

サブスクライブ済の永続EMSの場合は、「停止」をクリックしても、コンシューマが非アクティブになるのみです。EMSは永続サブスクリプションからサブスクライブ解除されません。詳細は、第56.3.3項「エンタープライズ・メッセージ・ソースをサブスクライブおよびサブスクライブ解除する方法」を参照してください。

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

「編集」をクリックすると、「BAMサーバーの起動時に起動」プロパティを変更できます。

bam_ar_ems_start.gifの説明が続きます
図bam_ar_ems_start.gifの説明

56.3.3 エンタープライズ・メッセージ・ソースをサブスクライブおよびサブスクライブ解除する方法

個々のEMS定義ページにある「サブスクライブ解除」リンクを使用して、サブスクライブ済の永続EMSをサブスクライブ解除します。

サブスクライブ済の永続EMSの場合は、「停止」をクリックしても、コンシューマが「停止済」ステータスで非アクティブになるのみです。

「サブスクライブ解除」をクリックするとサブスクライブ解除され、EMSステータスには「サブスクライブ解除済」と表示されます。

サブスクライブ済の非永続EMSの場合は、「サブスクライブ解除」をクリックしても何も影響はありません。この場合は、機能を適用できないことを示すメッセージが表示されます。

「永続サブスクライバ名」プロパティの構成の詳細は、表56-1を参照してください。

56.3.4 エンタープライズ・メッセージ・ソースのテスト方法

個々のEMS定義ページにある「テスト」リンクを使用して、データ・ソースおよびマップされたデータ・オブジェクトのフィールドに対してEMS定義をテストします。テスト結果は、EMS定義の「ステータス」フィールドに表示されます。

テストが正常に終了した場合、ステータスは「ステータス」フィールドに「テストOK」として表示されます。問題がある場合は、「テストが失敗しました - exception」と表示されます。また、「テスト」リンクをクリックすると、次のように動作します。

  • EMSがすでに開始している場合、EMSは停止し、再度開始します。

  • EMSが停止の状態である場合、EMSは開始し、再度停止します。

56.3.5 エンタープライズ・メッセージ・ソースのリフレッシュ方法

個々のEMS定義ページにある「リフレッシュ」リンクを使用して、EMS定義ページをリフレッシュします。通常は、EMSの現在のステータスを取得するためにページをリフレッシュします。

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

個々のEMS定義ページにある「メトリック」リンクを使用して、選択したEMS統計を監視します。「メトリック」ページには、「受信されたメッセージの合計」「ADCでコミットされたメッセージの合計」および「失われたメッセージの合計」のカウンタが表示されます。これらの値は、最後の開始時またはリセット時から累積されます。

「失われたメッセージの合計」は、「受信されたメッセージの合計」から「ADCでコミットされたメッセージの合計」を減算して計算されます。

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

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

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

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

詳細は、『Oracle Fusion Middleware Configuring and Managing JMS for Oracle WebLogic Server』のサード・パーティJMSプロバイダにアクセスするための外部サーバー・リソースの構成に関する項を参照してください。

「ユースケース: Oracle Streams AQ JMSプロバイダに対するEMSの作成」第56.5.3項「外部JMSサーバーの作成」で、詳細な例を示します。

高レベルの構成手順は、次のとおりです。

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

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

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

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

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

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

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

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

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

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

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

  4. Oracle BAMアーキテクトでEMS定義を構成して、外部宛先からのメッセージを消費するようにします。

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

56.5 ユースケース: Oracle Streams AQ JMSプロバイダに対するEMSの作成

次の手順で、Oracle WebLogic ServerでOracle Streams AQ JMSプロバイダ(AQ-JMS)を構成し、Oracle BAMアーキテクトでEMS定義を構成します。

  1. AQ-JMSでのJMSトピックの作成

  2. Oracle WebLogic Serverでのデータ・ソースの作成

  3. 外部JMSサーバーの作成

  4. Oracle BAMアーキテクトでのEMSの定義

  5. SQL表のレコードの挿入と更新

56.5.1 AQ-JMSでのJMSトピックの作成

SQLplusコマンド・プロンプトを開き、次の手順を実行します。

  1. sysdbaでログインします。

    sqlplus sys as sysdba
    
  2. プロンプトが表示された場合は、システムDBAアカウントのパスワードを入力します。

  3. 次に示すスクリプトを次の順序で作成し、実行します(スクリプトの内容は例56-1例56-2および例56-3を参照)。

    @<SCRIPT_PATH>/usertabletopiccreation.sql
    @<SCRIPT_PATH>/createtable.sql
    @<SCRIPT_PATH>/createtrigger.sql
    

    スクリプトにより、次の処理が実行されます。

    1. ユーザーMyChannelDemoUserの下に新規スキーマを作成します。

    2. AQ-JMSにJMSトピックを作成します。

    3. EMPという名前のSQL表を作成します。

    4. EMPの挿入/更新時に、メッセージをAQ-JMSトピックにパブリッシュするトリガーを作成します。

例56-1 usertabletopiccreation.sqlの内容

DROP USER MyChannelDemoUser CASCADE;
 
GRANT connect, resource,AQ_ADMINISTRATOR_ROLE TO MyChannelDemoUser IDENTIFIED BY
 MyChannelDemoPassword;
GRANT execute ON sys.dbms_aqadm TO MyChannelDemoUser;
GRANT execute ON sys.dbms_aq    TO MyChannelDemoUser;
GRANT execute ON sys.dbms_aqin  TO MyChannelDemoUser;
GRANT execute ON sys.dbms_aqjms TO MyChannelDemoUser;
 
connect MyChannelDemoUser/MyChannelDemoPassword;
 
BEGIN
--dbms_aqadm.stop_queue( queue_name => 'MY_TOPIC' );
--dbms_aqadm.drop_queue( queue_name  => 'MY_TOPIC');
--DBMS_AQADM.DROP_QUEUE_TABLE (queue_table => 'TTab');
dbms_aqadm.create_queue_table( queue_table => 'TTab', queue_payload_type =>
 'sys.aq$_jms_text_message', multiple_consumers => true );
dbms_aqadm.create_queue( queue_name  => 'MY_TOPIC', queue_table => 'TTab' );
dbms_aqadm.start_queue( queue_name => 'MY_TOPIC' );
END;
/

例56-2 createtable.sqlの内容

connect MyChannelDemoUser/MyChannelDemoPassword;

CREATE TABLE EMP ( EMPNO NUMBER(4), ENAME VARCHAR2(10),  JOB VARCHAR2(9), MGR
 NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2) );

quit;

例56-3 createtrigger.sqlの内容

connect MyChannelDemoUser/MyChannelDemoPassword;
create or replace
trigger employee AFTER INSERT OR Update ON EMP
 FOR each row
    declare
       xml_complete varchar2(1000);
       v_enqueue_options dbms_aq.enqueue_options_t;
       v_message_properties dbms_aq.message_properties_t;
       v_msgid raw(16);
       temp sys.aq$_jms_text_message;
       v_recipients        dbms_aq.aq$_recipient_list_t;
       
    Begin
         temp:=sys.aq$_jms_text_message.construct;
 xml_complete :=
 '<?xml version="1.0"?>' ||
 '<row>' ||
 '<EMPNO>' || :new.EMPNO || '</EMPNO>' ||
 '<ENAME>' || :new.ENAME || '</ENAME>' ||
 '<JOB>' || :new.JOB || '</JOB>' ||
 '<MGR>' || :new.MGR || '</MGR>' ||
 '<HIREDATE>' || :new.HIREDATE || '</HIREDATE>' ||
 '<SAL>' || :new.SAL || '</SAL>' ||
 '<COMM>' || :new.COMM || '</COMM>' ||
 '<DEPTNO>' || :new.DEPTNO || '</DEPTNO>' ||
 '</row>' ;
 temp.set_text(xml_complete);
      dbms_aq.enqueue(queue_name => 'MY_TOPIC',
         enqueue_options => v_enqueue_options,
         message_properties => v_message_properties,
         payload => temp,
         msgid => v_msgid );
  End ;
/
quit;

56.5.2 Oracle WebLogic Serverでのデータ・ソースの作成

データ・ソースが存在する場合、この手順はスキップできます。既存のデータ・ソースをこのセクションで再利用することもできます。

  1. 次のように入力して、Oracle WebLogic Server管理コンソールを開きます。

    http://hostname:7001/console

    hostnameは、Oracle BAMサーバーがインストールされているシステム名です。

  2. コンソールにログインした後、「JDBC」セクションにある「データ・ソース」リンクをクリックし、「新規」をクリックします。

  3. データ・ソースの名前を入力します(例: BAMAQDataSource)。

  4. データ・ソースからJNDI名を入力します(例: jdbc/oracle/bamaq)。この名前は、外部JMSサーバーの構成に使用されます。

  5. 「データベースのタイプ」「Oracle」を選択します。

  6. 「データベース・ドライバ」フィールドに、Oracle's Driver (Thin)を選択し、「次へ」をクリックします。

  7. グローバル・トランザクションのサポートの選択を解除し、「次へ」をクリックします。

  8. 「データベース名」フィールドにデータベースSIDを入力します(例: ORCL)。

  9. 「ホスト名」に、データベースがインストールされているシステムのホスト名を入力します(例: localhost)。

  10. データベースのポート番号を入力します(例: 1521)。

  11. ユーザー名を入力します(例: MyChannelDemoUser)。

  12. パスワードを入力し、「次へ」を入力します。

  13. 「構成のテスト」をクリックして構成をテストします。

  14. 成功した場合は、「終了」をクリックします。

56.5.3 外部JMSサーバーの作成

外部JMSサーバーを作成する手順は、次のとおりです。

  1. Oracle WebLogic Server JMSモジュールを追加します。

    1. Oracle WebLogic Server管理コンソールで、ホームページから「JMSモジュール」ページに移動します。

    2. 「新規」をクリックして、Oracle WebLogic Server JMSモジュールを作成します。

    3. JMSモジュールの名前を入力します(例: BAMAQsystemModule)。

    4. 「次へ」をクリックして適切なターゲットを割り当てます。

    5. 「次へ」をクリックし、次に「終了」をクリックします。

  2. AQ-JMS外部サーバーをJMSモジュールに追加します。

    1. 作成したJMSモジュールを選択します。

    2. 「新規」をクリックし、追加するJMSリソースのリストに移動します。

    3. 「外部サーバー」オプションを選択し、「次へ」をクリックします。

    4. 外部サーバーの名前を入力し(例: BAMAQForeignServer)、「終了」をクリックします。

  3. AQ-JMS外部サーバーを構成します。

    1. 作成したAQ-JMS外部サーバーを選択します。

    2. 「JNDI初期コンテキスト・ファクトリ」フィールドに、次の値を入力します。

      oracle.jms.AQjmsInitialContextFactory
      
    3. 「JNDIプロパティ」領域に、次の値を入力します。

      datasource=datasource_jndi_location
      

      datasource_jndi_locationは、データ・ソースのJNDIロケーションです(例: jdbc/oracle/bamaq)。

  4. AQ-JMS外部サーバーにコネクション・ファクトリを追加します。

    1. 作成したAQ-JMS外部サーバーを選択します。

    2. 「接続ファクトリ」タブを選択します。

    3. コネクション・ファクトリの名前を入力します。これは、Oracle WebLogic Serverによって参照される論理名です。

    4. 「ローカルJNDI名」フィールドに、Oracle BAM EMSがこのコネクション・ファクトリを参照するために使用するローカルJNDI名を入力します(例: jms/BAMAQTopicCF)。

    5. 「リモートJNDI名」フィールドに、次の値を入力します。

      - TopicConnectionFactory (select for this use case)
      - QueueConnectionFactory
      - ConnectionFactory
      
    6. 「OK」をクリックします。

  5. AQ-JMS外部サーバーに宛先を追加します。

    1. 作成したAQ-JMS外部サーバーを選択します。

    2. 「宛先」タブを選択します。

    3. この宛先の名前を入力します。これは、Oracle WebLogic Serverによって参照される論理名で、宛先名とは関係ありません。

    4. 「ローカルJNDI名」フィールドに、Oracle BAM EMSがこの宛先を参照するために使用するローカルJNDI名を入力します(例: jms/BAMAQTopic)。

    5. 「リモートJNDI名」フィールドに、宛先がキューの場合は、次の値を入力します。

      Queues/queue_name
      

      宛先がトピックの場合は、次の値を入力します。

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

  6. Oracle WebLogic Serverを再起動します。

56.5.4 Oracle BAMアーキテクトでのEMSの定義

  1. Oracle BAMアーキテクトを開き、ドロップダウン・リストで「エンタープライズ・メッセージ・ソース」を選択します。

  2. 作成したメッセージ・ソースの情報を入力します。

  3. 「初期コンテキスト・ファクトリ」の値を入力します。

    weblogic.jndi.WLInitialContextFactory
    
  4. JNDIプロバイダのURLを入力します。

    t3://hostname:7001
    
  5. 「接続ファクトリ名」を入力します(例: jms/BAMAQTopicCF)。

  6. 「宛先名」を入力します(例: jms/BAMAQTopic)。

  7. AQ-JMSサーバーから受信した値を送信するOracle BAMデータ・オブジェクトを選択します。

  8. 選択したデータ・オブジェクトの適切なフィールドに受信XMLのデータをマップできるように、ソースからデータ・オブジェクトへのフィールド・マッピングの指定を完了します。

56.5.5 SQL表のレコードの挿入と更新

これまでの作業で、EMPデータベース表内のいくつかレコードを挿入または更新して、機能をエンドツーエンドでテストできる状態になりました。

SQLPlusを使用してSQL問合せを実行できます。

ここでは、データ・オブジェクトに挿入されるレコードの値を確認する必要があります。

例:

insert into emp values (25,'Ford','ANALYST',7566,sysdate,60000,3000,20);

update emp set ENAME='McOwen' where ENAME='Ford';