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 : 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;
}
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
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;
/