JBoss MDB - исключение приведения класса JMSBytesMessage - PullRequest
1 голос
/ 25 января 2011

Я работаю над EJB3 MDB, который слушает очередь MQ на удаленном сервере. Все работает нормально (MDB срабатывает, когда сообщение помещается в очередь прослушивания), кроме обработки, выполняемой MDB. Для информации я использую адаптер ресурсов WMQ для сопоставления очереди.

В методе onMessage MDB я пытаюсь преобразовать данное сообщение в класс com.ibm.jms.JMSBytesMessage, но получаю странное сообщение об ошибке.

Код следующий (простой для примера):

public void onMessage(Message theMessage) {
  ((JMSBytesMessage) theMessage).readBytes(myBytes);
}

И сообщение об исключении:

Исключение при чтении запроса ввода: com.ibm.jms.JMSBytesMessage несовместимо с com.ibm.jms.JMSBytesMessage

Хорошо, полученное сообщение должно быть (и есть), типа 'com.ibm.jms.JMSBytesMessage', так почему приложение не работает? Возможно ли, что мой сервер JBoss уже использует другая версия библиотеки 'com.ibm.mqjms.jar' (включая класс JMSBytesMessage) и вызывает такую ​​ошибку?

ps: я развернул приложение на сервере JBoss версии 4.2.3 в системе Linux. Я уже заставляю приложение работать на моей локальной машине с той же версией сервера JBoss, но под оконной системой (та же конфигурация, те же библиотеки и т. Д.)

Есть ли у кого-нибудь представление о причине такой ошибки?

Заранее спасибо за любую помощь.

С уважением,

РЕДАКТИРОВАТЬ: РЕШЕНИЕ: приведение с javax.jms.BytesMessage вместо com.ibm.jms.JMSBytesMessage

1 Ответ

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

Можно также воспроизвести мой комментарий как ответ:

Не приводить к MQ-специфичным com.ibm.jms.JMSBytesMessage, приводить к JMS-стандарту javax.jms.BytesMessage.Связывание вашего кода с типами, специфичными для реализации, противоречит тому, что JMS пытается достичь.

...