Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Java Dequeue's from Oracle AQ
Anyone had any problems doing DEQUEUE operations on Oracle AQ queues
using Java
where the queue is in a different schema to the user doing the
DEQUEUE?
I have some code that connects and gets the queue table, gets the
queue, creates a message object and then attempts a dequeue, but fails
with the following exception:
Exception in thread "main" java.lang.NullPointerException at oracle.AQ.AQOracleQueue.dequeue(AQOracleQueue.java:1436) at oracle.AQ.AQOracleQueue.dequeue(AQOracleQueue.java:1127) at testDequeue.main(testDequeue.java:105)
This code works fine if i log on and try to dequeue from a queue in my schema but not if i try to access a queue in a different schema. I have been granted the necessary priveleges to access queues in other schemas.
ANY IDEAS? my code is below :
import java.io.*;
import java.sql.*;
import oracle.sql.*;
import oracle.AQ.*; import java.util.Date; import java.text.*;
public class testDequeue {
private static Connection conn; private static QueueControl qControl; private static AQSession qSession; private static String userName = xxx; private static String passWord = xxx; private static String queueTableName = "QUEUE_TAB_1"; private static String queueName = "QUEUE_1"; private static AQQueueTable q_table; private static AQQueue queue; private static AQMessage message; private static AQRawPayload raw_payload; private static AQDequeueOption deq_option; private static byte[] b_array; public static void main(String[] args) throws AppException { QueueControl qControl = new QueueControl(); /* create a connection object */ try { /* Load the Oracle jdbc thin driver: */ Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection( "jdbc:oracle:thin:@22.22.10.10:1521:sdf1", userName, passWord); System.out.println("JDBC Connection opened "); conn.setAutoCommit(false);
}
catch (SQLException e) { System.out.println("connection error");
}
catch (ClassNotFoundException e) { System.out.println("connection error");
}
/* create a new Advanced Queueing Session, passing in the username and password */ try { Class.forName("oracle.AQ.AQOracleDriver"); qSession = AQDriverManager.createAQSession(conn); //qSession = qControl.createSession(conn); } catch (Exception e) { System.out.println("Error creating session"); } /* Get a handle to queue table */ q_table = qSession.getQueueTable ("ETP", queueTableName); System.out.println("Successful getQueueTable"); /* Get a handle to a queue */ queue = qSession.getQueue ("ETP", queueName); System.out.println("Successful getQueue"); /* Create a AQDequeueOption object with default options: */ deq_option = new AQDequeueOption(); System.out.println("Successful create dequeue option"); deq_option.setNavigationMode(AQDequeueOption.NAVIGATION_FIRST_MESSAGE); /* Dequeue a message: */ try { message = queue.dequeue(deq_option); } catch (AQOracleSQLException e) { e.printStackTrace(); if(e.getErrorCode() == 25226) { System.out.println("The Queue " + queueName + " in Queue Table " + queueTableName + " in schema " + userName + " is not enabled for DEQUEUE operations - try STARTing the queue"); } throw new AppException(e.getMessage(),2);
}