javax.jms.JMSSecurityException:MQJMS2008:无法打开MQ队列

| 我有一个基于JMS的应用程序,该应用程序正在Websphere 6.0上运行,并且正在迁移到Websphere7。两个Websphere服务器都支持Websphere MQ 6.0服务器。尝试将测试servlet部署到Websphere 7服务器时,我收到以下异常: javax.jms.JMSSecurityException:MQJMS2008:无法打开MQ队列 Websphere 6.0:RHEL 5.3 Websphere 7.0.0.15:RHEL 5.3 Websphere MQ 6.0:Windows Server 2003 Servlet测试代码:
public class JMSTestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
        String MQConnectionFactory, MQQueue; 

    public JMSTestServlet() {
        super();
        // TODO Auto-generated constructor stub
        System.out.println(\"JMSTestServlet: loading\");

        URL urlProps = getClass().getClassLoader().getResource(\"META-INF/startup.properties\");
        Properties props = new Properties();
        try
                {
          System.out.println(\"JMSTestServlet: loading properties\");
          props.load( urlProps.openStream() );

                    MQConnectionFactory = props.getProperty(\"MQConnectionFactory\"); 
                    MQQueue = props.getProperty(\"MQQueue\"); 

          System.out.println(\"JMSTestServlet: loading properties ... done!\");

          sendMessage(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\");
                } catch (IOException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    }

    protected void sendMessage(String messageString) { 
        QueueConnectionFactory fact;
        QueueConnection qConn = null;
        try { 
            System.out.println(\"JMSTestServlet: creating context\");
            Context ctx = new InitialContext();
            fact = (QueueConnectionFactory)ctx.lookup(MQConnectionFactory);
            Destination destination = (Destination)ctx.lookup(MQQueue);

            System.out.println(\"JMSTestServlet: creating QueueConnection\");
            qConn = fact.createQueueConnection(); 
            QueueSession    qSess = qConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
            MessageProducer prod = qSess.createProducer(destination); 


            System.out.println(\"JMSTestServlet: sending Message\");
            TextMessage message = qSess.createTextMessage();
            message.setText(messageString);
            prod.send(message); 

            System.out.println(\"JMSTestServlet: done sendMessage()\");
        } catch ( JMSException ex ) {
            ex.toString(); 
            ex.printStackTrace();
            ex.getLinkedException().toString();
            ex.getLinkedException().printStackTrace();
        } catch ( NamingException ex ) {
            System.out.println(\"JMSTestServlet: naming exception \" + ex.toString());
            ex.printStackTrace();
        } catch ( Exception ex ) {
          System.out.println(\"JNDI API lookup failed: \" +         ex.toString());
            ex.printStackTrace();           
        } finally {
            System.out.println(\"JMSTestServlet: cleaning up sendMessage()\");

            try
            {
                if ( qConn != null ) qConn.close();
            } catch (JMSException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try { 
            String messageString = request.getParameter(\"message\"); 
            sendMessage(messageString);
        } finally {
        }
    }
属性文件是:
MQConnectionFactory=jms/QUEUECONNFACTORY
MQQueue=jms/QUEUE 
部署到Websphere 6后,我会在远程队列中收到消息。当我部署到Websphere 7时,我得到:
[4/13/11 14:53:55:622 EDT] 0000005c ConnectionEve A   J2CA0056I: The Connection Manager received a fatal connection error from the Resource Adapter for resource JMS$QUEUECONNFACTORY$JMSManagedConnection@15. The exception is: javax.jms.JMSSecurityException: MQJMS2008: failed to open MQ queue \'QUEUE\'.
[4/13/11 14:53:55:622 EDT] 0000005c ConnectionEve W   J2CA0206W: A connection error occurred.  To help determine the problem, enable the Diagnose Connection Usage option on the Connection Factory or Data Source.
[4/13/11 14:53:55:623 EDT] 0000005c ConnectionEve A   J2CA0056I: The Connection Manager received a fatal connection error from the Resource Adapter for resource jms/QUEUECONNFACTORY. The exception is: javax.jms.JMSSecurityException: MQJMS2008: failed to open MQ queue \'QUEUE\'.
[4/13/11 14:53:55:625 EDT] 0000005c SystemErr     R   javax.jms.JMSSecurityException: MQJMS2008: failed to open MQ queue \'QUEUE\'.
我很确定我已经在两个Websphere服务器上配置了相同的队列和连接工厂。我对如何解决此问题一无所知,而Google毫无帮助。 更新2011-04-15: 我从日志中提取了以下错误:   com.ibm.mq.MQException:MQJE001:完成码\'2 \',原因\'2035 \' 我已经在几个位置进行了阅读,但我真的看不到WAS 6和WAS 7之间的差异会导致此问题。 我正在以root用户身份在两台Linux主机上运行websphere。我有一个在Windows计算机上创建的root帐户,该帐户具有对MQ安装的完全权限:   setmqaut -t qmgr -m QM_webspheremq -p根+全部     
已邀请:

bab

我也遇到同样的错误。检查您的端口,队列管理器和队列详细信息。对我来说,这是不正确的通道。 对于其他用户: 当您拥有MQJMS2008时,您没有操作该队列的权限,您必须获得一个嵌套的Exception,该异常为您提供有关错误的更多信息,并且它告诉您MQRC原因码和终止码。 有关原因码的更多信息,请打开CMD并键入mqrc 分析您的错误,看起来您被允许访问该队列,我有一些问题: 您正在使用JNDI进行连接吗?如果要与进行PTP连接的类进行连接(我的意思是不使用JNDI),那么如果您想了解有关PTP连接的更多信息,则必须为MQQueueConnectionFactory提供通道,队列管理器,队列名称和服务器的主机名。 ,这里是:http://hursleyonwmq.wordpress.com/2007/05/29/simplest-sample-applications-using-websphere-mq-jms/。 如果使用远程队列执行此操作,并且在Windows上使用MQSeries而不是WMQ,则必须向公众授予所有特权。 使用WRKMQMQ。 如果您可以提供嵌套异常,我将为您提供帮助。     

要回复问题请先登录注册