Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-503

WebSphere MQ 8/9 RA - [TCK] sessionQtests#selectorAndBrowserTests test fails because Queue.toString() is not equal to QueueBrowser.getQueue().toString()

    XMLWordPrintable

Details

    • Bug
    • Resolution: Obsolete
    • Major
    • None
    • 7.0.0.DR6, 7.0.0.DR7, 7.2.0.CD14
    • WebSphereMQ RA
    • None

    Description

      TCK 7 test - com/sun/ts/tests/jms/ee/ejb/sessionQtests/Client.java#selectorAndBrowserTests - fails because Queue.toString() does not print the same output as QueueBrowser.getQueue().toString().

      Cause:
      Queue is instance of class com.ibm.mq.connector.outbound.MQQueueProxy which is different from
      QueueBrowser.getQueue() which returns instance of class com.ibm.mq.jms.MQQueue

      Both of the classes contain different implementation of toString() method. As MQQueueProxy instance contains reference to MQQueue instance fix would be to call MQQueue.toString() in MQQueueProxy.toString() method.

      Example of calling toString() on MQQueueProxy and MQQueue:

      print queue: com.ibm.mq.connector.outbound.MQQueueProxy@784a31d0
      print browser getQueue: queue://QM/MY_QUEUE
      

      Impact for customer:
      Customers cannot rely that toString() on MQQueueProxy is same as MQQueue.toString().

      More detailed info:
      See attached tck-log.txt from TCK test.

      Reprocuder:
      Call attached servlet (simple-servlet.war) in browser like:
      http://localhost:8080/simple-servlet/simple-servlet

      Code:

      import javax.annotation.Resource;
      import javax.jms.*;
      import javax.naming.Context;
      import javax.naming.InitialContext;
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.*;
      
      /**
       * Servlet which sends/receives messages to queue/topic.
       */
      public class SimpleServlet extends HttpServlet {
      
          @Resource(mappedName = "java:/jms/QueueConnectionFactory")
          private ConnectionFactory cf;
      
          @Resource(mappedName = "java:/MY_QUEUE")
          private Queue testDestination;
            
          PrintWriter out;
      
          /**
           * @param request
           * @param response
           * @throws javax.servlet.ServletException
           * @throws IOException
           * @see {@link HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)}
           */
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              processRequest(request, response);
          }
      
          /**
           * @param request
           * @param response
           * @throws ServletException
           * @throws IOException
           * @see {@link HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)}
           */
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              doGet(request, response);
          }
      
          /**
           * Process requests
           *
           * @param request
           * @param response
           * @throws ServletException
           * @throws IOException
           */
          protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                  throws ServletException, IOException {
      
              out = response.getWriter();
      
              Connection conn = null;
              try {
                  conn = cf.createConnection("j2ee", "j2ee");
      
                  Session sess = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
      
                  QueueBrowser browseAll = sess.createBrowser(testDestination);
      
                  System.out.println("print queue: " + testDestination.toString());
                  System.out.println("print browser getQueue: " + browseAll.getQueue().toString());
      
                  out.println("print queue: " + testDestination.toString());
                  out.println("print browser getQueue: " + browseAll.getQueue().toString());
      
              } catch (Exception e) {
                  e.printStackTrace();
              } finally {
                  out.close();
                  if (conn != null)   {
                      try {
                          conn.close();
                      } catch (JMSException e) {
                          // ignore
                      }
                  }
              }
          }
      }
      
      

      Attachments

        1. tck-log.txt
          66 kB
        2. simple-servlet.war
          5.05 MB

        Activity

          People

            jmesnil1@redhat.com Jeff Mesnil
            mnovak1@redhat.com Miroslav Novak
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: