【问题标题】:Getting MQJCA1025 Error while starting MQ Listener启动 MQ 侦听器时出现 MQJCA1025 错误
【发布时间】:2018-06-15 00:33:12
【问题描述】:

在 IBM-MQ 上启动异步侦听器/读取器时出现 MQJCA1025 错误 -

com.ibm.msg.client.jms.DetailedIllegalStateException:MQJCA1025: 消息使用者不能有消息侦听器。一个应用程序 试图为 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 决议未提及要在侦听器/客户端进行的修复

【问题讨论】:

    标签: java jboss jms ibm-mq mq


    【解决方案1】:

    换句话说,您的应用程序服务器会为您完成连接 :-) 您的解决方法是不要自己设置侦听器,而是确保您实现 MessageDrivenBean 并且应用程序服务器将为您进行注册。你只需要实现onMessage()。有关 JBoss 的示例,请参阅 here

    【讨论】:

      【解决方案2】:

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

      consumer.setMessageListener(this);
      

      你给的链接很清楚:

      原因

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

      解决问题

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

      【讨论】:

      • Roger,您能否提供 setMessageListener 替代品的示例
      猜你喜欢
      • 1970-01-01
      • 2017-09-01
      • 2018-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      相关资源
      最近更新 更多