Add a ServletContext ThreadLocal to RequestFactoryServlet. http://gwt-code-reviews.appspot.com/1448804/ Patch by: larsenje Review by: bobv git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10212 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/web/bindery/requestfactory/server/RequestFactoryServlet.java b/user/src/com/google/web/bindery/requestfactory/server/RequestFactoryServlet.java index 9d45633..fca199e 100644 --- a/user/src/com/google/web/bindery/requestfactory/server/RequestFactoryServlet.java +++ b/user/src/com/google/web/bindery/requestfactory/server/RequestFactoryServlet.java
@@ -23,6 +23,7 @@ import java.util.logging.Level; import java.util.logging.Logger; +import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -43,6 +44,7 @@ * These ThreadLocals are used to allow service objects to obtain access to * the HTTP transaction. */ + private static final ThreadLocal<ServletContext> perThreadContext = new ThreadLocal<ServletContext>(); private static final ThreadLocal<HttpServletRequest> perThreadRequest = new ThreadLocal<HttpServletRequest>(); private static final ThreadLocal<HttpServletResponse> perThreadResponse = new ThreadLocal<HttpServletResponse>(); @@ -64,6 +66,15 @@ return perThreadResponse.get(); } + /** + * Returns the thread-local {@link ServletContext} + * + * @return the {@link ServletContext} associated with this servlet + */ + public static ServletContext getThreadLocalServletContext() { + return perThreadContext.get(); + } + private final SimpleRequestProcessor processor; /** @@ -102,6 +113,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + perThreadContext.set(getServletContext()); perThreadRequest.set(request); perThreadResponse.set(response); @@ -130,6 +142,7 @@ log.log(Level.SEVERE, "Unexpected error", e); } } finally { + perThreadContext.set(null); perThreadRequest.set(null); perThreadResponse.set(null); }