The following performs a test enqueue to an Oracle AQ queue using a JMS session executed within the Oracle database;
First, ensure the schema that the script is executed on has the following privileges granted from SYS;
grant AQ_ADMINISTRATOR_ROLE to jms_schema
/
grant aq_user_role to jms_schema
/
grant JAVA_ADMIN, JAVAUSERPRIV, JAVASYSPRIV, JAVADEBUGPRIV to jms_schema
/
grant execute on DBMS_AQIN to jms_schema;
/
grant execute on DBMS_JMS_PLSQL to jms_schema
/
Next, ensure a queue with a JMS_TEXT_MESSAGE payload exists, use the following
-- login with the schema you wish to run the demo on, for example JMS_SCHEMA
exec dbms_aqadm.create_queue_table (queue_table=>'jms_qtt_text', queue_payload_type=>'SYS.AQ$_JMS_TEXT_MESSAGE');exec dbms_aqadm.create_queue (Queue_name=>'jms_text_que',Queue_table=>'jms_qtt_text');
exec dbms_aqadm.create_queue_table (queue_table=>'jms_qtt_text', queue_payload_type=>'SYS.AQ$_JMS_TEXT_MESSAGE');
Ready to create and compile the Java source;
SQL> create or replace and compile java source named BasicAQEnqueue as
2 import java.sql.Connection;
3 import java.sql.Driver;
4 import java.sql.DriverManager;
5 import javax.jms.Queue;
6 import javax.jms.QueueConnection;
7 import javax.jms.QueueSender;
8 import javax.jms.QueueSession;
9 import oracle.jms.AQjmsFactory;
10 import oracle.jdbc.*;
11 import oracle.jdbc.aq.*;
12 import oracle.jms.*;
13
14 public class BasicAQEnqueue {
15
16 private QueueSender producer;
17 private Queue queue;
18 private QueueConnection producerConnection;
19 private QueueSession producerSession;
20 private static final String QUEUE_NAME = "JMS_TEXT_QUE";
21 private static final int ACK_MODE = QueueSession.AUTO_ACKNOWLEDGE;
22 private static final boolean TRANSACTED = true;
23
24 /* Creates and initializes the test. */
25 public BasicAQEnqueue() throws Exception {
26 super();
27 // init producer session - Use Oracle default thin driver connection
28 Connection conn = DriverManager.getConnection("jdbc:default:connection:");
29 producerConnection = AQjmsQueueConnectionFactory.createQueueConnection(conn);
30 producerSession = producerConnection.createQueueSession(TRANSACTED,ACK_MODE);
31 queue = producerSession.createQueue(QUEUE_NAME);
32 producer = producerSession.createSender(queue);
33 }
34
35 public static void main (String args[]) throws Exception
36 {
37 BasicAQEnqueue qTest = new BasicAQEnqueue();
38 qTest.run();
39 qTest.cleanup();
40 }
41
42 /** Closes the JMS connections.throws Exception */
43 private void cleanup() throws Exception {
44 // cleanup producer
45 System.out.println("Start cleanup.");
46 producerConnection.stop();
47 producer.close();
48 producerSession.close();
49 producerConnection.close();
50 System.out.println("Done");
51 }
52
53 /* The message send. Throws Exception */
54 private void run() throws Exception {
55 String msg = "Test Message 1";
56 producer.send(producerSession.createTextMessage(msg));
57 producerSession.commit();
58 System.out.println("Message sent: " + msg);
59 }
60 }
61 /
Java created.
SQL> create or replace procedure BasicAQEnqueue as
2 language java name 'BasicAQEnqueue.main(java.lang.String[])';
3 /
Procedure created.
SQL> set serveroutput on
SQL> begin
2 BasicAQEnqueue;
3 end;
4 /
Message sent: Test Message 1
Start cleanup.
Done
SQL> col Msg format a20
SQL> select msg_id, msg_state, qt.user_data.text_vc Msg
2 from aq$jms_qtt_text qt
3 /
MSG_ID MSG_STATE MSG
-------------------------------- ---------------- --------------
E39998B62A5046DCA6F2316D64EF3048 READY Test Message 1
No comments:
Post a Comment