2008-10-14 6 views
0

J'ai un MDB en cours d'exécution dans WebSphere, quand il essaie de tirer un message hors d'une file d'attente MQ l'exception suivante est levée:Que signifie "Message Catalog Not Found"?

com.ibm.mq.MQException: catalogue de messages non trouvé

Toute idée comment résoudre cela?

Répondre

2

Ajoutez le répertoire contenant les mqji.properties fichier au CLASSPATH

0

Les fichiers mqji.properties est déjà inclus dans le pot de mq fichier.

L'exception du catalogue de messages non trouvée est lancée dans le cadre d'un message "MQJMS2002: échec de l'extraction du message de la file d'attente MQ".

0

Il se trouve que cette erreur a été lancée parce que j'avais la fabrique de connexions de file d'attente définie au niveau du serveur (sur le serveur WebSphere) et le mauvais classloader était utilisé pour charge le fichier de propriétés ci-dessus mentionnées. J'ai résolu le problème en redéfinissant l'usine au niveau de la cellule.

0

Depuis le message d'erreur que vous allez recevoir avec le catalogue des messages est assez inutile, aussi, voici un petit patch pour le mq.jar:

  1. Get jad
  2. Démontez MQException et MQInternalException (ce dernier est seulement nécessaire car il hérite de MQException, nous ne le changerons pas).
  3. Ajouter ce code à MQException:

    // PATCH New fields 
        private final static IntHashMap completionCodes = new IntHashMap(); 
        private final static IntHashMap reasonCodes = new IntHashMap(); 
        static 
        { 
         addCodes (completionCodes, "MQCC_"); 
         addCodes (reasonCodes, "MQRC_"); 
        } 
    
        /** 
        * PATCH Create a map of names for the MQ error codes 
        * 
        * @param map 
        * @param prefix 
        */ 
        private static void addCodes(IntHashMap map, String prefix) 
        { 
         Field[] field = MQException.class.getFields(); 
    
         try 
         { 
          for (int i = 0; i < field.length; i++) 
          { 
           String name = field[i].getName(); 
           if (name.startsWith(prefix)) 
           { 
            name = name.substring(prefix.length()); 
            int value = field[i].getInt(null); 
            map.put (value, name); 
           } 
          } 
         } 
         catch (IllegalArgumentException e) { 
          throw new RuntimeException (e); 
         } 
         catch (IllegalAccessException e) { 
          throw new RuntimeException (e); 
         } 
        } 
    
  4. Remplacer getMessage() avec ce code:

    // PATCH Complete rewrite 
        public String getMessage() 
        { 
         if(ostrMessage == null) { 
          String rc = (String)reasonCodes.get(reasonCode); 
          if (rc == null) 
           rc = "ReasonCode "+reasonCode; 
          String cc = (String)completionCodes.get(completionCode); 
          if (cc == null) 
           cc = "CompletionCode "+completionCode; 
    
          String message = "MQJE001: "+cc+" "+rc; 
    
          if(msgId == 0) 
           ostrMessage = message; 
          else { 
           String s = msgId+" {0} {1}"; 
           if (exceptionMessages != null) { 
            s = exceptionMessages.getString(Integer.toString(msgId)); 
           } 
           if(numInserts > 0) { 
            Object as1[] = new String[numInserts]; 
            if(numInserts > 0) as1[0] = insert1; 
            if(numInserts > 1) as1[1] = insert2; 
            s = MessageFormat.format(s, as1); 
           } 
    
           ostrMessage = message+"\n"+s; 
          } 
    
          if (underlyingException != null) 
           ostrMessage = ostrMessage + "\n" + underlyingException.getMessage(); 
         } 
    
         return ostrMessage; 
        } 
    
  5. soit compiler ces deux classes dans un nouveau pot ou patcher le mq.jar d'origine.

au lieu du MQJE001: RC 2 CC 2035, vous obtiendrez "MQJE001: ECHEC NOT_AUTHORIZED"