Author: gregw
Date: Fri Jun 23 23:30:01 2006
New Revision: 416868

URL: http://svn.apache.org/viewvc?rev=416868&view=rev
Log:
applied 415827 416324 416640 416641

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

Modified: 
incubator/activemq/branches/activemq-4.0/activemq-web/src/main/java/org/apache/activemq/web/AjaxServlet.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/branches/activemq-4.0/activemq-web/src/main/java/org/apache/activemq/web/AjaxServlet.java?rev=416868&r1=416867&r2=416868&view=diff
==============================================================================
--- 
incubator/activemq/branches/activemq-4.0/activemq-web/src/main/java/org/apache/activemq/web/AjaxServlet.java
 (original)
+++ 
incubator/activemq/branches/activemq-4.0/activemq-web/src/main/java/org/apache/activemq/web/AjaxServlet.java
 Fri Jun 23 23:30:01 2006
@@ -17,6 +17,7 @@
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -47,7 +48,18 @@
             super.doGet(request, response);
     }
     
-    protected void doJavaScript(HttpServletRequest request, 
HttpServletResponse response)throws IOException {
+    protected void doJavaScript(HttpServletRequest request, 
HttpServletResponse response)throws IOException, ServletException {
+        
+        // Look for a local resource first.
+        String js = request.getServletPath()+request.getPathInfo();
+        URL url = getServletContext().getResource(js);
+        if (url!=null)
+        {
+            
getServletContext().getNamedDispatcher("default").forward(request,response);
+            return;
+        }
+        
+        // Serve from the classpath resources
         String resource="org/apache/activemq/web"+request.getPathInfo();
         synchronized(jsCache){
             

Modified: 
incubator/activemq/branches/activemq-4.0/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/branches/activemq-4.0/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java?rev=416868&r1=416867&r2=416868&view=diff
==============================================================================
--- 
incubator/activemq/branches/activemq-4.0/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java
 (original)
+++ 
incubator/activemq/branches/activemq-4.0/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java
 Fri Jun 23 23:30:01 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/branches/activemq-4.0/activemq-web/src/main/resources/org/apache/activemq/web/_amq.js
URL: 
http://svn.apache.org/viewvc/incubator/activemq/branches/activemq-4.0/activemq-web/src/main/resources/org/apache/activemq/web/_amq.js?rev=416868&r1=416867&r2=416868&view=diff
==============================================================================
--- 
incubator/activemq/branches/activemq-4.0/activemq-web/src/main/resources/org/apache/activemq/web/_amq.js
 (original)
+++ 
incubator/activemq/branches/activemq-4.0/activemq-web/src/main/resources/org/apache/activemq/web/_amq.js
 Fri Jun 23 23:30:01 2006
@@ -12,6 +12,10 @@
 
   // Polling. Set to true (default) if waiting poll for messages is needed
   poll: true,
+  
+  // Poll delay. if set to positive integer, this is the time to wait in ms 
before
+  // sending the next poll after the last completes.
+  _pollDelay: 0,
 
   _first: true,
   _pollEvent: function(first) {},
@@ -76,13 +80,14 @@
       var body = amq._messageQueue;
       amq._messageQueue='';
       amq._messages=0;
-      new Ajax.Request(amq.uri, { method: 'post', postBody: body});
+      amq._queueMessages++;
+      new Ajax.Request(amq.uri, { method: 'post', postBody: body, onSuccess: 
amq.endBatch});
     }
   },
 
   _pollHandler: function(request)
   {
-    amq._queueMessages++;
+    amq.startBatch();
     try
     {
       amq._messageHandler(request);
@@ -93,20 +98,17 @@
     {
         alert(e);
     }
+    amq.endBatch();
 
-    amq._queueMessages--;
-
-    if (amq._queueMessages==0 && amq._messages>0)
-    {
-      var body = amq._messageQueue+'&poll='+amq.poll;
-      amq._messageQueue='';
-      amq._messages=0;
-      new Ajax.Request(amq.uri, { method: 'post', onSuccess: amq._pollHandler, 
postBody: body });
-    }
-    else if (amq.poll)
-    {
-        new Ajax.Request(amq.uri, { method: 'get', onSuccess: amq._pollHandler 
});
-    }
+    if (amq._pollDelay>0)
+      setTimeout('amq._sendPoll()',amq._pollDelay);
+    else
+      amq._sendPoll();
+  },
+  
+  _sendPoll: function(request)
+  {
+    new Ajax.Request(amq.uri, { method: 'get', onSuccess: amq._pollHandler });
   },
 
   // Add a function that gets called on every poll response, after all received
@@ -126,7 +128,7 @@
   // xml content.
   sendMessage : function(destination,message)
   {
-   amq._sendMessage(destination,message,'send');
+    amq._sendMessage(destination,message,'send');
   },
 
   // Listen on a channel or topic.   handler must be a function taking a 
message arguement
@@ -147,18 +149,26 @@
   {
     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
     {
-      new Ajax.Request(amq.uri, { method: 'post', postBody: 
'destination='+destination+'&message='+message+'&type='+type});
+      amq.startBatch();
+      new Ajax.Request(amq.uri, { method: 'post', postBody: 
'destination='+destination+'&message='+message+'&type='+type, onSuccess: 
amq.endBatch});
     }
   },
-
+  
   _startPolling : function()
   {
-    if (amq.poll)
+   if (amq.poll)
       new Ajax.Request(amq.uri, { method: 'get', parameters: 'timeout=0', 
onSuccess: amq._pollHandler });
   }
 };


Reply via email to