日本語PDF

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

次のトピックでは、Oracle Messaging Gateway (MGW)がメッセージ・フォーマットを1つのメッセージ・システムから別のメッセージ・システムに変換する方法について説明します。通常、変換が必要になるのはメッセージをOracle Database Advanced Queuingと別のシステムの間で移動する場合で、これは異なるメッセージ・システムでは異なるメッセージ・フォーマットが使用されているためです。Java Message Service (JMS)メッセージは特殊です。JMSメッセージはJMS宛先にのみ伝播可能なので、変換は単純な処理になります。

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

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

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

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

ネイティブなメッセージには、通常、メッセージ・ヘッダーとメッセージ本体が含まれます。ヘッダーには、メッセージ・システム内のすべてのメッセージに存在する固定ヘッダー・フィールドが含まれます。たとえば、Oracle Database Advanced Queuingのメッセージ・プロパティやWebSphere MQの固定ヘッダーなどです。本体には、Oracle Database Advanced Queuingのペイロード、WebSphere MQのメッセージ本体、またはTIB/Rendezvousのメッセージ全体などのメッセージ・コンテンツが含まれます。MGWでは、メッセージ・ヘッダーおよびメッセージ本体コンポーネントの両方が変換されます。

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

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

図20-1の説明が続きます
「図20-1 JMS以外のメッセージの変換」の説明

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

Oracle Messaging Gateway標準型

MGWでは標準型が定義され、Oracle Database Advanced Queuingと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に関する項を参照してください。

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

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

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

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

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

図20-2 Oracle Database Advanced Queuingのメッセージ変換

図20-2の説明が続きます
「図20-2 Oracle Database Advanced Queuingメッセージの変換」の説明

変換は常にMGWエージェントとの関連で実行されますが、これはMGWエージェント・ユーザー(DBMS_MGWADM.CREATE_AGENTまたはDBMS_MGWADM.ALTER_AGENTを使用して指定したユーザー)には、変換ファンクションおよびOracle Database Advanced Queuingペイロード型に対する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をコールします。

例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;

例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;

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

注意:

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

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

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

関連項目:

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

論理変更レコードの処理

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というフィールドに配置されます。

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-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;

例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;

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

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

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

図20-3の説明が続きます
「図20-3 SYS.MGW_BASIC_MSG_T使用によるWebSphere MQのメッセージ変換」の説明

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

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値です。(括弧内の数値の詳細は、各行はメッセージ・ゲートウェイの名前に対応します。第1列は名前、第2列はメッセージ・ゲートウェイの型、第3列は対応するWebSphere MQプロパティ名、第4列はその用途を示します。を参照してください。)

着信伝播の場合、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 Database Advanced Queuingのメッセージ・プロパティとWebSphere MQのヘッダー・フィールド間の2つのデフォルト・マッピングがあります。

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

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

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

伝播型 メッセージ・システム 優先順位の値

発信

Oracle Database Advanced Queuing

0

1

2

3

4

5

6

7

8

9

発信

WebSphere MQ

9

8

7

6

5

4

3

2

1

0

着信

Oracle Database Advanced Queuing

9

8

7

6

5

4

3

2

1

0

着信

WebSphere MQ

0

1

2

3

4

5

6

7

8

9

注意:

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

WebSphere MQ発信伝播

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

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

Oracle Database Advanced Queuingキューのペイロードまたは変換ターゲットのADTがSYS.MGW_BASIC_MSG_Tの場合、メッセージは次のようにWebSphere MQの固有メッセージにマップされます。

  • WebSphere MQの固定ヘッダー・フィールドは、「WebSphere MQメッセージ・ヘッダーのマッピング」で説明されているように、標準型メッセージの内部Oracle Database Advanced Queuingメッセージ・プロパティおよび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バイトのDatabase AQメッセージ識別子を表します。

WebSphere MQ着信伝播

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

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

Oracle Database Advanced Queuingキューのペイロードまたは変換ソースのADTがSYS.MGW_BASIC_MSG_Tの場合、WebSphere MQメッセージは次のようにSYS.MGW_BASIC_MSG_Tメッセージにマップされます。

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

  • 標準型メッセージの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にマップされます。

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

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

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

図20-4の説明が続きます
「図20-4 TIB/Rendezvousに対するメッセージ変換」の説明

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

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

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

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

TIB/Rendezvousワイヤ・フォーマット Oracle型 ADTフィールド型

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 Database Advanced QueuingおよびTIB/Rendezvous間の伝播の場合、MGWは、Oracle Database Advanced Queuingのペイロード型RAWおよびSYS.MGW_TIBRV_MSG_Tを直接サポートします。その他のOracle Database Advanced Queuingのペイロード型をサポートするには、変換を指定する必要があります。

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

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

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

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

Oracle Database Advanced Queuingメッセージ・プロパティ 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. Database AQプロパティmsgidは、DBMS_AQ.MESSAGE_PROPERTIES_Tレコードの特定のフィールドではなくDatabase AQメッセージ識別子を表します。

TIB/Rendezvous発信伝播

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

Oracle Database Advanced Queuingキューのペイロードまたは変換ターゲットのADTがSYS.MGW_TIBRV_MSG_Tの場合は、次のようになります。

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

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

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

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

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

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

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

TIB/Rendezvous着信伝播

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

Oracle Database Advanced Queuingキューのペイロードまたは変換ソースのADTが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 Database Advanced QueuingキューのペイロードがRAWの場合は、次のようになります。

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

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

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

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

関連項目:

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

JMSメッセージ

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

MGWでは、標準のJMSメッセージ・タイプのみサポートしています。次のものはサポートしていません。

  • JMSプロバイダの拡張機能。これらの拡張機能は宛先JMSシステムで認識されないためです。このようなJMS以外のメッセージの伝播を試みると、エラー・メッセージが表示されます。

  • JMS伝播用のユーザー変換。

  • 論理変更レコード(LCR)の伝播。

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

図20-5の説明が続きます
「図20-5 JMSメッセージの伝播」の説明

この説明のために、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メッセージ ADT

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 Database Advanced Queuingのペイロード型がチェックされます。型が、表20-5に示した型またはANYDATAである場合は、メッセージ伝播が実行されます。そうでない場合は、例外が記録され伝播は実行されません。

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

JMS発信伝播

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

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

JMS着信伝播

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