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
Pour être complet, voici le code SQL pour la création de la queue :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; /
Partager