## org.hibernate.context.internal
Class ThreadLocalSessionContext

    java.lang.Object
      org.hibernate.context.spi.AbstractCurrentSessionContext
          org.hibernate.context.internal.ThreadLocalSessionContext

All Implemented Interfaces:
  Serializable, CurrentSessionContext

    public class ThreadLocalSessionContext

extends AbstractCurrentSessionContext

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 `SharedSessionContract.beginTransaction()` has been called. If `close()` is called on a session managed by this class, it will be automatically unbound.

Additionally, the static `bind(org.hibernate.Session)` and `unbind(org.hibernate.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).

See Also:
  Serialized Form

Nested Class Summary
`protected static class` `ThreadLocalSessionContext.CleanupSynch` JTA transaction synch used for cleanup of the internal session map.

Constructor Summary
`ThreadLocalSessionContext(SessionFactoryImplementor factory)`

Method Summary
`static void` `bind(Session session)` Associates the given session with the current thread of execution.
`protected ThreadLocalSessionContext.CleanupSynch` `buildCleanupSynch()`
`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 SessionFactoryImplementor` `getFactory()` Getter for property 'factory'.
`protected boolean` `isAutoCloseEnabled()` Mainly for subclass usage.
`protected boolean` `isAutoFlushEnabled()` Mainly for subclass usage.
`protected static Map` `sessionMap()`
`static Session` `unbind(SessionFactory factory)` Disassociates a previously bound session from the current thread of execution.
`protected Session` `wrap(Session session)`

Methods inherited from class org.hibernate.context.spi.AbstractCurrentSessionContext
`baseSessionBuilder, factory, validateExistingSession`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### ThreadLocalSessionContext

    public ThreadLocalSessionContext(SessionFactoryImplementor factory)

Method Detail

### currentSession

    public final Session currentSession()
                                 throws HibernateException

  Description copied from interface: `CurrentSessionContext`
  Retrieve the current session according to the scoping defined by this implementation.

  Returns:
    The current session.
  Throws:
    `HibernateException` - Typically indicates an issue locating or creating the current session.

### getFactory

    protected SessionFactoryImplementor getFactory()

  Getter for property 'factory'.

  Returns:
    Value for property 'factory'.

### 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.

### buildCleanupSynch

    protected ThreadLocalSessionContext.CleanupSynch buildCleanupSynch()

### 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_transaction.

  Returns:
    The connection release mode for any built sessions.

### wrap

    protected Session wrap(Session session)

### bind

    public static void bind(Session session)

  Associates the given session with the current thread of execution.

  Parameters:
    `session` - The session to bind.

### unbind

    public static Session unbind(SessionFactory factory)

  Disassociates a previously bound session from the current thread of execution.

  Parameters:
    `factory` - The factory for which the session should be unbound.
  Returns:
    The session which was unbound.

### sessionMap

    protected static Map sessionMap()

Copyright © 2001-2012 Red Hat, Inc. All Rights Reserved.