Coverage Report - org.mule.transport.servlet.jetty.JettyContinuationsReceiverServlet
 
Classes in this File Line Coverage Branch Coverage Complexity
JettyContinuationsReceiverServlet
100%
15/15
N/A
1
 
 1  
 /*
 2  
  * $Id: JettyContinuationsReceiverServlet.java 12320 2008-07-13 04:58:28Z rossmason $
 3  
  * --------------------------------------------------------------------------------------
 4  
  * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
 5  
  *
 6  
  * The software in this package is published under the terms of the CPAL v1.0
 7  
  * license, a copy of which has been included with this distribution in the
 8  
  * LICENSE.txt file.
 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  6
 public class JettyContinuationsReceiverServlet extends JettyReceiverServlet
 27  
 {
 28  6
     private Object mutex = new Object();
 29  
 
 30  
     //@Override
 31  
     protected MuleMessage doMethod(HttpServletRequest request, String method) throws MuleException
 32  
     {
 33  166
         final Continuation continuation = ContinuationSupport.getContinuation(request, mutex);
 34  166
         synchronized (mutex)
 35  
         {
 36  166
             MessageReceiver receiver = getReceiverForURI(request);
 37  
 
 38  164
             MuleMessage requestMessage = new DefaultMuleMessage(new HttpRequestMessageAdapter(request));
 39  164
             requestMessage.setProperty(HttpConnector.HTTP_METHOD_PROPERTY, method);
 40  
             //Need to remove this if set, we'll be returning a result but we need to make the request async
 41  164
             requestMessage.removeProperty(MuleProperties.MULE_REMOTE_SYNC_PROPERTY);
 42  
             //This will allow Mule to continue the response once the service has do its processing
 43  164
             requestMessage.setReplyTo(continuation);
 44  164
             setupRequestMessage(request, requestMessage);
 45  
 
 46  
             //we force asynchronous in the {@link #routeMessage} method
 47  164
             routeMessage(receiver, requestMessage, request);
 48  
 
 49  164
             continuation.suspend(10000);
 50  82
         }
 51  
 
 52  82
         return (MuleMessage)continuation.getObject();
 53  
     }
 54  
 
 55  
     protected MuleMessage routeMessage(MessageReceiver receiver, MuleMessage requestMessage, HttpServletRequest request)
 56  
         throws MuleException
 57  
     {
 58  
         //Force asynchronous processing since we are using continuations
 59  164
         return receiver.routeMessage(requestMessage, false);
 60  
     }
 61  
 }