2017-05-24 14 views
0

タイプマップのJMSメッセージを作成してエンキューしようとしています。 しかし、私は次のエラーが表示されOracleデータベースにjmsマップ・メッセージを作成する際の例外

ORA-29516: Aurora assertion failure: Assertion failure at eox.c:359 
Uncaught exception Root of all Java exceptions: java.lang.UnsatisfiedLinkError sun.net.PortConfig.getLower0 
ORA-06512: at "SYS.DBMS_JMS_PLSQL", line 498 
ORA-06512: at "SYS.AQ$_JMS_MAP_MESSAGE", line 79 
ORA-06512: at line 20 
29516. 00000 - "Aurora assertion failure: %s" 
*Cause: An internal error occurred in the Aurora module. 
*Action: Contact Oracle Worldwide Support. 

を行うとき、私はこの

DECLARE 
    v_id     pls_integer; 
    v_msg     sys.aq$_jms_map_message; 
    v_msg_agent   sys.aq$_agent; 
    v_msg_proparray  sys.aq$_jms_userproparray; 
    v_msg_property  sys.aq$_jms_userproperty; 
    v_msg_header   sys.aq$_jms_header; 
    v_enqueue_options  dbms_aq.enqueue_options_t; 
    v_msg_properties  dbms_aq.message_properties_t; 
    v_msgid    raw(16); 
BEGIN 
    v_msg_agent := SYS.AQ$_AGENT(' ', NULL, 0); 
    v_msg_proparray := SYS.AQ$_JMS_USERPROPARRAY(); 
    v_msg_proparray.EXTEND(1); 
    v_msg_property := SYS.AQ$_JMS_USERPROPERTY('JMS_OracleDeliveryMode', 100, '2', NULL, 27); 
    v_msg_proparray(1) := v_msg_property; 
    v_msg_header := SYS.AQ$_JMS_HEADER(v_msg_agent,NULL,'<USERNAME>',NULL,NULL,NULL,v_msg_proparray); 
    v_msg := sys.aq$_jms_map_message(v_msg_header,NULL,NULL,NULL); 
    v_id := v_msg.clear_body(-1); 

    v_msg.set_string(v_id, 'STRING', 'Test'); 

    v_msg.flush(v_id); 
    v_msg.clean(v_id); 
    dbms_aq.enqueue(queue_name => 'SEND_QUEUE', 
       enqueue_options => v_enqueue_options, 
       message_properties => v_msg_properties, 
       payload => v_msg, 
       msgid => v_msgid); 
END; 

のような問題をルックスを使用しているSQLがv_id := v_msg.clear_body(-1);呼び出しによって引き起こされているように見えます。 同じ設定がテキストメッセージタイプで機能するので、これをどのように修正するのかはわかりません。しかし、idパラメータは使用しません(したがって、clear_bodyを呼び出す必要はありません)。

v_msg := sys.aq$_jms_text_message(v_msg_header,NULL,NULL,NULL); 
v_msg.text_vc := 'test'; 
v_msg.text_len := LENGTH(v_msg.text_vc); 

私は次のセットアップを使用して、私のキュー構成については

DBMS_AQADM.CREATE_QUEUE_TABLE(queue_table=>'PRODUCER_QUEUES', multiple_consumers=>TRUE, queue_payload_type=>'SYS.AQ$_JMS_MAP_MESSAGE'); 
DBMS_AQADM.CREATE_QUEUE_TABLE(queue_table=>'CONSUMER_QUEUES', multiple_consumers=>FALSE, queue_payload_type=>'SYS.AQ$_JMS_MAP_MESSAGE'); 

DBMS_AQADM.CREATE_QUEUE(queue_name => 'SEND_QUEUE', queue_table => 'PRODUCER_QUEUES'); 
DBMS_AQADM.CREATE_QUEUE(queue_name => 'RECEIVE_QUEUE', queue_table => 'CONSUMER_QUEUES'); 

DBMS_AQADM.START_QUEUE(queue_name => 'SEND_QUEUE'); 
DBMS_AQADM.START_QUEUE(queue_name => 'RECEIVE_QUEUE'); 

DBMS_AQADM.ADD_SUBSCRIBER(queue_name => 'SEND_QUEUE', subscriber => sys.aq$_agent(NULL, 'RECEIVE_QUEUE', NULL)); 

DBMS_AQADM.SCHEDULE_PROPAGATION(queue_name => 'SEND_QUEUE', latency => 0); 

誰がこの例外を発生させているもの言うことはできますか?
ありがとうございます。

答えて

0

この問題はやや遅れて修正されており、比較的簡単でした。 新しいメッセージを作成するためにclear_bodyを呼び出す必要はありません。ドキュメントに基づいて、それはちょっと明白で、ヘッダー値をクリアせずにメッセージ本文を再構築するために使用するものです。

Documentation for more information

それはよりよい私のニーズに合うように私はまた、JMS_TEXT_MESSAGEにメッセージの種類を切り替えます。

関連する問題