我正在研究侦听远程服务器中的MQ队列的EJB3 MDB。 一切正常(除了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进行强制转换
答案 0 :(得分:3)
也可以将我的评论重现为答案:
不要强制转换为特定于MQ的com.ibm.jms.JMSBytesMessage
,强制转换为JMS标准javax.jms.BytesMessage
。将代码与特定于实现的类型相结合,与JMS试图实现的目标相反。