ablog

不器用で落着きのない技術者のメモ

AQ payload type SYS.MGW_BASIC_MSG_T not supported

サブスクライバを作成したら、Oracle Messaging Gateway のログに以下のメッセージが出力されていた。

MGW propagation job SUB_OMG_SAMPLE_QUEUE (MGWADMIN.OMG_SAMPLE_QUEUE --> QUEUE1@OMG_LINK) has been added.
...
Failed to access queue MGWADMIN.OMG_SAMPLE_QUEUE; provider queue: MGWADMIN.OMG_SAMPLE_QUEUE
oracle.mgw.common.GatewayException: [720]  AQ payload type SYS.MGW_BASIC_MSG_T not supported; queue: MGWADMIN.OMG_SAMPLE_QUEUE
	at oracle.mgw.common.MgwUtil.GatewayException(MgwUtil.java:740)
	at oracle.mgw.drivers.aq.jms.AQJmsLink.verifyAQPayloadSupported(AQJmsLink.java:3052)
	at oracle.mgw.drivers.aq.jms.AQJmsLink.registerDestination(AQJmsLink.java:919)
	at oracle.mgw.engine.DestMgr.getAQDest(DestMgr.java:151)
	at oracle.mgw.engine.JobData.init(JobData.java:230)
	at oracle.mgw.engine.Worker.recoverJob(Worker.java:1086)
	at oracle.mgw.engine.Worker.myRun(Worker.java:98)
	at oracle.mgw.engine.ManagedThr.run(ManagedThr.java:58)

キュー・テーブルの queue_payload_type を sys.mgw_basic_msg_t にしているのに、システム・リンクの interface_type を dbms_mgwadm.jms_queue_connection にしていたのが原因だった。interface_type を指定しないと、Base Javaリンクになる。

[720] AQペイロードがサポートされていません。キュー:

メッセージ・ゲートウェイの伝播ジョブによって使用されるOracle Streams AQキューのペイロード型がメッセージ・ゲートウェイによって直接サポートされていません。JMS以外の伝播の場合、メッセージ・ゲートウェイではペイロード型のRAW、SYS.MGW_BASIC_MSG_TおよびSYS.MGW_TIBRV_MSG_Tを直接サポートしています。

考えられるアクションは次のとおりです。

メッセージ・ゲートウェイの伝播ジョブをキュー・ペイロード型からサポートされている型へ変換するように構成します。

メッセージ・ゲートウェイの伝播ジョブを削除し、サポートされているペイロード型のOracle Streams AQキューを使用する新規ジョブを作成します。

Java Message Service(JMS)伝播の場合は、メッセージ・ゲートウェイの伝播ジョブを削除し、Oracle Java Message Service(OJMS)によってそのOracle Streams AQペイロード型がサポートされている新規ジョブを作成する必要があります。JMS伝播に対する変換はサポートされていません。

Oracle Messaging Gatewayの監視

「JMS以外の伝播の場合、メッセージ・ゲートウェイではペイロード型のRAW、SYS.MGW_BASIC_MSG_TおよびSYS.MGW_TIBRV_MSG_Tを直接サポートしています。」ってことは、JMSの場合は直接サポートしてないってことになる。

  • 修正前
declare
   v_options sys.mgw_properties;
   v_prop sys.mgw_mqseries_properties;
begin
   v_prop := sys.mgw_mqseries_properties.construct();
   v_prop.max_connections := 1;
   v_prop.interface_type := dbms_mgwadm.jms_queue_connection;
   v_prop.username := null;
   v_prop.password := null;
   v_prop.hostname := '192.168.0.140';
   v_prop.port     := 1414;
   v_prop.channel  := 'channel1';
   v_prop.queue_manager := 'saturn.queue.manager'; 
   v_prop.outbound_log_queue := 'out_log_queue1';
   v_prop.inbound_log_queue := 'in_log_queue1';
   dbms_mgwadm.create_msgsystem_link(
      linkname => 'omg_link', properties => v_prop, options => v_options );
end;
/
declare
   v_options sys.mgw_properties;
   v_prop sys.mgw_mqseries_properties;
begin
   v_prop := sys.mgw_mqseries_properties.construct();
   v_prop.max_connections := 1;
--   v_prop.interface_type := dbms_mgwadm.jms_queue_connection;
   v_prop.username := null;
   v_prop.password := null;
   v_prop.hostname := '192.168.0.140';
   v_prop.port     := 1414;
   v_prop.channel  := 'channel1';
   v_prop.queue_manager := 'saturn.queue.manager'; 
   v_prop.outbound_log_queue := 'out_log_queue1';
   v_prop.inbound_log_queue := 'in_log_queue1';
   dbms_mgwadm.create_msgsystem_link(
      linkname => 'omg_link', properties => v_prop, options => v_options );
end;
/