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);
}