Что означает «Каталог сообщений не найден»? - PullRequest
0 голосов
/ 14 октября 2008

У меня работает MDB в WebSphere, когда он пытается извлечь сообщение из очереди MQ выдается следующее исключение:

com.ibm.mq.MQException: каталог сообщений не найден

Есть идеи, как решить эту проблему?

Ответы [ 5 ]

2 голосов
/ 17 октября 2008

Добавьте каталог, содержащий файл mqji.properties , в CLASSPATH

0 голосов
/ 25 мая 2009

Поскольку сообщение об ошибке вы получите с , каталог сообщений также довольно бесполезен, вот небольшой патч для mq.jar:

  1. Получить JAD
  2. Разобрать MQException и MQInternalException (последнее необходимо только потому, что оно наследуется от MQException; мы не будем его менять).
  3. Добавить этот код в 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. Заменить getMessage() на этот код:

        // 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. Либо скомпилируйте эти два класса в новый jar, либо исправьте оригинальный mq.jar.

Вместо MQJE001: RC 2 CC 2035 вы получите «MQJE001: FAILED NOT_AUTHORIZED»

0 голосов
/ 21 октября 2008

Оказывается, эта ошибка возникла из-за того, что я определил фабрику соединений с очередью на уровне сервера (на сервере WebSphere v6) и неправильный загрузчик классов использовался для загрузить вышеупомянутый файл свойств.

Я решил проблему, переопределив фабрику на уровне ячейки.

0 голосов
/ 20 октября 2008

Файлы mqji.properties уже включены в файл mq jar.

Исключение «Каталог сообщений не найден» выдается как часть «MQJMS2002: не удалось получить сообщение из очереди MQ».

0 голосов
/ 15 октября 2008

Google говорит, что это пропущенная запись в пути к классам: http://www.mqseries.net/phpBB2/viewtopic.php?t=5979&highlight=mqji

...