ヘッダーをスキップ
Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド
11gリリース1(11.1)
E05782-01
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

20 Oracle Messaging Gatewayのメッセージの変換

この章では、Oracle Messaging Gateway(MGW)で、あるメッセージ・システムから他のシステムにメッセージ・フォーマットを変換する方法を説明します。メッセージ・システムによってメッセージ・フォーマットが異なるため、メッセージをOracle Streams AQと他のシステム間で移動する場合は、通常、変換が必要になります。Java Message Service(JMS)メッセージは特別なケースです。JMSメッセージは、JMS宛先へのみ伝播できます。変換プロセスは容易です。

内容は次のとおりです。

20.1 Oracle Messaging GatewayのJMS以外のメッセージの変換

MGWでは、伝播中に、ソース側メッセージ・システム固有のメッセージ・フォーマットが宛先側メッセージ・システム固有のメッセージ・フォーマットに変換されます。MGWでは、標準型およびOracle Streams AQベースのモデルを使用して変換が行われます。

20.1.1 JMS以外のメッセージ変換プロセスの概要

MGWによってメッセージが伝播される場合、メッセージはソース・キュー・システム固有のフォーマットから宛先キュー・システム固有のフォーマットに変換されます。

通常、システム固有のメッセージには、メッセージ・ヘッダーおよびメッセージ本体が含まれます。ヘッダーには、Oracle Streams AQのメッセージ・プロパティ、WebSphere MQの固定ヘッダーなどの固定ヘッダー・フィールドが含まれます。このフィールドは、メッセージ・システム内のすべてのメッセージに存在します。本体には、Oracle Streams AQのペイロード、WebSphere MQのメッセージ本体またはTIB/Rendezvousのすべてのメッセージなどのメッセージの内容が含まれます。MGWでは、メッセージ・ヘッダーおよびメッセージ本体の両方の構成要素が変換されます。

図20-1は、2つのステージでJMS以外のメッセージを変換する方法を示したものです。メッセージは、最初にソース・キューのシステム固有のフォーマットからMGWの内部メッセージ・フォーマットに変換され、次に、内部メッセージ・フォーマットから宛先キューのシステム固有のフォーマットに変換されます。

図20-1 JMS以外のメッセージの変換

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

MGWエージェントでは、Oracle Streams AQのメッセージ・プロパティに類似したヘッダーと、MGWの標準型で表される本体で構成された、内部メッセージ・フォーマットが使用されます。

20.1.2 Oracle Messaging Gateway標準型

MGWでは標準型が定義され、Oracle Streams AQとOracle以外のメッセージ・システム間でのメッセージ変換がサポートされます。標準型は、メッセージ型をOracle DatabaseでのPL/SQL Oracleタイプの形式で表したものです。標準型は、RAWSYS.MGW_BASIC_MSG_TおよびSYS.MGW_TIBRV_MSG_Tです。

WebSphere MQ伝播では、標準型SYS.MGW_BASIC_MSG_TおよびRAWがサポートされます。TIB/Rendezvous伝播では、標準型SYS.MGW_TIBRV_MSG_TおよびRAWがサポートされます。


関連項目:

SYS.MGW_BASIC_MSG_TおよびSYS.MGW_TIBRV_MSG_Tの構文および属性情報は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_MGWMSGに関する項を参照してください。

20.1.3 メッセージ・ヘッダーの変換

MGWでは、Oracle Streams AQメッセージ・プロパティと、同じセマンティクスのOracle Streams AQメッセージ・プロパティに対応する値を含むOracle以外のメッセージ・ヘッダー・フィールドとの間で、デフォルトのマッピングが行われます。MGWによってマッピングが行われない場合、メッセージ・ヘッダー・フィールドはデフォルト値(通常、メッセージ・システムによって定義されたデフォルト値)に設定されます。

20.1.4 メッセージ変換を使用した任意のペイロード型の処理

Oracle Streams AQメッセージ間で変換する場合、MGWエージェントでは通常、標準型のみが使用されます。ただし、任意のペイロード型は、Oracle Streams AQのキュー・ペイロードとMGW標準型間で変換するために、ユーザー定義のOracle Streams AQのメッセージ変換機能によってサポートされます。

任意のADTペイロード(発信伝播)によってOracle Streams AQのキューからメッセージを伝播するMGWには、MGWの標準ユーザー定義型に対するマッピングが必要です。変換は、MGWエージェントによってOracle Streams AQのキューからメッセージがデキューされると起動されます。同様に、任意のユーザー定義型ペイロード(着信伝播)によってOracle Streams AQのキューにメッセージを伝播するMGWには、MGWの標準ユーザー定義型からのマッピングが必要です。変換は、MGWエージェントによってOracle Streams AQのキューにメッセージがエンキューされると起動されます。

図20-2 Oracle Streams AQメッセージの変換

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

変換は常にMGWエージェントとの関連で実行されますが、これはMGWエージェント・ユーザー(DBMS_MGWADM.CREATE_AGENTまたはDBMS_MGWADM.ALTER_AGENTを使用して指定したユーザー)には、変換ファンクションおよびOracle Streams AQペイロード型に対するEXECUTE権限が必要であることを意味しています。これは、PUBLICEXECUTE権限を付与するか、またはMGWエージェントのユーザーに直接EXECUTE権限を付与することによって実現できます。

変換によってMGW伝播ジョブを構成する手順は、次のとおりです。

  1. 変換ファンクションを作成します。

  2. MGWエージェントのユーザーまたはPUBLICに、ファンクションおよびそのファンクションが参照するオブジェクト型に対するEXECUTE権限を付与します。

  3. DBMS_TRANSFORM.CREATE_TRANSFORMATIONをコールして、変換を登録します。

  4. 変換によってMGW伝播ジョブを作成する場合はDBMS_MGWADM.CREATE_JOBを、既存のジョブを変更する場合はDBMS_MGWADM.ALTER_JOBをコールします。

これらのAPIの変換パラメータに渡される値は、ファンクション名ではなく登録された変換名である必要があります。たとえば、trans_sampleadt_to_mgw_basicは、例20-1で示した署名によって変換ファンクションを表すストアド・プロシージャです。


注意:

この例のすべてのコマンドは、変換を作成するコマンドを除き、MGW_ADMINISTRATOR_ROLEが付与されたユーザーとして実行する必要があります。

例20-1 変換ファンクションの署名

FUNCTION trans_sampleadt_to_mgw_basic(in_msg IN mgwuser.sampleADT)
RETURN SYS.MGW_BASIC_MSG_T;

例20-2に示すように、DBMS_TRANSFORM.CREATE_TRANSFORMATIONを使用して変換を作成できます。

例20-2 変換の作成

BEGIN
  DBMS_TRANSFORM.CREATE_TRANSFORMATION(
        schema         => 'mgwuser',
        name           => 'sample_adt_to_mgw_basic',
        from_schema    => 'mgwuser',
        from_type      => 'sampleadt',
        to_schema      => 'sys',
        to_type        => 'MGW_BASIC_MSG_T',
        transformation => 'mgwuser.trans_sampleadt_to_mgw_basic(user_data)');
END;

変換の作成後、伝播ジョブの作成時にこの変換をMGWに登録できます。例20-3では、ジョブjob_aq2mqを作成します。このジョブに対して、変換mgwuser.sample_adt_to_mgw_basicを使用して、Oracle Streams AQキューmgwuser.srcqからOracle以外のメッセージ・システム・キューdestq@mqlinkにメッセージが伝播されます。

例20-3 変換の登録

BEGIN
  DBMS_MGWADM.CREATE_JOB(
    job_name          =>   'job_aq2mq',
    propagation_type  =>    DBMS_MGWADM.OUTBOUND_PROPAGATION,
    source            =>   'mgwuser.srcq',
    destination       =>   'destq.mqlink',
    transformation    =>   'mgwuser.sample_adt_to_mgw_basic',
    exception_queue   =>   'mgwuser.excq');
END;

関連項目:

『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_MGWADM、DBMS_MGWMSGおよびDBMS_TRANSFORMに関する項

通常、ユーザー定義の変換を実行中に発生するエラーはメッセージ変換例外とみなされ、メッセージは例外キューに移動されます(存在する場合)。

20.1.5 論理変更レコードの処理

MGWでは、論理変更レコード(LCR)を伝播する機能を提供しています。変換の作成を支援し、ペイロード型ANYDATAでキューに格納されているLCR行およびDDL LCRの両方の伝播を処理するルーチンが提供されています。LCRは、適切なメッセージ型で格納されているXML文字列として伝播されます。


注意:

LCR伝播については、XDBパッケージをロードする必要があります。

Oracle Streamsでは、ANYDATAキューを使用してLCRを格納するため、ANYDATAキューが発信伝播のソースとなります。変換では最初にMGWルーチンDBMS_MGWMSG.LCR_TO_XMLを使用して、LCRを含むANYDATAオブジェクトをXML型オブジェクトに変換する必要があります。ANYDATAオブジェクトにLCRが含まれない場合は、このルーチンでエラーが発生します。次に、LCRのXML文書の文字列がXML型から抽出され、適切なMGW標準型(SYS.MGW_BASIC_MSG_TまたはSYS.MGW_TIBRV_MSG_T)に配置されます。

例20-4は、LCR発信伝播用に使用される変換を簡素化して示したものです。変換によって、LCRを含むANYDATAペイロードがSYS.MGW_TIBRV_MSG_Tオブジェクトに変換されます。LCRをXML文書として表す文字列が、ORACLE_LCRというフィールドに配置されます。

例20-4 発信LCRの変換

create or replace function any2tibrv(adata in anydata)
return SYS.MGW_TIBRV_MSG_T is
    v_xml   XMLType;
    v_text  varchar2(2000);
    v_tibrv sys.mgw_tibrv_msg_t;
BEGIN
    v_xml   := dbms_mgwmsg.lcr_to_xml(adata);
    -- assume the lcr is smaller than 2000 characters long.
    v_text  := v_xml.getStringVal();
    v_tibrv := SYS.MGW_TIBRV_MSG_T.CONSTRUCT;
    v_tibrv.add_string('ORACLE_LCR', 0, v_text);
    return v_tibrv;
END any2tibrv;

LCR着信伝播の場合、MGW標準型(SYS.MGW_BASIC_MSG_TまたはSYS.MGW_TIBRV_MSG_T)が変換ソースの型となります。LCRをXML文書のフォーマットで表す文字列は、標準型に含まれる必要があります。変換ファンクションはメッセージから文字列を抽出し、そこからXML型オブジェクトを作成し、MGWルーチンDBMS_MGWMSG.XML_TO_LCRを使用してLCRを含むANYDATAオブジェクトに変換する必要があります。元のXML文書がLCRを表していない場合は、このルーチンでエラーが発生します。

例20-5は、LCR着信伝播用に使用される変換を簡素化して示したものです。変換によって、LCRを表すXML文字列を含むフィールドがあるSYS.MGW_TIBRV_MSG_Tオブジェクトが、ANYDATAオブジェクトに変換されます。LCRをXML文書として表す文字列が、ORACLE_LCRというフィールドから取得されます。

例20-5 着信LCRの変換

create or replace function tibrv2any(tdata in sys.mgw_tibrv_msg_t)
return anydata is
    v_field   sys.mgw_tibrv_field_t;
    v_xml     XMLType;
    v_text    varchar2(2000);
    v_any     anydata;
BEGIN
    v_field := tdata.get_field_by_name('ORACLE_LCR');
    -- type checking
    v_text  := v_field.text_value;
    -- assume it is not null
    v_xml  := XMLType.createXML(v_text);
    v_any  := dbms_mgwmsg.xml_to_lcr(v_xml);
    return v_any;
END tibrv2any;


関連項目:

  • 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_MGWMSGに関する項

  • LCR変換の詳細例は、ORACLE_HOME/mgw/samples/lcrを参照してください。


20.2 WebSphere MQに対するメッセージ変換

MGWによって、MGW標準型とWebSphere MQ固有のメッセージ・フォーマット間の変換が行われます。WebSphere MQ固有のメッセージは、固定されたメッセージ・ヘッダーとメッセージ本体で構成されます。メッセージ本体は、TEXT値またはRAW(バイト)値のいずれかとして処理されます。WebSphere MQ伝播用にサポートされている標準型は、SYS.MGW_BASIC_MSG_TRAWです。

図20-3 MGW_BASIC_MSG_T使用によるWebSphere MQのメッセージ変換

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

図20-3は、MGW WebSphere MQドライバで標準型SYS.MGW_BASIC_MSG_Tを使用して実行されるメッセージ変換を示したものです。発信伝播の場合、ドライバによって、Oracle Streams AQメッセージ・プロパティおよび標準型メッセージが、固定ヘッダーおよびメッセージ本体を含むWebSphere MQシステム固有のメッセージにマップされます。着信伝播の場合、ドライバによって、システム固有のメッセージが一連のOracle Streams AQメッセージ・プロパティおよび標準型メッセージにマップされます。標準型がRAWの場合、標準型ヘッダーが存在しないこと以外はマッピング方法は同じです。

20.2.1 WebSphere MQメッセージ・ヘッダーのマッピング

MGW発信伝播ジョブで使用される標準型がRAWの場合、WebSphere MQヘッダー情報はRAWメッセージ本体からは設定されません。同様に着信伝播の場合、WebSphere MQヘッダー情報はRAWメッセージ本体には保持されません。ただし、MGW標準型SYS.MGW_BASIC_MSG_Tには、発信伝播のWebSphere MQヘッダー・フィールドを指定する際に使用でき、さらに着信伝播のWebSphere MQヘッダー・フィールドを保持できるヘッダーがあります。

この項では、SYS.MGW_BASIC_MSG_Tを標準型として使用してWebSphere MQメッセージ・システムに対してサポートされているメッセージ・プロパティについて説明します。表20-1に、WebSphere MQヘッダー・プロパティの記述に使用されるMGWの{名前, 値}の組の定義を示します。最初の列は、SYS.MGW_BASIC_MSG_TヘッダーのSYS.MGW_NAME_VALUE_T.NAMEフィールドの有効文字列値です。2番目の列は、名前に対応するSYS.MGW_NAME_VALUE_T.TYPE値です。(カッコ内の数字については、「表20-1に関する注意」を参照してください)。


関連項目:

『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_MGWMSGに関する項

着信伝播の場合、WebSphere MQドライバによって、ソース・メッセージ・ヘッダーに基づいて{名前, 値}の組が生成され、SYS.MGW_BASIC_MSG_T型の標準型メッセージのヘッダー部分に格納されます。発信伝播の場合、WebSphere MQドライバによって、SYS.MGW_BASIC_MSG_T標準型メッセージのヘッダー部分に格納されたこれらのプロパティに対する{名前, 値}の組から、メッセージ・ヘッダーおよびエンキュー・オプションが設定されます。

表20-1 WebSphere MQのヘッダー値に対するMGWの名前

MGWの名前 MGWの型 WebSphere MQプロパティ名 用途
MGW_MQ_accountingToken
RAW_VALUE (size 32)
accountingToken
発信(1)、着信
MGW_MQ_applicationIdData
TEXT_VALUE (size 32)
applicationIdData
発信(1)、着信
MGW_MQ_applicationOriginData
TEXT_VALUE (size 4)
applicationOriginData
発信(1)、着信
MGW_MQ_backoutCount
INTEGER_VALUE
backoutCount
着信
MGW_MQ_characterSet
INTEGER_VALUE
characterSet
発信、着信
MGW_MQ_correlationId
RAW_VALUE (size 24)
correlationId
発信(1)、着信
MGW_MQ_encoding
INTEGER_VALUE
encoding
発信、着信
MGW_MQ_expiry
INTEGER_VALUE
expiry
発信、着信
MGW_MQ_feedback
INTEGER_VALUE
feedback
発信、着信
MGW_MQ_format
TEXT_VALUE (size 8)
format
発信(1)、着信
MGW_MQ_groupId
RAW_VALUE (size 24)
groupId
発信(1)、着信
MGW_MQ_messageFlags
INTEGER_VALUE
messageFlags
発信、着信
MGW_MQ_messageId
RAW_VALUE (size 24)
messageId
発信、着信
MGW_MQ_messageSequenceNumber
INTEGER_VALUE
messageSequenceNumber
発信、着信
MGW_MQ_messageType
INTEGER_VALUE
messageType
発信、着信
MGW_MQ_offset
INTEGER_VALUE
offset
発信、着信
MGW_MQ_originalLength
INTEGER_VALUE
originalLength
発信、着信
MGW_MQ_persistence
INTEGER_VALUE
persistence
着信
MGW_MQ_priority
INTEGER_VALUE
priority
発信、着信
MGW_MQ_putApplicationName
TEXT_VALUE (size 28)
putApplicationName
発信(1)、着信
MGW_MQ_putApplicationType
INTEGER_VALUE
putApplicationType
発信(1)、着信
MGW_MQ_putDateTime
DATE_VALUE
putDateTime
着信
MGW_MQ_putMessageOptions
INTEGER_VALUE
putMessageOptions
発信(1)(2)
MGW_MQ_replyToQueueManagerName
TEXT_VALUE (size 48)
replyToQueueManagerName
発信、着信
MGW_MQ_replyToQueueName
TEXT_VALUE (size 48)
replyToQueueName
発信、着信
MGW_MQ_report
INTEGER_VALUE
report
発信(1)、着信
MGW_MQ_userId
TEXT_VALUE (size 12)
userId
発信、着信

表20-1に関する注意

  1. この表での使用方法には、WebSphere MQの制約が適用されます。たとえば、送信メッセージに対してMGW_MQ_accountingTokenが設定されている場合、WebSphere MQの値は、MGW_MQ_putMessageOptionsがWebSphere MQ定数のMQPMD_SET_ALL_CONTEXTに設定されていないかぎり、オーバーライドされます。

  2. MGW_MQ_putMessageOptionsは、WebSphere MQ Base JavaのQueue.put()メソッドに対するputMessageOptions引数として使用されます。これはWebSphere MQのヘッダー情報に含まれないため、実際のメッセージ・プロパティではありません。

    WebSphere MQ Base JavaのMQQueueManager.accessQueueメソッドに対するopenOptions引数の値は、DBMS_MGWADM.REGISTER_FOREIGN_QUEUE をコールしてWebSphere MQキューが登録されるときに指定されます。これらの値の間には依存関係が存在する場合があります。たとえば、MGW_MQ_putMessageOptionsMQPMD_SET_ALL_CONTEXTを含めるには、MQ_openMessageOptionsキュー・オプションにMQOO_SET_CONTEXTを含める必要があります。

    MGWエージェントによって、指定可能なすべての値にMQPMO_SYNCPOINTという値が追加されます。

MGWによって、次の2つのWebSphere MQのメッセージ・ヘッダー・フィールドのデフォルト値が設定されます。messageTypeのデフォルト値はMQMT_DATAGRAMに、putMessageOptionsのデフォルト値はMQPMO_SYNCPOINTに設定されます。

MGWには、Oracle Streams AQのメッセージ・プロパティとWebSphere MQのヘッダー・フィールド間の2つのデフォルト・マッピングがあります。

1つは、キュー内でメッセージが使用可能になったときのメッセージのTime-to-Liveを表すOracle Streams AQのメッセージ・プロパティのexpirationを、メッセージのTime-to-Liveを表すWebSphere MQのヘッダー・フィールドのexpiryにマップします。発信伝播の場合、expiryに使用する値はキュー内でメッセージが使用可能になった時刻をexpirationから引き算し、10分の1秒単位の値に変換します。Oracle Streams AQ値のNEVERは、MQEI_UNLIMITEDにマップされます。着信伝播の場合、expirationは単に秒単位に変換されたexpiryです。WebSphere MQ値のMQEI_UNLIMITEDは、NEVERにマップされます。

その他のデフォルトは、Oracle Streams AQのメッセージ・プロパティのpriorityをWebSphere MQのヘッダー・フィールドのpriorityとともにマップします。表20-2で説明します。

表20-2 伝播のデフォルト優先順位のマッピング

伝播型 メッセージ・システム 優先順位の値
発信 Oracle Streams AQ 0 1 2 3 4 5 6 7 8 9
発信 WebSphere MQ 9 8 7 6 5 4 3 2 1 0
着信 Oracle Streams AQ 9 8 7 6 5 4 3 2 1 0
着信 WebSphere MQ 0 1 2 3 4 5 6 7 8 9


注意:

発信伝播の場合、0未満のOracle Streams AQ優先順位は、WebSphere MQ優先順位9にマップされ、9より大きいOracle Streams AQ優先順位はWebSphere MQ優先順位0にマップされます。

20.2.2 WebSphere MQ発信伝播

発信伝播用のメッセージ変換が指定されていない場合は、Oracle Streams AQのソース・キューのペイロード型は、SYS.MGW_BASIC_MSG_TまたはRAWである必要があります。メッセージ変換が指定されている場合、変換のターゲットのユーザー定義型はSYS.MGW_BASIC_MSG_Tである必要がありますが、ソースのユーザー定義型はOracle Streams AQによってサポートされている任意のユーザー定義型が有効です。

Oracle Streams AQキューのペイロードがRAWの場合、WebSphere MQから取得されるメッセージには、RAWバイトの値に設定されたメッセージ本体と、デフォルトでは「MGW_Byte」値に設定されたformatフィールドがあります。

Oracle Streams AQキューのペイロードまたは変換ターゲットのユーザー定義型がSYS.MGW_BASIC_MSG_Tの場合、メッセージは次のようにWebSphere MQの固有メッセージにマップされます。

  • WebSphere MQの固定ヘッダー・フィールドは、「WebSphere MQメッセージ・ヘッダーのマッピング」で説明されているように、標準型メッセージの内部Oracle Streams AQメッセージ・プロパティおよびSYS.MGW_BASIC_MSG_T.header属性に基づいています。

  • 標準型メッセージにTEXT本体がある場合は、WebSphere MQのフォーマット・ヘッダー・フィールドは、ヘッダー・プロパティMGW_MQ_formatによってオーバーライドされないかぎりMQFMT_STRINGに設定されます。メッセージ本体はテキストとみなされます。

  • 標準型メッセージにRAW本体がある場合は、WebSphere MQのフォーマット・ヘッダー・フィールドは、ヘッダー・プロパティMGW_MQ_formatによってオーバーライドされないかぎりMGW_Byteに設定されます。メッセージ本体はRAWバイトとみなされます。

  • 標準型メッセージに、TEXTおよびRAWの両方の本体が含まれる場合、メッセージ変換は失敗します。

  • 標準型メッセージに、TEXT本体またはRAW本体のいずれも含まれていない場合、メッセージ本体は設定されず、WebSphere MQフォーマット・ヘッダー・フィールドはMQFMT_NONEとなります。

  • 標準型メッセージに小さい値セットと大きい値セット(空ではないSYS.MGW_BASIC_MSG_T.TEXT_BODY.small_valueおよびSYS.MGW_BASIC_MSG_T.TEXT_BODY.large_value)の両方があるTEXT本体が含まれる場合は、メッセージ変換は失敗します。

  • 標準型メッセージに、小さい値セットと大きい値セット(空ではないSYS.MGW_BASIC_MSG_T.RAW_BODY.small_valueおよびSYS.MGW_BASIC_MSG_T.RAW_BODY.large_value)の両方があるRAW本体が含まれる場合は、メッセージ変換は失敗します。

ジョブ・オプションPreserveMessageIDが値TRUEに指定されている場合は、WebSphereメッセージ・ヘッダーのcorrelationIdフィールドがAQソース・メッセージ識別子に設定されます。correlationIdの値は、"AQMSGID:"+AQ_msgid形式の24バイト値となります。AQ_msgidは、16バイトのStreams AQメッセージ識別子を表します。

20.2.3 WebSphere MQ着信伝播

着信伝播に対するメッセージ変換が指定されていない場合は、Oracle Streams AQの宛先キューのペイロード型は、SYS.MGW_BASIC_MSG_TまたはRAWである必要があります。メッセージ変換が指定されている場合、変換のソースのユーザー定義型はSYS.MGW_BASIC_MSG_Tである必要がありますが、宛先のユーザー定義型はOracle Streams AQによってサポートされている任意のユーザー定義型が有効です。

Oracle Streams AQキューのペイロードがRAWで、着信WebSphere MQメッセージにMQFMT_STRINGformatが含まれる場合、メッセージ変換は失敗します。そうでない場合は、メッセージ本体はRAWバイトとみなされ、宛先キューに直接エンキューされます。バイト数が32KBを超える場合は、メッセージ変換は失敗します。実際の限度は、32767バイトではなく32512バイトです。

Oracle Streams AQキューのペイロードまたは変換ソースのユーザー定義型がSYS.MGW_BASIC_MSG_Tの場合、WebSphere MQメッセージは次のようにSYS.MGW_BASIC_MSG_Tメッセージにマップされます。

  • 特定のWebSphere MQのヘッダー・フィールドは、前に説明したようにOracle Streams AQのメッセージ・プロパティにマップされます。

  • 標準型メッセージのSYS.MGW_BASIC_MSG_T.header属性は、表20-1に示すとおり、WebSphere MQヘッダー・フィールドに基づいて{名前, 値}の組に設定されます。これらの値は、WebSphere MQのメッセージ・ヘッダーの当初の内容を保持します。

  • WebSphere MQのformatヘッダー・フィールドがMQFMT_STRINGの場合、WebSphere MQのメッセージ本体はテキストとして処理され、その値はSYS.MGW_BASIC_MSG_T.text_bodyにマップされます。他のformat値の場合、メッセージ本体はRAWバイトとして処理され、その値はSYS.MGW_BASIC_MSG_T.raw_bodyにマップされます。

20.3 TIB/Rendezvousに対するメッセージ変換

MGWでは、TIB/Rendezvousメッセージはフィールドのセットおよび追加情報とみなされます。図20-4は、MGWとTIB/Rendezvousの間におけるメッセージの変換方法を示したものです。

図20-4 TIB/Rendezvousに対するメッセージ変換

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

メッセージ変換障害が発生すると、メッセージはMGWによって、ソース・キュー内の残りのメッセージの伝播を続行できるように例外キュー(例外キューがある場合)に移されます。TIB/Rendezvousからの着信伝播では、例外キューは登録済サブジェクトです。

TIB/RendezvousのフィールドのTIB/Rendezvousのワイヤ・フォーマットのデータ型は、符号のない整数およびネストされたメッセージ型以外はすべてサポートされています。今回のリリースでは、ユーザー定義のカスタム・データ型はサポートされていません。メッセージにサポートされていないデータ型のデータが含まれる場合は、処理時にメッセージ変換障害が発生します。メッセージ変換障害が発生すると、例外キューがある場合は、失敗したメッセージはソース・キューから例外キューに移されます。

表20-3は、MGWがTIB/Rendezvousの固有メッセージと標準のユーザー定義型とで変換を行う場合に使用されるデータ型マッピングを示したものです。サポートされているTIB/Rendezvousの各ワイヤ・フォーマット型に対して、データの格納に使用されるOracleタイプおよびその型を表すDBMS_MGWMSG定数が示されています。

表20-3 TIB/Rendezvousデータ型のマッピング

TIB/Rendezvousワイヤ・フォーマット Oracleタイプ ユーザー定義型フィールド型
Bool NUMBER TIBRVMSG_BOOL
F32 NUMBER TIBRVMSG_F32
F64 NUMBER TIBRVMSG_F64
I8 NUMBER TIBRVMSG_I8
I16 NUMBER TIBRVMSG_I16
I32 NUMBER TIBRVMSG_I32
I64 NUMBER TIBRVMSG_I64
U8 未サポート 未サポート
U16 未サポート 未サポート
U32 未サポート 未サポート
U64 未サポート 未サポート
IPADDR32 VARCHAR2 TIBRVMSG_IPADDR32
IPPORT16 NUMBER TIBRVMSG_IPPORT16
DATETIME DATE TIBRVMSG_DATETIME
F32ARRAY SYS.MGW_NUMBER_ARRAY_T TIBRVMSG_F32ARRAY
F64ARRAY SYS.MGW_NUMBER_ARRAY_T TIBRVMSG_F64ARRAY
I8ARRAY SYS.MGW_NUMBER_ARRAY_T TIBRVMSG_I8ARRAY
I16ARRAY SYS.MGW_NUMBER_ARRAY_T TIBRVMSG_I16ARRAY
I32ARRAY SYS.MGW_NUMBER_ARRAY_T TIBRVMSG_I32ARRAY
I64ARRAY SYS.MGW_NUMBER_ARRAY_T TIBRVMSG_I64ARRAY
U8ARRAY 未サポート 未サポート
U16ARRAY 未サポート 未サポート
U32ARRAY 未サポート 未サポート
U64ARRAY 未サポート 未サポート
MSG 未サポート 未サポート
OPAQUE RAWまたはBLOB TIBRVMSG_OPAQUE
STRING VARCHAR2またはCLOB TIBRVMSG_STRING
XML RAWまたはBLOB TIBRVMSG_XML

Oracle Streams AQとTIB/Rendezvous間の伝播に対しては、MGWではOracle Streams AQのペイロード型RAWSYS.MGW_TIBRV_MSG_Tを直接サポートしています。その他のOracle Streams AQのペイロード型をサポートするには、変換を指定する必要があります。

20.3.1 TIB/Rendezvousに対するAQメッセージ・プロパティ・マッピング

この項では、Oracle Streams AQのメッセージ・プロパティとTIB/Rendezvousのフィールドの間のマッピングについて説明します。このマッピングを使用して、発信伝播中にはStreams AQメッセージ・プロパティが保持され、着信伝播中にはStreams AQメッセージ・プロパティが設定されます。

表20-4は、TIB/Rendezvousのフィールドを使用してサポートされているStreams AQメッセージ・プロパティを示したものです。第1列は、Streams AQメッセージ・プロパティのDBMS_AQ.MESSAGE_PROPERTIES_Tフィールドを示します。第2列と第3列は、TIB/Rendezvousのフィールドに使用される名前とデータ型を示します。最後の列は、メッセージ・プロパティが着信伝播と発信伝播に対してサポートされているかどうかを示します。

表20-4 Oracle Streams AQメッセージ・プロパティに対するTIB/RendezvousおよびMGWの名前

Oracle Streams AQメッセージ・プロパティ MGWの名前 TIB/Rendezvousワイヤ・フォーマット・データ型 用途
priority MGW_AQ_priority TibrvMsg.I32 発信、着信
expiration MGW_AQ_expiration TibrvMsg.I32 発信、着信
delay MGW_AQ_delay TibrvMsg.I32 発信、着信
correlation MGW_AQ_correlation TibrvMsg.STRING 発信、着信
exception_queue MGW_AQ_exception_queue TibrvMsg.STRING 発信、着信
enqueue_time MGW_AQ_enqueue_time TibrvMsg.DATETIME 発信
original_msgid MGW_AQ_original_msgid TibrvMsg.OPAQUE 発信
msgid(1) MGW_AQ_messageID TibrvMsg.OPAQUE 発信

表20-4に関する注意

  1. Streams AQプロパティmsgidは、DBMS_AQ.MESSAGE_PROPERTIES_Tレコードの特定のフィールドではなくStreams AQメッセージ識別子を表します。

20.3.2 TIB/Rendezvous発信伝播

発信伝播に対する伝播変換が指定されていない場合は、Oracle Streams AQのソース・キューのペイロード型は、SYS.MGW_TIBRV_MSG_TまたはRAWである必要があります。伝播変換が指定されている場合、変換のターゲットのユーザー定義型はSYS.MGW_TIBRV_MSG_Tである必要がありますが、ソースのユーザー定義型はOracle Streams AQによってサポートされている任意のユーザー定義型が有効です。

Oracle Streams AQキューのペイロードまたは変換ターゲットのユーザー定義型がSYS.MGW_TIBRV_MSG_Tの場合は、次のようになります。

  • ソース・メッセージのすべてのフィールドは、TIB/Rendezvousから取得されるメッセージのTIB/Rendezvousメッセージ・フィールドに変換されます。

  • reply_subject属性がNULLではない場合は、応答サブジェクトの追加情報が設定されます。

  • send_subjectフィールドは無視されます。

Oracle Streams AQキューのペイロードがRAWの場合は、次のようになります。

  • 結果メッセージには、値がTibrvMsg.OPAQUEMGW_RAW_MSGという名前のフィールドが含まれます。フィールドIDは0に設定されます。

ジョブ・オプションAQ_MsgPropertiesが値TRUEに指定されている場合は、MGWエージェントによって、TIB/Rendezvousメッセージの各Streams AQメッセージ・プロパティを保持するフィールドが表20-4に従って生成されます。

ジョブ・オプションPreserveMessageIDが値TRUEに指定されている場合、Streams AQメッセージID(msgid)は表20-4に従ってTIB/Rendezvousメッセージに保持されます。

20.3.3 TIB/Rendezvous着信伝播

着信伝播に対する伝播変換が指定されていない場合、Oracle Streams AQの宛先キューのペイロード型はRAWまたはSYS.MGW_TIBRV_MSG_Tである必要があります。伝播変換が指定されている場合、変換ターゲットのユーザー定義型にはOracle Streams AQでサポートされている任意のユーザー定義型が有効ですが、変換ソースのユーザー定義型はSYS.MGW_TIBRV_MSG_Tである必要があります。

Oracle Streams AQキューのペイロードまたは変換ソースのユーザー定義型がSYS.MGW_TIBRV_MSG_Tの場合は、次のようになります。

  • TIB/Rendezvousのソース・メッセージの個々のフィールドは、結果としてSYS.MGW_TIBRV_MSG_T型のメッセージのフィールドに変換されます。

  • MGWエージェントによって、TIB/Rendezvousのソース・メッセージから送信サブジェクト名を抽出し、SYS.MGW_TIBRV_MSG_Tsend_subject属性を設定します。通常、送信サブジェクト名は登録済の伝播ソース・キューのサブジェクト名と同じですが、ワイルドカードを使用する場合は異なる場合があります。

  • MGWエージェントによって、TIB/Rendezvousのソース・メッセージから応答サブジェクト名を抽出し、SYS.MGW_TIBRV_MSG_Treply_subject属性を設定します。

  • TIB/Rendezvousのソース・メッセージに3つを超える大きなテキスト・フィールド(4000バイトを超えるテキスト)または3つを超える大きなバイト・フィールド(2000バイトを超える)が含まれる場合は、メッセージ変換は失敗します。

Oracle Streams AQキューのペイロードがRAWの場合は、次のようになります。

  • TIB/Rendezvousのソース・メッセージにTibrvMsg.OPAQUE型またはTibrvMsg.XML型のMGW_RAW_MSGという名前のフィールドが含まれる場合、Oracle Streams AQのメッセージ・ペイロードはフィールド・データです。フィールド名とIDは無視されます。該当するフィールドがない、またはフィールドの型が予想したものと異なる場合は、メッセージ変換障害が発生します。

  • RAWデータ・サイズが32KBを超える場合は、メッセージ変換障害が発生します。これは、バインド変数に許可されたデータ・サイズ制限によるものです。また、実際の限度は32767ではなく32512です。

ジョブ・オプションAQ_MsgPropertiesが値TRUEで指定されている場合は、MGWエージェントによって、TIB/Rendezvousの当初のメッセージの中から予約したフィールド名のフィールドが検索されます。表20-4は、フィールド名文字列とTIB/Rendezvousのメッセージで使用される対応する値を示したものです。

該当するフィールドがある場合は、MGWエージェントでは、デフォルト値ではなくフィールド値を使用して対応するOracle Streams AQのメッセージ・プロパティが設定されます。同じ名前のフィールドが複数ある場合は、最初のフィールドのみが使用されます。Oracle Streams AQのキュー・ペイロードがRAWの場合のみ、フィールドが結果のペイロードから削除されます。予約名のあるフィールドのデータ型が予想したものと異なる場合は、メッセージ変換障害が発生します。


関連項目:

データ型の値は、『PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_MGWMSGに関する項を参照してください。

20.4 JMSメッセージ

MGWではメッセージの内容を変更することなく、Oracle JMSシステムとOracle JMS以外のシステム間でJMSメッセージのみを伝播します。図20-5は、JMSメッセージ伝播を示したものです。

MGWでは、標準のJMSメッセージ型のみがサポートされています。次のものはサポートされていません。

図20-5 JMSメッセージの伝播

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

この説明のために、JMSメッセージは5つのJMSメッセージ・インタフェースの1つを実装するクラスのJavaオブジェクトとします。表20-5は、JMSメッセージ・インタフェースと対応するOracle JMSのユーザー定義型を示したものです。また表には、5つの特定の型のいずれかであるインタフェースのjavax.jms.Message、および一般的なOracle JMS型のSYS.AQ$_JMS_MESSAGEも示します。

表20-5 Oracle JMSメッセージの変換

JMSメッセージ ユーザー定義型
javax.jms.TextMessage SYS.AQ$_JMS_TEXT_MESSAGE
javax.jms.BytesMessage SYS.AQ$_JMS_BYTES_MESSAGE
javax.jms.MapMessage SYS.AQ$_JMS_MAP_MESSAGE
javax.jms.StreamMessage SYS.AQ$_JMS_STREAM_MESSAGE
javax.jms.ObjectMessage SYS.AQ$_JMS_OBJECT_MESSAGE
javax.jms.Message SYS.AQ$_JMS_MESSAGE

伝播ジョブを有効にするとMGWエージェントによって、伝播ソースまたは宛先に対するOracle Streams AQのペイロード型がチェックされます。型が、表20-5に示した型またはANYDATAである場合は、メッセージ伝播が実行されます。そうでない場合は、例外が記録され伝播は実行されません。

MGWエージェントは、ソース・メッセージの当初のメッセージ識別子を保持するために、宛先キューに送信されるJMSメッセージにJMS StringプロパティOracleMGW_OriginalMessageIDを追加する場合があります。このプロパティが追加されるのは、PreserveMessageIDジョブ・オプションが値TRUEに指定されている場合です。また、メッセージ変換障害時に例外キューに移されたメッセージについても、このプロパティが追加されます。

20.4.1 JMS発信伝播

Oracle Streams AQキューからメッセージをデキューすると、Oracle JMSによって表20-5に示すユーザー定義型のインスタンスがJMSメッセージに変換されます。さらに、ANYDATAのインスタンスを内容に応じてJMSメッセージに変換できます。

ペイロード型ANYDATAのキューは、JMSメッセージにマップされないメッセージを保持できます。MGWではメッセージのデキューはできません。エラーが記録され、そのキューからのメッセージの伝播はメッセージが削除されるまで続行されません。

20.4.2 JMS着信伝播

WebSphere MQ JMSを使用して正常にデキューされるメッセージは、すべてJMSメッセージです。Oracle JMSを使用してエンキューする前にメッセージを変換する必要はありません。ただし、伝播宛先のペイロードのユーザー定義型が着信メッセージの型を受け入れない場合は例外が記録され、メッセージが例外キュー内に配置されます。このような型の不一致の例には、JMS TextMessageとキュー・ペイロード型SYS.AQ$_JMS_BYTES_MESSAGEなどがあります。