2017-05-24 8 views
0

맵 유형의 JMS 메시지를 작성하고 큐에 넣으려고합니다. 그렇게 할 때 는하지만 난 문제가 v_id := v_msg.clear_body(-1); 호출에 의해 야기 될 것으로 보인다이Oracle 데이터베이스에서 jms 맵 메시지 작성시의 예외

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; 

같은 외모를 사용하고

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. 

는 SQL 다음과 같은 오류를받을 수 있습니다. 동일한 구성이 텍스트 메시지 유형에서 작동하기 때문에이 문제를 어떻게 해결할 수 있는지 잘 모르겠습니다. 하지만 그 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에 메시지 유형을 전환했다.