25 JMS XML
この章の内容は次のとおりです。
概要
Oracle Data Integratorには、JMS宛先を統合するための、単純で透過的な方法が用意されています。この章では、XMLペイロードを使用するJMSメッセージの処理について説明します。バッチ・モードでのテキスト・ペイロードの処理の説明は、「JMS」を参照してください。
概念
JMS XMLナレッジ・モジュールは、最も一般的なJMS準拠のミドルウェア(Oracle Service Bus、Sonic MQなど)に適用されます。これらのほとんどのナレッジ・モジュールには、メッセージを確実に配信するためのトランザクション処理が含まれます。
JMS宛先の使用
Oracle Data Integratorでは、JMS宛先によって配信されるXMLメッセージの処理が可能です。各メッセージはXMLデータのコンテナとして扱われ、JMS XMLキューまたはJMS XMLトピック・テクノロジを介して処理されます。
JMS XMLキューまたはJMS XMLトピック・テクノロジでは、各メッセージ・ペイロードに完全なXMLデータ構造が含まれます。この構造は、Oracle Data Integrator XML Driverを使用して、モデルとして表示されるリレーショナル・スキーマ(XMLスキーマ)にマップされます。
注意:
この方法は、XMLファイルの処理と非常に似ています。JMS XMLでは、メッセージ・ペイロードがXMLファイルです。XMLファイルの処理およびXMLドライバの詳細は、「XMLファイル」および「Oracle Data Integrator Driver for XMLの参照情報」を参照してください。
トポロジでは、単一の物理スキーマを使用して、各JMS宛先がJMS XMLトピックまたはキューのデータ・サーバーとして定義されます。XML形式のメッセージを配信する各トピックまたはキューに対して、データ・サーバーと物理スキーマの1つのペアが宣言されます。
XMLメッセージの構造は、データ・モデルとして表示されるリレーショナル構造(XMLスキーマと呼ぶ)にマップされます。このモデル内の各データストアは、XMLファイルの一部(一般的には要素タイプ)を表します。
メッセージの処理
各XMLメッセージは1つのOracle Data Integratorモデルに対応するため、JMS XMLメッセージの消費または生成時には、モデル全体を1つの単位として使用およびロードする必要があります。XMLメッセージの処理単位はパッケージです。
モデル内でメッセージのプロパティまたはヘッダー・フィールドを宣言したり、マッピング内で属性として使用することはできません。ただし、メッセージ・セレクタでの使用やKMオプションを介した設定は可能です。
XMLメッセージの消費
受信XMLメッセージの処理は、パッケージ単位で次のように実行されます。
-
JMSメッセージとXMLスキーマの同期化: この操作では、メッセージの読取りおよびXMLスキーマの生成が行われます。通常、メッセージに最初にアクセスするマッピングによって実行されます。
-
データの抽出: 一連のマッピングにより、XMLスキーマのデータストアがソースとして使用されます。このデータを使用できるのは、セッションの終了、新規の同期化アクションによる別のメッセージの読取り、またはJMS読取りのコミットの実行が発生するまでです。
-
JMS読取りのコミット: この操作では、メッセージ消費の検証およびXMLスキーマの削除が行われます。XMLメッセージからデータを抽出する最後のマッピングで実行する必要があります。
XMLメッセージの生成
XMLメッセージを生成するには、パッケージが次のタスクを実行できるように設計されている必要があります。
-
XMLスキーマの初期化: この操作では、生成するXMLメッセージに対応する空のXMLスキーマが作成されます。この操作は、通常、構造をロードする最初のマッピングで実行されます。
-
データのロード: 一連のマッピングによって、XMLスキーマにデータがロードされます。
-
XMLスキーマとJMSの同期化: この操作では、XMLスキーマがXMLメッセージに変換され、JMS宛先に送信されます。この操作は、通常、スキーマをロードする最後のマッピングで実行されます。
メッセージのフィルタリング
サーバー上のメッセージをフィルタ処理するためのメッセージ・セレクタ(MESSAGE_SELECTOR KMオプション)を定義することで、JMS XML宛先のメッセージをフィルタ処理できます。このタイプのフィルタでは、メッセージのプロパティまたはヘッダー・フィールドのみを使用できます。フィルタはサーバーによって処理されるため、Data Integratorで読み取られる情報量が削減されます。XMLスキーマから抽出されたデータを使用して、マッピングでデータをフィルタ処理することもできます。これらのフィルタは、メッセージがXMLスキーマと同期化された後、Data Integratorで処理されます。
ナレッジ・モジュール
Oracle Data Integratorには、XMLメッセージを処理するためのナレッジ・モジュール(KM)が用意されています。これらのリストを表25-1に示します。
表25-1 JMS XMLナレッジ・モジュール
ナレッジ・モジュール | 説明 |
---|---|
IKM SQL to JMS XML Append |
任意のANSI SQL-92標準準拠ステージング領域からJMS準拠のメッセージのキューまたはトピックへ、XML形式でデータを統合します。 |
LKM JMS XML to SQL |
XMLのJMS準拠メッセージのキューまたはトピックから、ステージング領域として使用される任意のANSI SQL-92標準準拠データベースへ、データをロードします。 |
インストールおよび構成
JMSナレッジ・モジュールの使用を開始する前に、この項の情報を必ず読んでください。
システム要件および動作要件
インストールを実行する前に、システム要件および動作要件のドキュメントを読んで、使用する環境がインストールする製品の最低インストール要件を満たすことを確認する必要があります。
サポートされているプラットフォームおよびバージョンのリストには、次のOracle Technical Network (OTN)からアクセスできます。
http://www.oracle.com/technetwork/middleware/data-integrator/documentation/index.html。
テクノロジ固有の要件
JMS宛先へのアクセスは、通常、JNDIサービス経由で行われます。JNDIおよびJMSの構成および固有の要件は、接続先のJMSプロバイダによって異なります。詳細は、JMSプロバイダ固有のドキュメントを参照してください。
注意:
デフォルトでは、JMS XMLドライバ読取り操作の固定レコード・セパレータとして、4つの連続する';'が使用されます。XMLデータにも4つ以上の連続する';'文字が含まれている場合は、エラーが発生するため、レコード・セパレータを別の値に設定する必要があります。これを行うには、Doracle.odi.jmsxmlColSepString
JVMオプションを使用します。たとえば、Doracle.odi.jmsxmlColSepString="????"
を指定すると、JMS XMLドライバ・レコード・セパレータが";;;;"ではなく"????"に設定されます。
このオプションは、次の場所で設定する必要があります。
-
Studioの場合、
odi.conf parameter
ファイルでこのパラメータを設定します。新しいAddVMOption
エントリを追加します。 -
12c Standalone/Colocated Agentの場合、instance.shスクリプトで
ODI_INSTANCE_OPTIONS
を使用します。 -
11g Standalone Agentの場合、odiparamsファイルで
ODI_ADDITIONAL_JAVA_OPTIONS
を使用します。 -
JEEエージェントの場合、
startManagedWeblogic
スクリプトでこれをJAVA_OPTIONS
に追加します。
トポロジの設定
トポロジの設定には次が含まれます。
JMS XMLデータ・サーバーの作成
各JMS XMLデータ・サーバーは、ローカル・ネットワーク経由でアクセス可能な1つのJMSプロバイダまたはルーターに対応します。
JMS XMLデータ・サーバーには、JMSキューXMLとJMSトピックXMLの2タイプがあります。
-
JMSキューXMLデータ・サーバーは、JMSルーター内の単一のキューに接続してXMLメッセージを統合するために使用されます。
-
JMSトピックXMLデータ・サーバーは、JMSルーター内の単一のトピックに接続してXMLメッセージを統合するために使用されます。
Oracle Data Integrator JMSドライバにより、XMLコンテンツを含むメッセージがメモリー内のリレーショナル・スキーマにロードされます。このスキーマは、XMLメッセージの階層構造を表し、リレーショナル構造をアンロードしてJMSメッセージに戻すことができます。
データ・サーバーの作成
『Oracle Data Integratorの管理』のデータ・サーバーの作成に関する項に記載されている標準の手順で、JMSキューXMLテクノロジ用またはJMSトピックXMLテクノロジ用データ・サーバーを作成します。
JMSキューXMLまたはJMSトピックXMLデータ・サーバーの作成手順は、XMLデータ・サーバーの作成手順と同じですが、JNDI接続を定義する際に、「JNDI URL」でJMS XML固有の情報を指定する必要があります。詳細は、XMLデータ・サーバーの作成を参照してください。
この項では、JMSキューXMLまたはJMSトピックXMLデータ・サーバーの定義に関する必須または固有のフィールドのみについて説明します。
例25-1 例
LDAPディレクトリをJNDIプロバイダとして使用する場合は、次のパラメータを使用する必要があります。
-
JNDIドライバ:
com.sun.jndi.ldap.LdapCtxFactory
-
JNDI URL:
ldap://<ldap_host>:<port>/<dn>?d=<DTD_FILE>&s=<SCHEMA>&JMS_DESTINATION=<JMS_DESTINATION_NAME>
-
JNDIリソース:
<Name of the connection factory>
JMS XML物理スキーマの作成
『Oracle Data Integratorの管理』の物理スキーマの作成に関する項の説明に従って、標準の手順を使用してJMS XML物理スキーマを作成します。
注意:
スキーマおよび作業スキーマの名前として、JMSキューXMLまたはJMSトピックXMLデータ・サーバーのJNDI URLのs=<schema name>
プロパティで定義されたスキーマ名を使用してください。
注意:
各JMS XMLデータ・サーバーに必要な物理スキーマは、1つのみです。
『Oracle Data Integratorの管理』の論理スキーマの作成に関する項の説明に従って、標準の手順を使用してこの物理スキーマ用の論理スキーマを作成し、特定のコンテキストで関連付けます。
統合プロジェクトの設定
JMS XMLを使用してプロジェクトを設定するには、標準の手順に従います。『Oracle Data Integratorでの統合プロジェクトの開発』の統合プロジェクトの作成に関する項を参照してください。
JMS XMLでの作業を開始するにあたり、使用するプロジェクトに次のナレッジ・モジュールをインポートすることをお薦めします。
-
IKM SQL to JMS XML Append
-
LKM JMS XML to SQL
JMS XMLモデルの作成およびリバース・エンジニアリング
この項では、次の項目について説明します。
JMS XMLモデルの作成
『Oracle Data Integratorでの統合プロジェクトの開発』のモデルの作成に関する項に記載されている標準の手順で、JMSキューXMLまたはJMSトピックXMLモデルを作成します。
JMSキューXMLまたはJMSトピックXMLの各モデルは一連のデータストアに対応し、各データストアはXMLファイルのエントリ・レベルを表します。これらのモデルには、JMSメッセージの構造を説明するデータストアが含まれます。各モデルには、1つのトピックまたはキューのメッセージ構造が含まれます。このモデルの構造は、標準のリバース・エンジニアリングを使用して、データ・サーバー定義で指定されたDTDまたはXMLファイルからリバース・エンジニアリングされます。
JMS XMLモデルのリバース・エンジニアリング
JMS XMLでは、XMLドライバの機能のみを使用する標準のリバース・エンジニアリングがサポートされています。
JMSキューXMLまたはJMSトピックXMLで標準のリバース・エンジニアリングを実行するには、『Oracle Data Integratorでの統合プロジェクトの開発』のモデルのリバース・エンジニアリングに関する項に記載されている通常の手順を行います。
Oracle Data Integratorでは、XMLデータから生成されたデータストアに次の属性が自動的に追加されます。
-
主キー(PK属性): 親子関係に使用されます。
-
外部キー(FK属性): 親子関係に使用されます。
-
順序識別子(ORDER属性): XMLファイルでのデータの表示順序を取得できます。
これらの追加の属性により、スキーマに格納されたリレーショナル構造でのXML階層構造のマッピングが可能になります。詳細は、「Oracle Data Integrator Driver for XMLの参照情報」を参照してください。
マッピングの設計
マッピングまたはチェック用に選択したKMによって、このマッピングまたはチェックの機能およびパフォーマンスが決まります。この項に示す推奨事項は、XMLメッセージに関連する様々な状況でのKMの選択に役立ちます。
JMS XMLソースからのデータのロード
JMS XMLをマッピングのソースまたはターゲットとして使用できます。XMLメッセージ・キューまたはトピックのデータは、ステージング領域として使用される任意のANSI SQL-92標準準拠データベースにロードできます。マッピング・フロー・タブでの、JMS XMLと別のタイプのデータ・サーバー間でデータをロードするためのLKMの選択は、正常なデータ抽出を行うためにきわめて重要です。
Oracle Data Integratorには、JMS準拠メッセージのキューまたはトピックから、ステージング領域として使用される任意のANSI SQL-92標準準拠データベースにXMLでデータをロードするためのLKM JMS XML to SQLが用意されています。このLKMは、エージェントを使用して、選択されたメッセージをソース・キューまたはトピックから読み取り、動的に作成される一時ステージング表に結果を書き込みます。メッセージを確実に配信するために、メッセージ消費者(またはサブスクライバ)では、IKMによってデータが実際にターゲットに統合されるまで、読取りをコミットしません。ソース・データストアの1つがXML JMSメッセージである場合は、このLKMの使用を検討してください。
JMSプロバイダからXMLメッセージをロードするには、次のステップに従う必要があります。
-
JMS XMLソースからXMLメッセージを読み取る最初のマッピングでLKM JMS XML to SQLを使用し、その際にSYNCHRO_JMS_TO_XML LKMオプションを
Yes
に設定する必要があります。このオプションによって、キューまたはトピックから取得されるメッセージから、XMLスキーマが作成およびロードされます。 -
最後のマッピングで、JMS_COMMITを
Yes
に設定して、メッセージの消費をコミットする必要があります。
このナレッジ・モジュールのJMS固有のオプションは、表25-3を参照してください。
JMS XMLターゲットでのデータの統合
Oracle Data Integratorには、JMS XML用に最適化されたデータ統合戦略を実装するIKM SQL to JMS XML Appendが用意されています。このIKMは、任意のANSI SQL-92標準準拠ステージング領域からJMS準拠のメッセージのキューまたはトピックへ、XML形式でデータを統合します。
このIKMを使用するには、ステージング領域がターゲットと異なる必要があります。
JMS XMLターゲットにXMLデータを統合するには、次のステップに従う必要があります。
-
XMLスキーマをロードする最初のマッピングで、ROOT_TABLE (XMLファイルのルート要素に対応するモデルの表)の値を指定し、さらにINITIALIZE_XML_SCHEMAオプションを
Yes
に設定する必要があります。注意:
XMLスキーマのルート表は、通常、JMS XMLモデルの階層ツリー表示の最上位にあるデータストアに対応します。そのため、ROOT_TABLEパラメータには、このデータストアのリソース名の値を使用する必要があります。
-
マッピングによるデータストアのロードは、階層の順序に従って、階層の最上位から下位へ行う必要があります。XMLスキーマ階層の後続レベルをロードするマッピングでは、現在の階層レベルを上位レベルにリンクする外部キー属性をロードする必要があります。
たとえば、階層の2番目のレベル(ルート表の下のレベル)をロードする場合、外部キー属性を
0
(ゼロ)に設定する必要があります。これは、ルート表の初期化時にIKMによってルート表の主キーに設定される値が0であるためです。 -
最後のマッピングでは、XMLスキーマをJMSプロバイダに送信する必要があります。そのために、SYNCHRO_JMS_TO_XMLパラメータを
Yes
に設定します。
例
XMLファイル形式によって次のデータストア階層のスキーマが生成されるとします。
+ GEOGRAPHY_DIM (GEO_DIMPK, ...) | +--- COUNTRY (GEO_DIMFK, COUNTRYPK, COUNTRY_NAME, ...) | +--- REGION (COUNTRYFK, REGIONPK, REGION_NAME, ...)
この階層では、GEOGRAPHY_DIMがルート表で、そのGEOGRAPHY_DIMPK属性が初期化時に0
に設定されます。この表は、GEOGRAPHY_DIM、COUNTRY、REGIONの順にロードする必要があります。
-
XML階層の2番目のレベル(COUNTRY)のロード時に、このレベルをルート表のレベルとリンクするFKフィールドが
0
に設定されていることを確認します。上のモデルでは、COUNTRYのロード時に、0
に設定されているCOUNTRY.GEOGRAPHY_DIMFKをロードする必要があります。 -
また、REGIONのレコードをCOUNTRYレベルにリンクする必要があります。そのためには、COUNTRY内の親レコードに対応する値を指定して(
REGION.COUNTRYFK = COUNTRY.COUNTRYPK
)、REGION.COUNTRYFK属性をロードします。
XMLスキーマへのデータのロードの詳細は、「Oracle Data Integrator Driver for XMLの参照情報」を参照してください。
このIKMのJMS固有のKMオプションは、表25-3を参照してください。XMLメッセージ固有のオプションは太字で表記されています。
JMS XMLナレッジ・モジュール・オプション
JMS XMLのLKMおよびIKMのKMオプションは、表25-3を参照してください。XMLメッセージ固有のオプションは太字で表記されています。
ほとんどのオプションはLKMとIKMで同じですが、次の点のみ異なります。
-
INITIALIZE_XML_SCHEMAおよびROOT_TABLEオプションは、IKMのみで使用できます。
-
DELETE_TEMPORARY_OBJECTSおよびJMS_COMMITオプションは、LKMのみで使用できます。
-
ルーター(JMS XML)上でメッセージ消費をコミットするには、JMS_COMMITを
Yes
に設定します。
表25-3 JMS固有のKMオプション
オプション | 用途 | 説明 |
---|---|---|
CLIENTID |
読取り |
サブスクライバ識別文字列。 公開には使用されません。 |
DURABLE |
読取り |
D: セッションは永続的です。切断後もサブスクライバ定義がルーター上に残ることを示します。 |
INITIALIZE_XML_SCHEMA |
書込み |
空のXMLスキーマを初期化します。スキーマをロードする最初のマッピングで、このオプションを |
JMSDELIVERYMODE |
書込み |
JMS配信モード(1: 非永続、2: 永続)。永続メッセージはサーバーに残り、サーバーのクラッシュ時にリカバリされます。 |
JMSEXPIRATION |
書込み |
サーバー上でのメッセージの有効期限をミリ秒で指定します(0から4 000 000 000)。0の場合、メッセージの有効期限が切れることはありません。 警告: この有効期限を過ぎると、メッセージは期限切れとみなされ、トピックまたはキューからなくなります。マッピングの開発時には、このパラメータをゼロに設定することをお薦めします。 |
JMSPRIORITY |
書込み |
メッセージの相対的優先度: 0(最低)から9(最高)。 |
JMSTYPE |
書込み |
メッセージの名前(オプション)。 |
MESSAGEMAXNUMBER |
読取り |
取得されるメッセージの最大数(0から4 000 000 000)。0: すべてのメッセージが取得されます。 |
MESSAGESELECTOR |
読取り |
ルーター上でフィルタリングするための、ISO SQL構文のメッセージ・セレクタ。メッセージ・セレクタの詳細は、「JMSプロパティの使用」を参照してください。 |
MESSAGETIMEOUT |
読取り |
最初のメッセージの待機時間をミリ秒で示します(0から4 000 000 000)。MESSAGETIMEOUTが0の場合、タイムアウトは発生しません。 MESSAGETIMEOUTおよびMESSAGEMAXNUMBERの両方をゼロにすることはできません。 警告: このタイムアウト値が小さすぎると、マッピングによってメッセージが取得されない可能性があります。 |
NEXTMESSAGETIMEOUT |
読取り |
後続の各メッセージの待機時間をミリ秒で示します(0から4 000 000 000)。デフォルト値は1000です。 警告: この値が小さすぎると、マッピングによってトピックまたはキューにあるメッセージの一部のみが取得される場合があります。 |
ROOT_TABLE |
書込み |
XMLモデル階層のルートであるデータストアのリソース名。スキーマの最初のマッピング・ロードにのみ適用できるオプション(INITIALIZE_XML_SCHEMA=true)。ROOT_TABLE<>''およびINITIALIZE_XML_SCHEMA=trueの場合、IKMによってXMLスキーマのルート要素のレコードが挿入されます。 警告: XML構造のルート表への移入を行うマッピングがない場合にのみ使用してください。そうでない場合、重複するルート要素が発生します。 |
SENDMESSAGETYPE |
書込み |
送信するメッセージのタイプ(1 - BytesMessage、2 - TextMessage)。 |
SYNCHRO_XML_TO_JMS |
書込み |
XMLスキーマからXMLメッセージを生成し、このメッセージを送信します。スキーマXMLへの書込みを行う最後のマッピングで、このオプションを |