Проблема привязки JMS MQ - PullRequest
2 голосов
/ 25 января 2011

У меня странная проблема с привязкой JMS в очереди MQ с MDB

Управляемый сообщениями EJB: CrbEventMessageAsynchronousService не может подключиться к месту назначения JMS: queue.contratto.crb.input.publicQueue. Ошибка была:

javax.jms.JMSException: MQJMS1017: нелокальная очередь MQ недопустима для приема или просмотра>

Я проверил QueueManager, и очередь mq определяется как локальная, а не как удаленная, как сказано в исключении.

1 Ответ

4 голосов
/ 25 января 2011

Возможно, самая верхняя очередь, которую приложение открывает для чтения, определяется локально. Однако очередь, в которую разрешается WMQ, отсутствует. Например, если вы определяете локальный псевдоним для удаленной кластерной очереди, разрешенная очередь будет нелокальной. Другая возможная причина заключается в том, что очередь, которую вы намереваетесь открыть для вывода, фактически также открыта для ввода. Это на самом деле довольно часто.

Наконец, также довольно распространено, что клиент WMQ подключен к администратору очередей, отличному от ожидаемого. Например, соединение с QMGRA, а объект очереди указывает полное имя, например QUEUE @ QMGRB. Даже если очередь находится в QMGRB, а объект JNDI указывает этого администратора очередей по имени, соединение в QMGRA преобразует его в очередь передачи и поэтому видит его как нелокальное.

Один из лучших способов исправить эту ошибку в Dev - это использовать SupportPac MA0W . Этот SupportPac работает как выход API или как выход канала и перечисляет на понятном человеку языке все вызовы API и все параметры, выбранные для вызова. Это однозначно покажет, какое именно имя объекта было открыто, к чему оно было разрешено и какие параметры использовались.

Кроме того, вы можете включить трассировку, используя strmqtrc . Не забудьте отключить его с помощью endmqtrc , когда вы закончите! Эти трассировки включены и отключены на сервере QMgr и отслеживают вызовы API WMQ. Есть эквивалентные трассировки для выполнения на стороне клиента, но они могут не показывать требуемый уровень детализации.

Наконец, было бы целесообразно напечатать любые исключения, связанные с исключениями JMS. Исключение JMS - это многоуровневая структура данных, в которой связанное исключение содержит значения, специфичные для поставщика. Например, исключение безопасности JMS может быть ошибкой авторизации WMQ. Но опять же, это может быть ошибка в хранилище ключей или файловой системе. Если связанное исключение не показывает код причины WMQ 2035, это не ошибка безопасности WMQ. Инфоцентр описывает, как распечатать связанные данные исключений в разделе с именем Исключения в классах WebSphere MQ для JMS .

Обратите внимание, что я предоставил ссылки на документы WMQ v7.0. Если вы кодируете в v6, они могут быть не совсем точными, и вместо этого вам стоит поискать в Инфоцентре v6.0 . Поскольку версия v6.0 WMQ по состоянию на сентябрь 2011 года является устаревшей, настоятельно рекомендуется выполнить все новые разработки для версии v7.0. Если вам нужен клиент v7.0, его можно загрузить как SupportPac MQC7 и обеспечить обратную совместимость с серверами v6.0 WMQ.

...