启动MQ Listener时出现MQJCA1025错误

时间:2018-01-05 08:03:52

标签: java jboss jms ibm-mq mq

在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决议未提及在侦听器/客户端进行修复

2 个答案:

答案 0 :(得分:1)

MQJCA1025错误消息说不要执行以下操作:

consumer.setMessageListener(this);

您提供的链接非常明确:

<强> 原因

在托管环境中调用setMessageListener()方法违反了J2EE规范,因此不应使用。

解决问题

您的JMS应用程序需要更改为不调用setMessageListener()方法。 相反,为此方法提供的功能提供了激活规范

答案 1 :(得分:0)

换句话说,您的Application Server会为您进行连接:-)您的修复不是自己设置监听器,而是确保实现MessageDrivenBean,应用服务器将为您进行注册。您只需要实现onMessage()。有关JBoss的示例,请参阅here