You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/06/22 17:35:38 UTC

svn commit: r549847 - /activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java

Author: jstrachan
Date: Fri Jun 22 08:35:37 2007
New Revision: 549847

URL: http://svn.apache.org/viewvc?view=rev&rev=549847
Log:
applied patch for AMQ-1270 from Dennis Byrne with thanks!

Modified:
    activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java

Modified: activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java?view=diff&rev=549847&r1=549846&r2=549847
==============================================================================
--- activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java (original)
+++ activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java Fri Jun 22 08:35:37 2007
@@ -128,6 +128,10 @@
             {
                 // Get the message parameters.   Multiple messages are encoded with more compact parameter names.
                 String destination_name = request.getParameter(messages==0?"destination":("d"+messages));
+                
+                if(destination_name == null)
+                	destination_name = request.getHeader("destination");
+                
                 String message = request.getParameter(messages==0?"message":("m"+messages));
                 String type = request.getParameter(messages==0?"type":("t"+messages));
                 
@@ -148,11 +152,13 @@
                     {
                         Listener listener = getListener(request);
                         Map consumerIdMap = getConsumerIdMap(request);
+                        Map consumerDestinationMap = getConsumerDestinationNameMap(request);
                         client.closeConsumer(destination); // drop any existing consumer.
                         MessageAvailableConsumer consumer = (MessageAvailableConsumer) client.getConsumer(destination);
                         
                         consumer.setAvailableListener(listener);
                         consumerIdMap.put(consumer, message);
+                        consumerDestinationMap.put(consumer, destination_name);
                         if (log.isDebugEnabled()) {
                             log.debug("Subscribed: "+consumer+" to "+destination+" id="+message);
                         }
@@ -160,10 +166,12 @@
                     else if ("unlisten".equals(type))
                     {
                         Map consumerIdMap = getConsumerIdMap(request);
+                        Map consumerDestinationMap = getConsumerDestinationNameMap(request);
                         MessageAvailableConsumer consumer = (MessageAvailableConsumer) client.getConsumer(destination);
                         
                         consumer.setAvailableListener(null);
                         consumerIdMap.remove(consumer);
+                        consumerDestinationMap.remove(consumer);
                         client.closeConsumer(destination);
                         if (log.isDebugEnabled()) {
                             log.debug("Unsubscribed: "+consumer);
@@ -315,15 +323,20 @@
             PrintWriter writer = new PrintWriter(swriter);
 
             Map consumerIdMap = getConsumerIdMap(request);
+            Map<MessageAvailableConsumer, String> consumerDestinationNameMap = getConsumerDestinationNameMap(request);
             response.setStatus(HttpServletResponse.SC_OK);
             writer.println("<ajax-response>");
 
             // Send any message we already have
             if (message != null) {
                 String id = (String) consumerIdMap.get(consumer);
+                String destinationName = consumerDestinationNameMap.get(consumer);
                 writer.print("<response id='");
                 writer.print(id);
-                writer.print("'>");
+                writer.print("'");
+                if(destinationName != null)
+                	writer.print(" destination='" + destinationName + "' ");
+                writer.print(">");
                 writeMessageResponse(writer, message);
                 writer.println("</response>");
                 messages++;
@@ -343,9 +356,13 @@
                     }
                     messages++;
                     String id = (String) consumerIdMap.get(consumer);
+                    String destinationName = consumerDestinationNameMap.get(consumer);
                     writer.print("<response id='");
                     writer.print(id);
-                    writer.print("'>");
+                    writer.print("'");
+                    if(destinationName != null)
+                    	writer.print(" destination='" + destinationName + "' ");
+                    writer.print(">");                    
                     writeMessageResponse(writer, message);
                     writer.println("</response>");
                 }
@@ -399,6 +416,16 @@
         return map;
     }
 
+    protected Map<MessageAvailableConsumer, String> getConsumerDestinationNameMap(HttpServletRequest request) {
+    	HttpSession session = request.getSession(true);
+    	Map map = (Map) session.getAttribute("mls.consumerDestinationNameMap");
+      if (map == null) {
+        map = new HashMap<MessageAvailableConsumer, String>();
+        session.setAttribute("mls.consumerDestinationNameMap", map);
+      }
+      return map;
+    }
+    
     protected boolean isRicoAjax(HttpServletRequest request) {
         String rico = request.getParameter("rico");
         return rico != null && rico.equals("true");