You need this form of thread safety if a non-bean session has member variables that are not thread safe by themselves (like SAXParser). However, since a session without a beans state does not have a client proximity like a session with a beans state, use cases are admittedly relatively rare, and the servlet programming model seems to have shown that this level of protection is probably not needed. therefore, if you do not need thread safety, and with EJB 3.1 you can use a singleton bean session with bean -managed concurrency.
EJB- . , EJB , bean, / , ThreadLocal ( , UserTransaction SessionContext).