IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

Extraction message d'une OAQ (erreur JMS-190)


Sujet :

Java EE

  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2010
    Messages : 32
    Par défaut 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 : 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;
    /

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Par défaut
    Quelle valeur as tu dans queueName au moment de l'appel de cette ligne ?

  3. #3
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2010
    Messages : 32
    Par défaut
    Au moment de l'appel, queueName vaut USER_X.TOTO (USER_X étant mon schéma/user Oracle).

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Par défaut
    C'est probablement un soucis de préfixe.

    Comme tu as nomé ta queue : USER_X.TOTO quand tu l'utilises elle doit s'appeler : <user_de_creation>.USER_X.TOTO

    Essai de corriger ce prefixe.

  5. #5
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2010
    Messages : 32
    Par défaut
    Le nom de la queue elle-même est "TOTO". Et j'ai utilisé le user "USER_X" pour la créer.

    En fait, dans la première version de mon code, queueName valait TOTO et j'ai fait une modification par la suite pour ajouter le user de création en préfixe. Malheureusement l'erreur est la même dans les deux cas...

  6. #6
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2010
    Messages : 32
    Par défaut
    Ok, j'ai trouvé le problème : la queue est 'Multiple consumers' et apparemment, la réception de message (dans mon cas précis) ne peut se faire que sur une queue de type 'Single recipient'...

    Cas résolu. Merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2013] Erreur d'extraction lors d'une tentative de modification de page
    Par SpaceFrog dans le forum SharePoint
    Réponses: 5
    Dernier message: 04/12/2014, 13h12
  2. Extraction d'un message dans une image (tatouage)
    Par roma1 dans le forum Images
    Réponses: 1
    Dernier message: 18/02/2008, 17h48
  3. message d'une erreur 3101
    Par lg022 dans le forum Access
    Réponses: 4
    Dernier message: 30/01/2007, 18h24
  4. Réponses: 25
    Dernier message: 23/11/2004, 18h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo