1 // Copyright 2011 Google Inc. All Rights Reserved.
3 package com
.google
.appengine
.tools
.development
;
5 import com
.google
.common
.annotations
.VisibleForTesting
;
7 import org
.mortbay
.jetty
.webapp
.WebAppContext
;
9 import java
.io
.IOException
;
11 import javax
.servlet
.RequestDispatcher
;
12 import javax
.servlet
.ServletException
;
13 import javax
.servlet
.http
.HttpServletRequest
;
14 import javax
.servlet
.http
.HttpServletResponse
;
17 * Controls backend servers configured in appengine-web.xml. Each server is
18 * started on a separate port. All servers run the same code as the main app.
22 public class BackendServers
extends AbstractBackendServers
{
24 private static BackendServers instance
= new BackendServers();
26 public static BackendServers
getInstance() {
34 * Forward a request to a specific server and instance. This will call the
35 * specified instance request dispatcher so the request is handled in the
36 * right server context.
39 protected void forwardToServer(String requestedServer
, int instance
, HttpServletRequest hrequest
,
40 HttpServletResponse hresponse
) throws IOException
, ServletException
{
41 ServerWrapper server
= getServerWrapper(requestedServer
, instance
);
42 logger
.finest("forwarding request to server: " + server
);
43 WebAppContext jettyContext
=
44 (WebAppContext
) server
.getContainer().getAppContext().getContainerContext();
45 RequestDispatcher requestDispatcher
=
46 jettyContext
.getServletContext().getRequestDispatcher(hrequest
.getRequestURI());
47 requestDispatcher
.forward(hrequest
, hresponse
);