MQ CCDT AMQ9516 FileNotFoundException

1

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

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

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

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

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

При тестировании в журналах Server 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)
  • 0
    Что вы имеете в виду под удаленным JNDI? Вы обращаетесь к server2 через EJB или вы просто создаете InitialContext, указывающий на другой сервер?
  • 0
    Создание InitialContext, указывающего на другой сервер. то есть CLUSTER / JMS / QCF
Теги:
ibm-mq
websphere
ibm-was

2 ответа

0
Лучший ответ

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

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

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

  • 0
    Я сделал предложение и настроил Сервер 1 только на MQPUT, а Сервер 2 настроен на получение сообщения. Таким образом, у меня также есть конфигурация очереди на сервере 2, где я создал ActivationSpec для получения сообщений из этой очереди. Я могу отправить сообщение и увидеть его в очереди, но сервер 2 не принимает сообщения. Я помню, именно поэтому я настроил все на одном сервере, так как я столкнулся с этой проблемой раньше. Есть ли у вас какие-либо идеи о том, какая распространенная ошибка конфигурации для прослушивателя сообщений MQ при использовании спецификации активации?
  • 0
    Работало ли это раньше? Есть ли у вас ошибки на сервере 2, если я правильно помню, он должен попытаться связать MDB во время запуска приложения. В общем, вы должны настроить очередь, ActivationSpec, а затем привязать его к базе данных, ничего более ...
0

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

Ваши удаленные вызовы JNDI, создающие исходный контекст, указывающий на сервер 2, просто означают, что вы просматриваете Factory Connection на сервере 2.

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

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

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

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

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

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

  • 0
    Спасибо, Тим. Я просто выбрал ответ, основываясь на том, кто ответил первым.
  • 0
    Я ответил первым. Кто знает, почему stackoverflow заказал их таким образом! :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню