Hi, I just came across http://chasethedevil.blogspot.com/2007/08/original-pattern-servletrequest-in.html It looks like keeping request context in threadlocals is fairly common practice. GWT and Axis framework are using it.In the "Context Object" pattern by Douglas Schmidt, passing context implicitly using thread local storage is mentioned as one of the arternatives.(http://www.cs.wustl.edu/~schmidt/PDF/Context-Object-Pattern.pdf) Context Object pattern in core j2ee patterns book mentions passing context explicitly. It may be very convinicent sometimes to use Context Object pattern and keep it in thread local storage for propogating it across logical layers on the code. Following is the code that I think very reasonable and helpful,The example code might be like RequestContextHolder { private static ThreadLocal threadLocal = new ThreadLocal(); public static Map get() { return (Map)threadLocal.get(); } public static void set(Map context) { threadLocal.set(context); } public static void clearContext() { threadLocal.remove(); } } class FrontController { public void handleReqeuest(HttpRequst request.....) { try { Map requestContext = buildRequestContext(request); RequestContextHolder.set(requestContext); ..... Response response = handleRequest(request); processResponse(response); } finally { RequestContextHolder.clearContext(); } } } Then whereever we need context in our code, Just call Map requestContext = ContextHolder.get(); Some of the drawbacks. 1. Dependency on the context is not explicit if not passed in method parameter. 2. Code loses testability. 3. There are some issues with ThreadLocal and app server reload facility so we have to be little careful.(http://www.jroller.com/tackline/entry/fixing_threadlocal)