org.hibernate.context
public class: ManagedSessionContext [javadoc |
source]
java.lang.Object
org.hibernate.context.ManagedSessionContext
All Implemented Interfaces:
CurrentSessionContext
Represents a
CurrentSessionContext the notion of a contextual session
is managed by some external entity (generally some form of interceptor, etc).
This external manager is responsible for scoping these contextual sessions
appropriately binding/unbinding them here for exposure to the application
through
SessionFactory#getCurrentSession calls.
Basically exposes two interfaces.
- First is the implementation of CurrentSessionContext which is then used
by the SessionFactory#getCurrentSession() calls. This
portion is instance-based specific to the session factory owning the given
instance of this impl (there will be one instance of this per each session
factory using this strategy).
- Second is the externally facing methods #hasBind , #bind ,
and #unbind used by the external thing to manage exposure of the
current session it is scoping. This portion is static to allow easy
reference from that external thing.
The underlying storage of the current sessions here is a static
ThreadLocal -based map where the sessions are keyed by the
the owning session factory.
| Methods from java.lang.Object: |
|---|
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Method from org.hibernate.context.ManagedSessionContext Detail: |
public static Session bind(Session session) {
return ( Session ) sessionMap( true ).put( session.getSessionFactory(), session );
}
Binds the given session to the current context for its session factory. |
public Session currentSession() {
Session current = existingSession( factory );
if ( current == null ) {
throw new HibernateException( "No session currently bound to execution context" );
}
return current;
}
|
public static boolean hasBind(SessionFactory factory) {
return existingSession( factory ) != null;
}
Check to see if there is already a session associated with the current
thread for the given session factory. |
protected static Map sessionMap() {
return sessionMap( false );
}
|
public static Session unbind(SessionFactory factory) {
Session existing = null;
Map sessionMap = sessionMap();
if ( sessionMap != null ) {
existing = ( Session ) sessionMap.remove( factory );
doCleanup();
}
return existing;
}
Unbinds the session (if one) current associated with the context for the
given session. |