mirror of https://github.com/apache/activemq.git
applied 415827 416324 416640 416641
git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/branches/activemq-4.0@416868 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5779e882f2
commit
586d9ef320
|
@ -17,6 +17,7 @@ package org.apache.activemq.web;
|
|||
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 @@ public class AjaxServlet extends MessageListenerServlet {
|
|||
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){
|
||||
|
||||
|
|
|
@ -90,7 +90,16 @@ public class MessageListenerServlet extends MessageServletSupport {
|
|||
}
|
||||
|
||||
/**
|
||||
* 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 @@ public class MessageListenerServlet extends MessageServletSupport {
|
|||
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 @@ public class MessageListenerServlet extends MessageServletSupport {
|
|||
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 @@ public class MessageListenerServlet extends MessageServletSupport {
|
|||
}
|
||||
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
|
||||
|
|
|
@ -12,6 +12,10 @@ var amq =
|
|||
|
||||
// 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 amq =
|
|||
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 @@ var amq =
|
|||
{
|
||||
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 @@ var amq =
|
|||
// 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 @@ var amq =
|
|||
{
|
||||
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 });
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue