activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gr...@apache.org
Subject svn commit: r415827 - in /incubator/activemq/trunk/activemq-web/src/main: java/org/apache/activemq/web/MessageListenerServlet.java resources/org/apache/activemq/web/_amq.js
Date Tue, 20 Jun 2006 22:26:49 GMT
Author: gregw
Date: Tue Jun 20 15:26:49 2006
New Revision: 415827

URL: http://svn.apache.org/viewvc?rev=415827&view=rev
Log:
changed parameter handling to impose a strict ordering to avoid reordering of messages by
client libraries

Modified:
    incubator/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java
    incubator/activemq/trunk/activemq-web/src/main/resources/org/apache/activemq/web/_amq.js

Modified: incubator/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java?rev=415827&r1=415826&r2=415827&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java
(original)
+++ incubator/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java
Tue Jun 20 15:26:49 2006
@@ -90,7 +90,16 @@
     }
 
     /**
-     * Sends a message to a destination
+     * Sends a message to a destination or manage subscriptions.
+     * 
+     * If the the content type of the POST is <code>application/x-www-form-urlencoded</code>,
then the form parameters 
+     * "destination", "message" and "type" are used to pass a message or a subscription.
 If multiple messages
+     * or subscriptions are passed in a single post, then additional parameters are shortened
to "dN", "mN" and "tN"
+     * where N is an index starting from 1. The type is either "send", "listen" or "unlisten".
 For send types,
+     * the message is the text of the TextMessage, otherwise it is the ID to be used for
the subscription.
+     * 
+     * If the content type is not <code>application/x-www-form-urlencoded</code>,
then the body of the post is
+     * sent as the message to a destination that is derived from a query parameter, the URL
or the default destination.
      * 
      * @param request
      * @param response
@@ -110,30 +119,30 @@
                 log.debug("POST client="+client+" session="+request.getSession().getId()+"
info="+request.getPathInfo()+" contentType="+request.getContentType());
             // dump(request.getParameterMap());
             }
-            String[] destinations = request.getParameterValues("destination");
-            String[] messages = request.getParameterValues("message");
-            String[] types = request.getParameterValues("type");
             
-            if (destinations.length!=messages.length || messages.length!=types.length)
-            {
-                if (log.isDebugEnabled()) {
-                    log.debug("ERROR destination="+destinations.length+" message="+messages.length+"
type="+types.length);
-                }
-                response.sendError(HttpServletResponse.SC_BAD_REQUEST,"missmatched destination,
message or type");
-                return;
-            }
+            int messages=0;
             
-            for (int i=0;i<types.length;i++)
+            // loop until no more messages
+            while (true)
             {
+                // Get the message parameters.   Multiple messages are encoded with more
compact parameter names.
+                String destination_name = request.getParameter(messages==0?"destination":("d"+messages));
+                String message = request.getParameter(messages==0?"message":("m"+messages));
+                String type = request.getParameter(messages==0?"type":("t"+messages));
+                
+                if (destination_name==null || message==null || type==null)
+                    break;
+                
                 try {
-                    String type=types[i];
-                    Destination destination=getDestination(client,request,destinations[i]);
+                    Destination destination=getDestination(client,request,destination_name);
                     
                     if (log.isDebugEnabled()) {
-                        log.debug(i+" destination="+destinations[i]+" message="+messages[i]+"
type="+types[i]);
+                        log.debug(messages+" destination="+destination_name+" message="+message+"
type="+type);
                         log.debug(destination+" is a "+destination.getClass().getName());
                     }
                     
+                    messages++;
+                    
                     if ("listen".equals(type))
                     {
                         Listener listener = getListener(request);
@@ -142,9 +151,9 @@
                         MessageAvailableConsumer consumer = (MessageAvailableConsumer) client.getConsumer(destination);
                         
                         consumer.setAvailableListener(listener);
-                        consumerIdMap.put(consumer, messages[i]);
+                        consumerIdMap.put(consumer, message);
                         if (log.isDebugEnabled()) {
-                            log.debug("Subscribed: "+consumer+" to "+destination+" id="+messages[i]);
+                            log.debug("Subscribed: "+consumer+" to "+destination+" id="+message);
                         }
                     }
                     else if ("unlisten".equals(type))
@@ -161,13 +170,13 @@
                     }
                     else if ("send".equals(type))
                     {
-                        TextMessage message = client.getSession().createTextMessage(messages[i]);
-                        appendParametersToMessage(request, message);
+                        TextMessage text = client.getSession().createTextMessage(message);
+                        appendParametersToMessage(request, text);
 
-                        client.send(destination, message);
-                        message_ids+=message.getJMSMessageID()+"\n";
+                        client.send(destination, text);
+                        message_ids+=text.getJMSMessageID()+"\n";
                         if (log.isDebugEnabled()) {
-                            log.debug("Sent "+messages[i]+" to "+destination);
+                            log.debug("Sent "+message+" to "+destination);
                         }
                     }
                     else

Modified: incubator/activemq/trunk/activemq-web/src/main/resources/org/apache/activemq/web/_amq.js
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-web/src/main/resources/org/apache/activemq/web/_amq.js?rev=415827&r1=415826&r2=415827&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-web/src/main/resources/org/apache/activemq/web/_amq.js
(original)
+++ incubator/activemq/trunk/activemq-web/src/main/resources/org/apache/activemq/web/_amq.js
Tue Jun 20 15:26:49 2006
@@ -147,7 +147,14 @@
   {
     if (amq._queueMessages>0)
     {
-      amq._messageQueue+=(amq._messages==0?'destination=':'&destination=')+destination+'&message='+message+'&type='+type;
+      if (amq._messages==0)
+      {
+        amq._messageQueue='destination='+destination+'&message='+message+'&type='+type;
+      }
+      else
+      {
+        amq._messageQueue='d'+amq._messages+'='+destination+'&m'+amq._messages+'='+message+'&t'+amq._messages+'='+type;
+      }
       amq._messages++;
     }
     else



Mime
View raw message