org.hibernate.context
Class JTASessionContext

java.lang.Object
  extended by org.hibernate.context.JTASessionContext
All Implemented Interfaces:
Serializable, CurrentSessionContext

public class JTASessionContext
extends Object
implements CurrentSessionContext

An implementation of CurrentSessionContext which scopes the notion of a current session to a JTA transaction. Because JTA gives us a nice tie-in to clean up after ourselves, this implementation will generate Sessions as needed provided a JTA transaction is in effect. If a session is not already associated with the current JTA transaction at the time currentSession() is called, a new session will be opened and it will be associated with that JTA transaction.

Note that the sessions returned from this method are automatically configured with both the auto-flush and auto-close attributes set to true, meaning that the Session will be automatically flushed and closed as part of the lifecycle for the JTA transaction to which it is associated. Additionally, it will also be configured to aggressively release JDBC connections after each statement is executed. These settings are governed by the isAutoFlushEnabled(), isAutoCloseEnabled(), and getConnectionReleaseMode() methods; these are provided (along with the buildOrObtainSession() method) for easier subclassing for custom JTA-based session tracking logic (like maybe long-session semantics).

Author:
Steve Ebersole
See Also:
Serialized Form

Nested Class Summary
protected static class JTASessionContext.CleanupSynch
          JTA transaction synch used for cleanup of the internal session map.
 
Field Summary
protected  SessionFactoryImplementor factory
           
 
Constructor Summary
JTASessionContext(SessionFactoryImplementor factory)
           
 
Method Summary
protected  Session buildOrObtainSession()
          Strictly provided for subclassing purposes; specifically to allow long-session support.
 Session currentSession()
          Retrieve the current session according to the scoping defined by this implementation.
protected  ConnectionReleaseMode getConnectionReleaseMode()
          Mainly for subclass usage.
protected  boolean isAutoCloseEnabled()
          Mainly for subclass usage.
protected  boolean isAutoFlushEnabled()
          Mainly for subclass usage.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

factory

protected final SessionFactoryImplementor factory
Constructor Detail

JTASessionContext

public JTASessionContext(SessionFactoryImplementor factory)
Method Detail

currentSession

public Session currentSession()
                       throws HibernateException
Description copied from interface: CurrentSessionContext
Retrieve the current session according to the scoping defined by this implementation.

Specified by:
currentSession in interface CurrentSessionContext
Returns:
The current session.
Throws:
HibernateException - Typically indicates an issue locating or creating the current session.

buildOrObtainSession

protected Session buildOrObtainSession()
Strictly provided for subclassing purposes; specifically to allow long-session support.

This implementation always just opens a new session.

Returns:
the built or (re)obtained session.

isAutoCloseEnabled

protected boolean isAutoCloseEnabled()
Mainly for subclass usage. This impl always returns true.

Returns:
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.

Returns:
Whether or not the the session should be flushed prior transaction completion.

getConnectionReleaseMode

protected ConnectionReleaseMode getConnectionReleaseMode()
Mainly for subclass usage. This impl always returns after_statement.

Returns:
The connection release mode for any built sessions.