Several people (eg at serverside http://www.theserverside.com/news/thread.tss?thread_id=41473) suggest that using ThreadLocal objects is as bad as using global variables. I
If you use Spring, you can simply use a request-scoped bean instead of explicit ThreadLocals:
ThreadLocal
public interface UserName { ... } @Component @Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES) public class UsernameImpl implements UserName { private String username; ... }