この章では、Oracle Business Activity Monitoring (Oracle BAM)アーキテクトのアプリケーションでエンタープライズ・メッセージ・ソース(EMS)を作成して使用する方法について説明します。ここでは、EMS XMLフォーマット構成パラメータの使用方法、日時パターンやロケール情報の指定方法、EMSペイロードのエラー処理方法、リモート・プロバイダでホストされているJava Message Service (JMS)リソースの使用方法について説明します。
この章では、次の項目について説明します。
エンタープライズ・メッセージ・ソース(EMS)は、Java Message Service (JMS)をOracle BAMサーバーに直接接続するアプリケーションで使用されます。JMSは、アプリケーション・コンポーネント間でデータを受け渡し、異種およびレガシー環境間でのビジネス統合を可能にするための標準メッセージングAPIです。
EMSは、抽出、変換およびロード(ETL)シナリオを構成せず、かわりにメッセージからOracle BAMサーバー上のデータ・オブジェクトに直接マップされます。ただし、XMLスタイルシート言語(XSL)はこれらの間でトランスフォーメーションを実行するために継続して使用できます。各EMSは特定のJMSトピックまたはキューに接続され、その情報はOracle BAMアクティブ・データ・キャッシュのデータ・オブジェクトに配信されます。Oracle BAMアーキテクトWebアプリケーションを使用して、EMS定義を構成します。
次のJMSプロバイダがサポートされています。
Oracle WebLogic Serverのメッセージング
Oracle以外の動作確認済JMSプロバイダ
IBM WebSphere MQ 6.0
Tibco JMS
Apache ActiveMQ
詳細は、第56.4項「外部JMSプロバイダの使用」を参照してください。
次のメッセージ・タイプがサポートされています。
マップ・メッセージ
XMLペイロードを使用したテキスト・メッセージ
次のXMLフォーマット・オプションがテキスト・メッセージ・トランスフォーメーションでサポートされています。
事前処理
メッセージ仕様
列値(列値はXMLペイロードの要素または属性として提供できます)。
既存のEMS定義を表示するには、Oracle BAMアーキテクトの機能リストから「エンタープライズ・メッセージ・ソース」を選択します。
EMSを定義する場合は、受信するメッセージ内のすべてのフィールドを指定します。可変数のユーザー定義フィールドを持つメッセージ・システムもあれば、固定数のフィールドを持つシステムもあります。
任意の文字列タイプ・フィールドに対して、そのフィールドにフォーマットを適用し、フィールドの内容を分離された個別のフィールドに分けることができます。これは、ユーザー定義のフィールドを作成できないため、メッセージ本文全体が1つの大きなフィールドとして受信されるメッセージ・システムで役立ちます。フォーマット仕様を使用すると、XMLツリー内の場所のパスを指定した後、属性またはタグをフィールドとして抽出できます。
EMSを定義する前に、Oracle BAMアーキテクトでメッセージ・ソース接続の詳細を指定できるように、メッセージを提供するサード・パーティ・アプリケーションについて理解しておく必要があります。さらに、(キュー/トピックをホストしている)JMSサーバーは、Oracle BAMサーバーをホストしているシステムとは別のシステムで構成可能です。(Oracle Advanced Queuing (AQ)の場合は、データベースでJMSサーバーをホストするためOracle BAMと同じサーバーでホストできますが、他の場合は別のシステムでJMSサーバーをホストすることをお薦めします。)
EMSを定義する手順は、次のとおりです。
Oracle BAMアーキテクトの機能リストから「エンタープライズ・メッセージ・ソース」を選択します(図56-1を参照)。
「作成」をクリックします。
表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を再利用することはサポートされていません。 |
「TextMessage」タイプを使用している場合は、表56-2を参考にして、「XMLフォーマット」セクションに適切なパラメータを構成します。
「ソース値フォーマット」セクションの「日時仕様」の構成方法は、第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
ソースからデータ・オブジェクトへのフィールド・マッピングのセクションで、ソース・メッセージのフィールドを、選択したデータ・オブジェクトにマップします。
「追加」をクリックし、マップしたフィールドを追加します。
フィールドがキーの場合は、「キー」チェック・ボックスを選択します。
「タグ/属性名」フィールドに、ソース・タグまたは属性名を入力します。
「データ・オブジェクト・フィールド」リストからターゲットのデータ・オブジェクト・フィールドを選択します。
注意: EMSペイロードにタイムスタンプ・フィールドが含まれる場合、次の点を考慮する必要があります。タイムスタンプ・フィールドにnullを挿入すると、EMSのようなクライアントの管理下ではなくなる可能性があります。 (Oracle BAMアーキテクトのように)タイムスタンプ・フィールドに値を指定しない場合、EMSは現在の日時を割り当てます。 受信タイムスタンプ値が いつでも、1つのEMSで複数のデータ・オブジェクトを更新しないようにすることをお薦めします。それにより、同じDataObjectに複数の手段で書き込んだ結果として発生する不一致を回避するとともに、イベントの順序を保持できます。 ソース・イベントが複数のソースから公開されている場合であっても、それらはすべて、そのDataObject用の同じメッセージ・セレクタ(必要な場合)で同じJMSトピック/キューに書き込むことができます。 |
EMSペイロードにおけるエラーの処理方法を「フォルト」セクションで構成します。オプションの詳細は、第56.2.4項「EMSエラー処理の構成方法」を参照してください。
「保存」をクリックして、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()を使用します。 名前と値のペアの書式は、 |
データ・オブジェクト名 |
メッセージ・データを格納しておく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に示すように、「日時仕様」チェック・ボックスを選択します。
「パターン」フィールドに、日時パターンを入力します。
ドロップダウン・リストに表示される、サポートされている推奨パターンの1つを選択するか、またはテキスト・ボックスに手動で入力できます。
Java SimpleDateFormatに準拠した有効な日時パターンを入力する必要があります。表56-3でSimpleDateFormatの構文要素を示し、表56-4でいくつか例を示します。
注意: Oracle AQ JMSを通じて日時/タイムスタンプ・データをOracle BAM EMSに送信する場合は、日時仕様を構成するときに次の点を考慮する必要があります。Oracleデータベース内のデフォルトの日時書式は、NLSセッション・パラメータ トリガー処理コード(PL/SQL)が明示的な書式で日付書式をオーバーライドしない場合、日付はデータベース・セッションのNLSパラメータで指定された書式に従って書式設定され、それに応じてEMSに送信されます。つまり、受信データを解析および解釈するために、EMS日時仕様はNLSパラメータに相当する書式を必要とします。 ただし、データベース管理者がNLSパラメータを変更した場合、EMS側で問題が発生します。デフォルトのNLSパラメータで指定された書式に依存するのではなく、 トリガー処理コードの次の例のような行を '<HIREDATE>' || :new.HIREDATE || '</HIREDATE>' || 次のように変更する必要があります。 '<HIREDATE>' || to_char(:new.HIREDATE, 'MM/dd/yy HH24:MI:SS') || '</HIREDATE>' || 「EMS日時仕様」ドロップダウンから選択された、対応する書式は 同様に、タイムスタンプ・データの場合、 |
注意: HH:mm:ss 日時書式を明示的に選択した場合、日付にはデフォルト値1/1/1970 が挿入されます。この日付の値は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 |
拡張フォーマット・オプションを使用すると、EMSでは、メッセージ内のフォーマットされた各フィールドにユーザーが指定したXSLトランスフォーメーション(XSLT)を含めることができます。
XSLTは、次の目的で使用されます。
階層データの処理。データ・フローでは、階層データは処理されません。XSLTでは、受信したXMLを、繰返しフィールドが含まれた単一のレコードにフラット化できます。
単一のキュー内に複数のタイプのメッセージが含まれているメッセージ・キューの処理。データ・フローでは、Message Receiverからのすべてのレコードは同じスキーマのものである必要があります。EMS出力は、受信するメッセージ・スキーマの結合スーパーセットとして定義できます。また、XSLトランスフォーメーションによって、各メッセージ・タイプを識別して、必要に応じてこのスーパーセット・スキーマにマップできます。
データは階層では表されていないが、必要なデータが複数のレベルで含まれているXMLの処理。EMSフォーマットでは、XMLの1つのレベルのみから読取りを行うことができます。XSLトランスフォーメーションによって、入力XML内の様々なレベルで必要なデータを識別し、すべてのデータが1つのレベルで結合される新しいXMLにすべてを出力できます。
XSLトランスフォーメーションを指定する手順は、次のとおりです。
定義中または編集中のEMSで、「XMLフォーマット」セクションの「事前処理」を選択します。
「拡張フォーマット・オプション」をクリックします。
「拡張フォーマット」ダイアログが表示されます。
このフィールドにXML変換用のXSLマークアップを入力するか、または貼り付けます。別の編集ツールでXSLマークアップを記述した後で、このダイアログにそのコードをコピーして貼り付けることができます。
「変換するサンプルXML」フィールドに、変換をテストするためのサンプルXMLを入力します。サンプルXMLは、このダイアログには保存されません。このダイアログを閉じて開くと、サンプルXMLは表示されなくなります。
「変換構文の確認」をクリックしてXSL構文を確認します。
「サンプルXMLのテスト変換」をクリックして変換をテストします。
結果は、リンクの下のフィールドに表示されます。XSL構文内、サンプルXML構文内または変換時にエラーが検出された場合は、このフィールドにエラー・テキストが表示されます。
「フォルト」セクションで、EMSペイロード・エラーの処理方法を構成します。EMSペイロードにおけるエラーの処理方法は、ログ・ファイルにエラー・メッセージを書き込むか、エラー・メッセージをデータ・オブジェクトに挿入するか、またはJMSトピックやJMSキューにエラー・メッセージをパブリッシュするという方法で構成できます。
フォルト処理を構成する手順は、次のとおりです。
定義または編集中のEMSで、「フォルト・メッセージをログ」を選択してエラー・メッセージをログに送信するか、または「フォルト・メッセージを書込み」を選択してエラー・メッセージをOracle BAMデータ・オブジェクトまたはJMSトピックに書き込みます。
フォルト・メッセージのログと書込みのオプションを両方選択できます。
「フォルト・メッセージをログ」を選択した場合、ログのエラー・メッセージにペイロードを含めるには、「ペイロードを含める」を選択します。
「フォルト・メッセージを書込み」を選択した場合、メッセージをデータ・オブジェクトに挿入するには「データ・オブジェクトへ」を選択し、メッセージをJMSに書き込むには「JMSキュー/トピックへ」を選択します。その後、表56-5を使用して、選択したオプションに対して追加情報を指定します。
表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例外などの、他の問題が発生する場合があります。
Oracle BAMアーキテクトの「エンタープライズ・メッセージ・ソース」ページを使用して、EMS定義を表示し、EMS定義に対する操作を実行します。「エンタープライズ・メッセージ・ソース」リストでEMSを選択し、そのEMSの情報を表示して操作します。
EMS定義ページ(ブラウザ・ウィンドウの右側のペイン)上部に表示されるリンクを使用して、EMSに対する操作を実行します。
個々のEMS定義ページにある「編集」、「コピー」および「削除」の各リンクを使用して、現在のEMS定義を編集、コピーまたは削除します。
個々のEMS定義ページにある「開始」および「停止」の各リンクを使用して、EMSを開始および停止します。EMSを停止すると、コンシューマが「停止済」ステータスで非アクティブになります。
サブスクライブ済の永続EMSの場合は、「停止」をクリックしても、コンシューマが非アクティブになるのみです。EMSは永続サブスクリプションからサブスクライブ解除されません。詳細は、第56.3.3項「エンタープライズ・メッセージ・ソースをサブスクライブおよびサブスクライブ解除する方法」を参照してください。
デフォルトで、EMSはOracle BAMサーバーの起動時に開始されます。
「編集」をクリックすると、「BAMサーバーの起動時に起動」プロパティを変更できます。
個々のEMS定義ページにある「サブスクライブ解除」リンクを使用して、サブスクライブ済の永続EMSをサブスクライブ解除します。
サブスクライブ済の永続EMSの場合は、「停止」をクリックしても、コンシューマが「停止済」ステータスで非アクティブになるのみです。
「サブスクライブ解除」をクリックするとサブスクライブ解除され、EMSステータスには「サブスクライブ解除済」と表示されます。
サブスクライブ済の非永続EMSの場合は、「サブスクライブ解除」をクリックしても何も影響はありません。この場合は、機能を適用できないことを示すメッセージが表示されます。
「永続サブスクライバ名」プロパティの構成の詳細は、表56-1を参照してください。
個々のEMS定義ページにある「テスト」リンクを使用して、データ・ソースおよびマップされたデータ・オブジェクトのフィールドに対してEMS定義をテストします。テスト結果は、EMS定義の「ステータス」フィールドに表示されます。
テストが正常に終了した場合、ステータスは「ステータス」フィールドに「テストOK
」として表示されます。問題がある場合は、「テストが失敗しました -
exception
」と表示されます。また、「テスト」リンクをクリックすると、次のように動作します。
EMSがすでに開始している場合、EMSは停止し、再度開始します。
EMSが停止の状態である場合、EMSは開始し、再度停止します。
個々のEMS定義ページにある「リフレッシュ」リンクを使用して、EMS定義ページをリフレッシュします。通常は、EMSの現在のステータスを取得するためにページをリフレッシュします。
個々のEMS定義ページにある「メトリック」リンクを使用して、選択したEMS統計を監視します。「メトリック」ページには、「受信されたメッセージの合計」、「ADCでコミットされたメッセージの合計」および「失われたメッセージの合計」のカウンタが表示されます。これらの値は、最後の開始時またはリセット時から累積されます。
「失われたメッセージの合計」は、「受信されたメッセージの合計」から「ADCでコミットされたメッセージの合計」を減算して計算されます。
これらの最新のカウンタ値を表示するには、「リフレッシュ」をクリックします。
カウンタ値を0(ゼロ)に設定するには、「リセット」をクリックします。
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サーバーの作成」で、詳細な例を示します。
高レベルの構成手順は、次のとおりです。
外部プロバイダのJMSおよびJNDIクライアント・ライブラリを、Oracle WebLogic Serverにデプロイされているアプリケーションで使用できるようにします。
外部プロバイダのJMSおよびJNDIクライアントのJavaアーカイブ(JAR)ファイルを識別し、これらのファイルをDOMAIN_HOME
/lib
ディレクトリに格納します。
Oracle WebLogic Server管理コンソールを使用して外部サーバーを作成します。
Oracle WebLogic Server管理コンソールの「JMSモジュール」に移動し、新規モジュールを作成します。
このモジュール内で、「新規」をクリックし、「外部サーバー」を選択し、すべてのページの指示に従って新規外部サーバーを作成します。
外部サーバー定義に対するリモート・プロバイダの適切なJNDIプロパティを指定します。
外部JMSサーバーのJMSリソース(つまり、コネクション・ファクトリと宛先)を作成します。
「外部サーバー」リンク内で、「宛先」タブを選択して、次に対するリンクを作成します。
リモート・コネクション・ファクトリ
リモート宛先(キュー/トピック)
これらの宛先に対して構成したローカルJNDI名は、EMSの構成時に、これらの宛先からのメッセージを消費するために使用する必要があります。
Oracle BAMアーキテクトでEMS定義を構成して、外部宛先からのメッセージを消費するようにします。
外部プロバイダでホストされているJMSリソースへのアクセスの全体プロセスは、Oracle BAMサーバーには透過的です。前述の手順に正しく従うと、外部JMSプロバイダからのリモート宛先がローカルWLサーバーのJNDIツリー上に公開され、サーバーにデプロイされているアプリケーション(Oracle BAM EMSなど)で、他の関連付けられているOracle WebLogic Server JMSリソースと同様にそれらを参照できます。Oracle WebLogic Serverは、実行時に適切な外部JMSプロバイダとの通信を処理します。
次の手順で、Oracle WebLogic ServerでOracle Streams AQ JMSプロバイダ(AQ-JMS)を構成し、Oracle BAMアーキテクトでEMS定義を構成します。
SQLplusコマンド・プロンプトを開き、次の手順を実行します。
sysdbaでログインします。
sqlplus sys as sysdba
プロンプトが表示された場合は、システムDBAアカウントのパスワードを入力します。
次に示すスクリプトを次の順序で作成し、実行します(スクリプトの内容は例56-1、例56-2および例56-3を参照)。
@<SCRIPT_PATH>/usertabletopiccreation.sql @<SCRIPT_PATH>/createtable.sql @<SCRIPT_PATH>/createtrigger.sql
スクリプトにより、次の処理が実行されます。
ユーザーMyChannelDemoUser
の下に新規スキーマを作成します。
AQ-JMSにJMSトピックを作成します。
EMP
という名前のSQL表を作成します。
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;
データ・ソースが存在する場合、この手順はスキップできます。既存のデータ・ソースをこのセクションで再利用することもできます。
次のように入力して、Oracle WebLogic Server管理コンソールを開きます。
http://
hostname
:7001/console
hostnameは、Oracle BAMサーバーがインストールされているシステム名です。
コンソールにログインした後、「JDBC」セクションにある「データ・ソース」リンクをクリックし、「新規」をクリックします。
データ・ソースの名前を入力します(例: BAMAQDataSource
)。
データ・ソースからJNDI名を入力します(例: jdbc/oracle/bamaq
)。この名前は、外部JMSサーバーの構成に使用されます。
「データベースのタイプ」に「Oracle」を選択します。
「データベース・ドライバ」フィールドに、Oracle's Driver (Thin)を選択し、「次へ」をクリックします。
グローバル・トランザクションのサポートの選択を解除し、「次へ」をクリックします。
「データベース名」フィールドにデータベースSIDを入力します(例: ORCL
)。
「ホスト名」に、データベースがインストールされているシステムのホスト名を入力します(例: localhost
)。
データベースのポート番号を入力します(例: 1521)。
ユーザー名を入力します(例: MyChannelDemoUser
)。
パスワードを入力し、「次へ」を入力します。
「構成のテスト」をクリックして構成をテストします。
成功した場合は、「終了」をクリックします。
外部JMSサーバーを作成する手順は、次のとおりです。
Oracle WebLogic Server JMSモジュールを追加します。
Oracle WebLogic Server管理コンソールで、ホームページから「JMSモジュール」ページに移動します。
「新規」をクリックして、Oracle WebLogic Server JMSモジュールを作成します。
JMSモジュールの名前を入力します(例: BAMAQsystemModule
)。
「次へ」をクリックして適切なターゲットを割り当てます。
「次へ」をクリックし、次に「終了」をクリックします。
AQ-JMS外部サーバーをJMSモジュールに追加します。
作成したJMSモジュールを選択します。
「新規」をクリックし、追加するJMSリソースのリストに移動します。
「外部サーバー」オプションを選択し、「次へ」をクリックします。
外部サーバーの名前を入力し(例: BAMAQForeignServer
)、「終了」をクリックします。
AQ-JMS外部サーバーを構成します。
作成したAQ-JMS外部サーバーを選択します。
「JNDI初期コンテキスト・ファクトリ」フィールドに、次の値を入力します。
oracle.jms.AQjmsInitialContextFactory
「JNDIプロパティ」領域に、次の値を入力します。
datasource=datasource_jndi_location
datasource_jndi_location
は、データ・ソースのJNDIロケーションです(例: jdbc/oracle/bamaq
)。
AQ-JMS外部サーバーにコネクション・ファクトリを追加します。
作成したAQ-JMS外部サーバーを選択します。
「接続ファクトリ」タブを選択します。
コネクション・ファクトリの名前を入力します。これは、Oracle WebLogic Serverによって参照される論理名です。
「ローカルJNDI名」フィールドに、Oracle BAM EMSがこのコネクション・ファクトリを参照するために使用するローカルJNDI名を入力します(例: jms/BAMAQTopicCF
)。
「リモートJNDI名」フィールドに、次の値を入力します。
- TopicConnectionFactory (select for this use case) - QueueConnectionFactory - ConnectionFactory
「OK」をクリックします。
AQ-JMS外部サーバーに宛先を追加します。
作成したAQ-JMS外部サーバーを選択します。
「宛先」タブを選択します。
この宛先の名前を入力します。これは、Oracle WebLogic Serverによって参照される論理名で、宛先名とは関係ありません。
「ローカルJNDI名」フィールドに、Oracle BAM EMSがこの宛先を参照するために使用するローカルJNDI名を入力します(例: jms/BAMAQTopic
)。
「リモートJNDI名」フィールドに、宛先がキューの場合は、次の値を入力します。
Queues/queue_name
宛先がトピックの場合は、次の値を入力します。
Topics/topic_name
「OK」をクリックします。
Oracle WebLogic Serverを再起動します。
Oracle BAMアーキテクトを開き、ドロップダウン・リストで「エンタープライズ・メッセージ・ソース」を選択します。
作成したメッセージ・ソースの情報を入力します。
「初期コンテキスト・ファクトリ」の値を入力します。
weblogic.jndi.WLInitialContextFactory
JNDIプロバイダのURLを入力します。
t3://hostname:7001
「接続ファクトリ名」を入力します(例: jms/BAMAQTopicCF
)。
「宛先名」を入力します(例: jms/BAMAQTopic
)。
AQ-JMSサーバーから受信した値を送信するOracle BAMデータ・オブジェクトを選択します。
選択したデータ・オブジェクトの適切なフィールドに受信XMLのデータをマップできるように、ソースからデータ・オブジェクトへのフィールド・マッピングの指定を完了します。
これまでの作業で、EMPデータベース表内のいくつかレコードを挿入または更新して、機能をエンドツーエンドでテストできる状態になりました。
SQLPlusを使用してSQL問合せを実行できます。
ここでは、データ・オブジェクトに挿入されるレコードの値を確認する必要があります。
例:
insert into emp values (25,'Ford','ANALYST',7566,sysdate,60000,3000,20); update emp set ENAME='McOwen' where ENAME='Ford';