Extraction message d'une OAQ (erreur JMS-190)
Bonjour à tous,
Je tente d'afficher sur la console le contenu d'un message lu à partir d'une queue Oracle (TOTO).
Pour ce faire, j'utilise javax.jms et oracle.jms comme expliqué dans le tutorial d'Oracle.
Mais le code d'erreur "JMS-190: Queue USER_X.TOTO not found" est retourné à la ligne de code
en rouge ci-dessous.
Une idée du problème ?
Merci d'avance,
Mildju
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| public static String fetchMessage(String queueName) throws MildjuException {
Connection oraConn = null;
QueueConnection qConn = null;
QueueReceiver qReceiver = null;
QueueSession qSession = null;
String result = null;
try {
logger.info("A l'ecoute de l'Oracle Advanced Queue ".concat(queueName));
// Connection via DriverManager
oraConn = DriverManager.getConnection("jdbc\:oracle\:thin\:@machine\:5555\:MA_DB", "USER_X", "PASSWORD");
oraConn.setAutoCommit(false);
qConn = AQjmsQueueConnectionFactory.createQueueConnection(oraConn);
qSession = qConn.createQueueSession(false, 0);
Queue queue = ((AQjmsSession) qSession).createQueue(queueName);
qReceiver = qSession.createReceiver(queue, null);
// Mandatory for dequeuing
qConn.start();
// En attente du message
Message msg = qReceiver.receive();
if (msg != null) {
logger.info("--> Arrivee du message suivant : \n" + msg);
if (msg instanceof BytesMessage) {
BytesMessage bytesMsg = (BytesMessage)msg;
result = bytesMsg.readUTF();
} else if (msg instanceof TextMessage) {
TextMessage textMsg = (TextMessage)msg;
result = textMsg.getText();
}
} else {
logger.warn("--> Le message recu est vide !");
}
} catch(JMSException jmse) {
try {
if (oraConn != null) {
oraConn.rollback();
}
} catch (SQLException sqle) {
throw new MildjuException(sqle.getMessage());
}
throw new MildjuException(jmse.getMessage());
} catch(SQLException sqle2) {
try {
if (oraConn != null) {
oraConn.rollback();
}
} catch (SQLException sqle3) {
throw new MildjuException(sqle3.getMessage());
}
throw new MildjuException(sqle2.getMessage());
} finally {
if (qReceiver != null) {
try {
qReceiver.close();
} catch (JMSException jmse1) {
throw new MildjuException(jmse1.getMessage());
} finally {
if (qSession != null) {
try {
qSession.close();
} catch (JMSException jmse2) {
throw new MildjuException(jmse2.getMessage());
} finally {
if (qConn != null) {
try {
qConn.close();
} catch (JMSException jmse3) {
throw new MildjuException(jmse3.getMessage());
} finally {
if (oraConn != null) {
try {
oraConn.close();
} catch (SQLException sqle3) {
throw new MildjuException(sqle3.getMessage());
}
}
}
}
}
}
}
}
}
return result;
} |
Pour être complet, voici le code SQL pour la création de la queue :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| BEGIN
SYS.DBMS_AQADM.STOP_QUEUE ( QUEUE_NAME => 'USER_X.TOTO');
SYS.DBMS_AQADM.DROP_QUEUE ( QUEUE_NAME => 'USER_X.TOTO');
END;
/
BEGIN
SYS.DBMS_AQADM.CREATE_QUEUE
(
QUEUE_NAME => 'USER_X.TOTO'
,QUEUE_TABLE => 'USER_X.TQ_TOTO'
,QUEUE_TYPE => SYS.DBMS_AQADM.NORMAL_QUEUE
,MAX_RETRIES => 5
,RETRY_DELAY => 0
,RETENTION_TIME => 0
);
END;
/
BEGIN
SYS.DBMS_AQADM.START_QUEUE
(
QUEUE_NAME => 'USER_X.TOTO'
,ENQUEUE => TRUE
,DEQUEUE => TRUE
);
END;
/ |