在IBM-MQ上启动异步侦听器/阅读器时出现MQJCA1025错误 -
com.ibm.msg.client.jms.DetailedIllegalStateException:MQJCA1025:The 消息使用者不能有消息监听器。一个应用程序 尝试为JMS消息使用者设置消息侦听器。这个 仅当应用程序在托管中运行时才会发生异常 环境。修改应用程序,使其确实使用消息 监听器。
以下是完成侦听器设置的init方法 -
public void init(){
ConnectionFactory qConnectionFactory = null;
Connection connection = null;
try{
Context ctx = new InitialContext();
qConnectionFactory = (ConnectionFactory) ctx.lookup("java:jboss/Connection");
Destination receiverQueue = null;
if(null != qConnectionFactory){
connection = qConnectionFactory.createConnection();
if(null !=connection){
receiverQueue = (Destination) ctx.lookup("java:jboss/RESPONSE");
if(null != receiverQueue){
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
if(null != session){
MessageConsumer consumer = session.createConsumer(receiverQueue);
consumer.setMessageListener(this);
connection.start();
}
}
}
}
}
catch(Exception e){
System.out.println(e);
}
}
http://www-01.ibm.com/support/docview.wss?uid=swg21610734处的IBM决议未提及在侦听器/客户端进行修复
答案 0 :(得分:1)
MQJCA1025错误消息说不要执行以下操作:
consumer.setMessageListener(this);
您提供的链接非常明确:
<强> 原因 强>
在托管环境中调用setMessageListener()方法违反了J2EE规范,因此不应使用。
解决问题
您的JMS应用程序需要更改为不调用setMessageListener()方法。 相反,为此方法提供的功能提供了激活规范
答案 1 :(得分:0)
换句话说,您的Application Server会为您进行连接:-)您的修复不是自己设置监听器,而是确保实现MessageDrivenBean,应用服务器将为您进行注册。您只需要实现onMessage()。有关JBoss的示例,请参阅here。