我正在研究一个侦听远程服务器中的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不兼容
好的, the message received should be (and is) type 'com.ibm.jms.JMSBytesMessage', so why the application doesn't work ? 我的JBoss服务器是否可能已经使用了另一个版本的库'com.ibm.mqjms.jar'(包括JMSBytesMessage类)并导致这种错误?
ps:我已经在linux系统下的JBoss服务器版本4.2.3上部署了该应用程序 . 我已经在我的本地机器上使用相同版本的JBoss服务器但在窗口系统下(相同的配置,相同的库等)使应用程序工作
有人知道这种错误的原因吗?
在此先感谢您的帮助 .
问候,
编辑:解决方案:使用javax.jms.BytesMessage而不是com.ibm.jms.JMSBytesMessage进行强制转换
1 回答
不妨重现我的评论作为答案:
不要强制转换为MQ特定的
com.ibm.jms.JMSBytesMessage
,强制转换为JMS标准javax.jms.BytesMessage
. 将代码耦合到特定于实现的类型与JMS尝试实现的目标相反 .