1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.servlet.jetty;
12
13 import org.mule.api.MuleEvent;
14 import org.mule.api.MuleException;
15 import org.mule.api.MuleMessage;
16 import org.mule.api.transport.MessageReceiver;
17 import org.mule.transport.http.HttpConnector;
18
19 import java.io.IOException;
20
21 import javax.servlet.ServletException;
22 import javax.servlet.http.HttpServletRequest;
23 import javax.servlet.http.HttpServletResponse;
24
25 import org.mortbay.util.ajax.Continuation;
26 import org.mortbay.util.ajax.ContinuationSupport;
27
28 public class JettyContinuationsReceiverServlet extends JettyReceiverServlet
29 {
30 private Object mutex = new Object();
31
32 @Override
33 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
34 {
35 try
36 {
37 final Continuation continuation = ContinuationSupport.getContinuation(request, mutex);
38 synchronized (mutex)
39 {
40 MessageReceiver receiver = getReceiverForURI(request);
41
42 MuleMessage requestMessage = receiver.createMuleMessage(request);
43 requestMessage.setOutboundProperty(HttpConnector.HTTP_METHOD_PROPERTY, request.getMethod());
44
45
46 requestMessage.setReplyTo(continuation);
47 setupRequestMessage(request, requestMessage, receiver);
48
49
50 routeMessage(receiver, requestMessage, request);
51
52 continuation.suspend(10000);
53 }
54
55 writeResponse(response, (MuleMessage) continuation.getObject());
56 }
57 catch (Exception e)
58 {
59 throw new ServletException(e);
60 }
61 }
62
63 @Override
64 protected MuleEvent routeMessage(MessageReceiver receiver, MuleMessage requestMessage, HttpServletRequest request)
65 throws MuleException
66 {
67
68 return receiver.routeMessage(requestMessage);
69 }
70 }