org.hibernate.context
Class ThreadLocalSessionContext
java.lang.Object
org.hibernate.context.ThreadLocalSessionContext
- CurrentSessionContext, Serializable
public class ThreadLocalSessionContext
extends java.lang.Object
A
CurrentSessionContext
impl which scopes the notion of current
session by the current thread of execution. Unlike the JTA counterpart,
threads do not give us a nice hook to perform any type of cleanup making
it questionable for this impl to actually generate Session instances. In
the interest of usability, it was decided to have this default impl
actually generate a session upon first request and then clean it up
after the
Transaction
associated with that session
is committed/rolled-back. In order for ensuring that happens, the sessions
generated here are unusable until after
Session.beginTransaction()
has been called. If
close() is called on a session managed by
this class, it will be automatically unbound.
Additionally, the static
bind(Session)
and
unbind(SessionFactory)
methods are
provided to allow application code to explicitly control opening and
closing of these sessions. This, with some from of interception,
is the preferred approach. It also allows easy framework integration
and one possible approach for implementing long-sessions.
The
buildOrObtainSession()
,
isAutoCloseEnabled()
,
isAutoFlushEnabled()
,
getConnectionReleaseMode()
, and
buildCleanupSynch()
methods are all provided to allow easy
subclassing (for long-running session scenarios, for example).
bind
public static void bind(Session session)
Associates the given session with the current thread of execution.
session
- The session to bind.
buildOrObtainSession
protected Session buildOrObtainSession()
Strictly provided for subclassing purposes; specifically to allow long-session
support.
This implementation always just opens a new session.
- the built or (re)obtained session.
getConnectionReleaseMode
protected ConnectionReleaseMode getConnectionReleaseMode()
Mainly for subclass usage. This impl always returns after_transaction.
- The connection release mode for any built sessions.
isAutoCloseEnabled
protected boolean isAutoCloseEnabled()
Mainly for subclass usage. This impl always returns true.
- Whether or not the the session should be closed by transaction completion.
isAutoFlushEnabled
protected boolean isAutoFlushEnabled()
Mainly for subclass usage. This impl always returns true.
- Whether or not the the session should be flushed prior transaction completion.
sessionMap
protected static Map sessionMap()
unbind
public static Session unbind(SessionFactory factory)
Unassociate a previously bound session from the current thread of execution.
- The session which was unbound.