2011-01-25 25 views
1

我正在研究侦听远程服务器中的MQ队列的EJB3 MDB。 除MDB完成的处理外,所有工作都正常(MDB在将消息放入侦听队列时触发)。有关信息,我使用WMQ资源适配器来映射队列。JBoss MDB - JMSBytesMessage类抛出异常

在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

+1

你为什么要投它一切?如果您不打算继续使用JMS提供的接口,那么使用JMS就毫无意义。你不能转换为`javax.jms.BytesMessage`吗? – skaffman 2011-01-25 13:52:16

+0

我试图转换BytesMessage,但MDB有一个奇怪的行为(从输入队列读取消息,但看起来像回滚消息并再次读取)。但是这个错误信息都没有出现,也没有其他的处理痕迹(因此MDB中没有做任何事情):我试图捕获'Exception'和'Error'类型并显示一个跟踪,但是日志中没有显示任何内容。所以目前,使用javax.jms.BytesMessage进行投射不起作用,但我不知道为什么。但是你是对的,没有必要使用javax.jms.BytesMesasge – kij 2011-01-25 15:49:32

回答

3

不妨重现我的意见作为答案:

不要投射到特定于MQ的com.ibm.jms.JMSBytesMessage,投射到JMS标准javax.jms.BytesMessage。将代码耦合到特定于实现的类型与JMS试图达到的目的相反。