Represents a {@link CurrentSessionContext} the notion of a contextual sessionis 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 {@link SessionFactory#getCurrentSession} calls.
Basically exposes two interfaces.
- First is the implementation of CurrentSessionContext which is then used by the {@link SessionFactory#getCurrentSession()} calls. Thisportion 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 {@link #hasBind}, {@link #bind}, and {@link #unbind} used by the external thing to manage exposure of thecurrent 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 {@link ThreadLocal}-based map where the sessions are keyed by the the owning session factory.
@author Steve Ebersole