MQ CCDT AMQ9516 FileNotFoundException

Я настраиваю веб-приложение для подключения к другому веб-приложению через WMQ.

Конфигурация MQ работает нормально на локальном, когда оба приложения подключены к одному и тому же локальному серверу.

Но когда я развертывал каждое приложение на своих собственных серверах, я получал ошибку CCDT.

Сервер 1 - подключается к Серверу 2 через удаленный JNDI

Сервер 2 - содержит фабрику соединений WMQ, очереди и спецификации активации.

При тестировании в журналах Сервера 1 показывается сообщение об исключении ниже. Что меня смутило, почему Сервер 1 ищет TAB-файл, когда Сервер 2 настроен для подключения к MQ через CCDT. Также сервер 2 не содержит никаких исключений.

Есть идеи, какую конфигурацию я сделал неправильно?

Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2278;AMQ9516: File error occurred. [1=java.io.FileNotFoundException[\ccdt\CCDT.tab (The system cannot find the path specified.)],3=file:/ccdt/CCDT.tab]
    at com.ibm.mq.jmqi.system.internal.CCDT.parse(CCDT.java:333)
    at com.ibm.mq.jmqi.system.internal.CCDT.<init>(CCDT.java:191)
    at com.ibm.mq.jmqi.remote.internal.system.RemoteCCDT.<init>(RemoteCCDT.java:68)
    at com.ibm.mq.jmqi.remote.internal.RemoteFAP.getCcdt(RemoteFAP.java:413)
    at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1580)
    at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1286)
    at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:367)

2 ответа

Решение

У вас есть следующие решения:

  • Вы можете использовать удаленный JNDI, но вам нужны все необходимые ресурсы на локальном узле также в тех же местах, поэтому в вашем случае файл \ccdt\CCDT.tab должен быть доступен по тому же пути
  • Переконфигурируйте фабрику соединений, чтобы она содержала все детали вместо ccdt.
  • Используйте определения локальных ресурсов - создавайте ресурсы на обеих сторонах, а не только на удаленных, и получайте их с локального сервера / кластера. Поэтому, если ваш сервер1 отправляет сообщения, вы должны создать фабрику соединений и поставить там очередь. И если у вас есть MDB на кластере (server2), вы должны создать там очередь и спецификацию активации.

Обычно проще создавать ресурсы локально для приложения, которое его использует.

Я думаю, что здесь была некоторая путаница.

Ваши удаленные вызовы JNDI, создающие начальный контекст, указывающий на сервер 2, просто означают, что вы ищете фабрику соединений на сервере 2.

Таким образом, если фабрика соединений на сервере 2 была настроена с CCDT, то, когда сервер 1 делает попытку подключения с использованием фабрики соединений с сервера 2, он также будет использовать CCDT, как это содержится в определении в JNDI.

Имеет ли это смысл?

Я бы порекомендовал вам либо:

a) Создайте вторую фабрику соединений в удаленном JNDI с другим именем без настроенного CCDT. Таким образом, вы могли бы иметь "ccdtCF" и "cf", например. Затем вы настраиваете приложения на серверах приложений для использования соответствующих ср.

б) Используйте локальный JNDI на каждом сервере, настроенном по вашему желанию.

c) Убедитесь, что все клиенты подключены одинаково на всех серверах. Либо все CCDT (и CCDT должны находиться в одном и том же месте файловой системы), либо нет соединений CCDT.

Другие вопросы по тегам