Once I have came across a pattern, where ServletRequest
and response objects are put to servlet\'s local ThreadLocal
variables. The servlet class h
Purpose of ThreadLocal ?
when you have some object that is not thread-safe, but you want to avoid synchronizing access to that object ( SimpleDateFormat). Instead, give each thread its own instance of the object.
You need to be very careful about cleaning up any ThreadLocals you get()
or set()
by using the ThreadLocal's remove()
method.
This is really terrible. You should obtain the values you need from the HTTP request/session as soon as you possibly can. you can pass these values in method invocations or Transfer Objects. you should strive to write methods/classes technology-free. if your method/class obtains an http request from ThreadLocal it's a worthless class - it's no longer useful in any any non-http context.
It's especially shocking to me to see people pull http requests from ThreadLocal in BOs (Business Objects) or DAOs. HTTP requests should never appear in any layer other than the presentation layer of the application.