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の内部メッセージ・フォーマットに変換され、次に、内部メッセージ・フォーマットから宛先キューのシステム固有のフォーマットに変換されます。
MGWエージェントでは、Oracle Database Advanced Queuingのメッセージ・プロパティに類似したヘッダーと、MGWの標準型で表される本体で構成された、内部メッセージ・フォーマットが使用されます。
Oracle Messaging Gateway標準型
MGWでは標準型が定義され、Oracle Database Advanced QueuingとOracle以外のメッセージ・システム間でのメッセージ変換がサポートされます。標準型は、メッセージ型をOracle DatabaseでのPL/SQL Oracleタイプの形式で表したものです。標準型は、RAW
、SYS.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のキューにメッセージがエンキューされると起動されます。
変換は常にMGWエージェントとの関連で実行されますが、これはMGWエージェント・ユーザー(DBMS_MGWADM
.CREATE_AGENT
またはDBMS_MGWADM
.ALTER_AGENT
を使用して指定したユーザー)には、変換ファンクションおよびOracle Database Advanced Queuingペイロード型に対するEXECUTE
権限が必要であることを意味しています。これは、PUBLIC
にEXECUTE
権限を付与するか、またはMGWエージェントのユーザーに直接EXECUTE
権限を付与することによって実現できます。
変換によってMGW伝播ジョブを構成する手順は、次のとおりです。
- 変換ファンクションを作成します。
- MGWエージェントのユーザーまたは
PUBLIC
に、ファンクションおよびそのファンクションが参照するオブジェクト型に対するEXECUTE
権限を付与します。 DBMS_TRANSFORM.CREATE_TRANSFORMATION
をコールして、変換を登録します。- 変換によって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
というフィールドから取得されます。
関連項目:
-
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_MGWMSGに関する項
-
LCR変換の詳細例は、
ORACLE_HOME
/mgw/samples/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_T
とRAW
です。
図20-3 SYS.MGW_BASIC_MSG_T使用によるWebSphere MQのメッセージ変換
![図20-3の説明が続きます 図20-3の説明が続きます](img/adqmg005.gif)
「図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 |
発信、着信 |
関連項目:
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_MGWMSGに関する項
表20-1に関する注意
-
この表での使用方法には、WebSphere MQの制約が適用されます。たとえば、送信メッセージに対して
MGW_MQ_accountingToken
が設定されている場合、WebSphere MQの値は、MGW_MQ_putMessageOptions
がWebSphere MQ定数のMQPMD_SET_ALL_CONTEXT
に設定されていないかぎり、オーバーライドされます。 -
MGW_MQ_putMessageOptions
は、WebSphere MQ Base JavaQueue.put()
メソッドのputMessageOptions
引数として使用されています。WebSphere MQのヘッダー情報の一部ではないため、実際のメッセージのプロパティではありません。WebSphere MQ Base Javaの
MQQueueManager.accessQueue
メソッドに対するopenOptions
引数の値は、DBMS_MGWADM.REGISTER_FOREIGN_QUEUE
をコールしてWebSphere MQキューが登録されるときに指定されます。これらの値の間には依存関係が存在する場合があります。たとえば、MGW_MQ_putMessageOptions
にMQPMD_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_STRING
のformat
が含まれる場合、メッセージ変換は失敗します。そうでない場合は、メッセージ本体は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の間におけるメッセージの変換方法を示したものです。
メッセージ変換障害が発生すると、メッセージは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フィールド型 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
サポートされません |
サポートされません |
|
サポートされません |
サポートされません |
|
サポートされません |
サポートされません |
|
サポートされません |
サポートされません |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
サポートされません |
サポートされません |
|
サポートされません |
サポートされません |
|
サポートされません |
サポートされません |
|
サポートされません |
サポートされません |
|
サポートされません |
サポートされません |
|
|
|
|
|
|
|
|
|
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ワイヤ・フォーマット・データ型 | 使用対象 |
---|---|---|---|
|
|
|
発信、着信 |
|
|
|
発信、着信 |
|
|
|
発信、着信 |
|
|
|
発信、着信 |
|
|
|
発信、着信 |
|
|
|
発信 |
|
|
|
発信 |
|
|
|
発信 |
表20-4に関する注意:
-
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.OPAQUE
でMGW_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_T
にsend_subject
属性を設定します。通常、送信サブジェクト名は登録済の伝播ソース・キューのサブジェクト名と同じですが、ワイルドカードを使用する場合は異なる場合があります。 -
MGWエージェントによって、TIB/Rendezvousのソース・メッセージから応答サブジェクト名を抽出し、
SYS.MGW_TIBRV_MSG_T
にreply_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)の伝播。
この説明のために、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 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
伝播ジョブを有効にすると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ではメッセージのデキューはできません。エラーが記録され、そのキューからのメッセージの伝播はメッセージが削除されるまで続行されません。