The following table lists the core JCR interfaces and the corresponding Jackrabbit implementation classes found in this package.
JCR interface | Implementation class |
---|---|
{@link javax.jcr.Repository Repository} | {@link org.apache.jackrabbit.core.RepositoryImpl RepositoryImpl} |
{@link javax.jcr.Session Session} | {@link org.apache.jackrabbit.core.SessionImpl SessionImpl} |
{@link javax.jcr.Workspace Workspace} | {@link org.apache.jackrabbit.core.WorkspaceImpl WorkspaceImpl} |
{@link javax.jcr.Item Item} | {@link org.apache.jackrabbit.core.ItemImpl ItemImpl} |
{@link javax.jcr.Property Property} | {@link org.apache.jackrabbit.core.PropertyImpl PropertyImpl} |
{@link javax.jcr.Node Node} | {@link org.apache.jackrabbit.core.NodeImpl NodeImpl} |
A Jackrabbit repository instance can be created using the static {@link org.apache.jackrabbit.core.RepositoryImpl#create(org.apache.jackrabbit.core.config.RepositoryConfig) RepositoryImpl.create(RepositoryConfig)} method. The {@link org.apache.jackrabbit.core.jndi.RepositoryHelper RepositoryHelper} and other classes in the {@link org.apache.jackrabbit.core.jndi org.apache.jackrabbit.core.jndi} package provide a mechanism for binding a Jackrabbit repository in a JNDI directory context.
A SessionImpl
instance is created upon successfully login to the
Repository
(see Repository#login(Credentials, String)
).
Session
is always tied to the Workspace
specified in the Repository#login(Credentials, String)
call. A
workspace represents a persistent tree of repository items (i.e. Node
s
and Property
s). The items in a workspace are 'visible' to all
sessions accessing it (subject to their access rights, of course).
A WorkspaceImpl
instance represents a specifc workspace as
seen by the session that accesses it.
Every repository item is uniquely identified by its ItemId
. The id
of a node (NodeId
) consists of the node's uuid. The id of a property
(PropertyId
) consists of the parent node's uuid and the
name of the property.
Every SessionImpl
instance has its own ItemManager
.
The per-session instance of ItemManager
acts as item factory (i.e.
it creates NodeImpl
and PropertyImpl
instances) and
provides item access by item id and item caching.
The data (or state) of an item is represented by the following classes in the
subpackage state
:
There's one SharedItemStateManager
for every workspace.
It provides item state caching and it guarantees that there's only one
(persistent) item state instance for any distinct item id in that workspace.
Every session has its own SessionItemStateManager
that consists
of the session's TransientItemStateManager
and the workspace's
SharedItemStateManager
.
Each item (i.e. NodeImpl
and PropertyImpl
) instance
is holding an ItemState
instance. When e.g. a session is modifying
a property by changing the property's value, a new transient item state
is created by the session's TransientItemStateManager
. This
transient state is actually wrapping the (old) shared state (copy on write).
The PropertyImpl
's state is then replaced by the new transient state.
Transient (i.e. unsaved) modifications are 'session-local', i.e. they are not visible to other sessions. When the modifications are saved they become instantly visible to all sessions accessing the same workspace.