1

我正在研究一个 EJB3 MDB,它侦听远程服务器中的 MQ 队列。除了由 MDB 完成的处理外,一切工作正常(当将消息放入侦听队列时触发 MDB)。有关信息,我使用 WMQ 资源适配器来映射队列。

在 MDB 的方法“onMessage”中,我尝试将给定消息转换为“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:我已经在linux系统下的JBoss服务器4.2.3版本上部署了应用程序。我已经使用相同版本的 JBoss 服务器但在窗口系统下(相同的配置、相同的库等)使应用程序在我的本地机器上运行

有人知道这种错误的原因吗?

提前感谢您的帮助。

问候,

编辑:解决方案:使用 javax.jms.BytesMessage 而不是 com.ibm.jms.JMSBytesMessage 进行强制转换

4

1 回答 1

3

不妨复制我的评论作为答案:

不要转换为 MQ-specific com.ibm.jms.JMSBytesMessage,转换为 JMS-standard javax.jms.BytesMessage。将您的代码耦合到特定于实现的类型与 JMS 试图实现的目标背道而驰。

于 2011-01-25T20:43:52.970 回答