1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.servlet.jetty;
12
13 import org.mule.DefaultMuleMessage;
14 import org.mule.api.MuleException;
15 import org.mule.api.MuleMessage;
16 import org.mule.api.config.MuleProperties;
17 import org.mule.api.transport.MessageReceiver;
18 import org.mule.transport.http.HttpConnector;
19 import org.mule.transport.servlet.HttpRequestMessageAdapter;
20
21 import javax.servlet.http.HttpServletRequest;
22
23 import org.mortbay.util.ajax.Continuation;
24 import org.mortbay.util.ajax.ContinuationSupport;
25
26 public class JettyContinuationsReceiverServlet extends JettyReceiverServlet
27 {
28 private Object mutex = new Object();
29
30
31 protected MuleMessage doMethod(HttpServletRequest request, String method) throws MuleException
32 {
33 final Continuation continuation = ContinuationSupport.getContinuation(request, mutex);
34 synchronized (mutex)
35 {
36 MessageReceiver receiver = getReceiverForURI(request);
37
38 MuleMessage requestMessage = new DefaultMuleMessage(new HttpRequestMessageAdapter(request));
39 requestMessage.setProperty(HttpConnector.HTTP_METHOD_PROPERTY, method);
40
41 requestMessage.removeProperty(MuleProperties.MULE_REMOTE_SYNC_PROPERTY);
42
43 requestMessage.setReplyTo(continuation);
44 setupRequestMessage(request, requestMessage);
45
46
47 routeMessage(receiver, requestMessage, request);
48
49 continuation.suspend(10000);
50 }
51
52 return (MuleMessage)continuation.getObject();
53 }
54
55 protected MuleMessage routeMessage(MessageReceiver receiver, MuleMessage requestMessage, HttpServletRequest request)
56 throws MuleException
57 {
58
59 return receiver.routeMessage(requestMessage, false);
60 }
61 }