-
Bug
-
Resolution: Obsolete
-
Major
-
None
-
7.0.0.DR6, 7.0.0.DR7, 7.2.0.CD14
-
None
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 } } } } }