You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2010/06/22 17:01:23 UTC

svn commit: r956912 - in /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core: ./ session/ version/

Author: jukka
Date: Tue Jun 22 15:01:23 2010
New Revision: 956912

URL: http://svn.apache.org/viewvc?rev=956912&view=rev
Log:
JCR-890: concurrent read-only access to a session

Turn Item.save() into a managed operation.

Introduce SessionContext to avoid having to pass a yet another reference around.

Added:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionContext.java   (with props)
Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionImpl.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java?rev=956912&r1=956911&r2=956912&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java Tue Jun 22 15:01:23 2010
@@ -56,6 +56,8 @@ import org.apache.jackrabbit.core.nodety
 import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
 import org.apache.jackrabbit.core.security.AccessManager;
 import org.apache.jackrabbit.core.security.authorization.Permission;
+import org.apache.jackrabbit.core.session.SessionContext;
+import org.apache.jackrabbit.core.session.SessionOperation;
 import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.state.ItemState;
 import org.apache.jackrabbit.core.state.ItemStateException;
@@ -90,7 +92,12 @@ public abstract class ItemImpl implement
     protected final ItemId id;
 
     /**
-     * <code>Session</code> through which this <code>Item</code> was acquired
+     * The component context of the session to which this item is associated.
+     */
+    protected final SessionContext sessionContext;
+
+    /**
+     * The session to which this item is associated.
      */
     protected final SessionImpl session;
 
@@ -113,17 +120,23 @@ public abstract class ItemImpl implement
      * Package private constructor.
      *
      * @param itemMgr   the <code>ItemManager</code> that created this <code>Item</code>
-     * @param session   the <code>Session</code> through which this <code>Item</code> is acquired
+     * @param sessionContext the component context of the associated session
      * @param data      ItemData of this <code>Item</code>
      */
-    ItemImpl(ItemManager itemMgr, SessionImpl session, ItemData data) {
-        this.session = session;
-        stateMgr = session.getItemStateManager();
+    ItemImpl(ItemManager itemMgr, SessionContext sessionContext, ItemData data) {
+        this.sessionContext = sessionContext;
+        this.session = sessionContext.getSessionImpl();
+        this.stateMgr = session.getItemStateManager();
         this.id = data.getId();
         this.itemMgr = itemMgr;
         this.data = data;
     }
 
+    protected void perform(SessionOperation operation)
+            throws RepositoryException {
+        sessionContext.getSessionState().perform(operation);
+    }
+
     /**
      * Performs a sanity check on this item and the associated session.
      *
@@ -131,7 +144,7 @@ public abstract class ItemImpl implement
      */
     protected void sanityCheck() throws RepositoryException {
         // check session status
-        session.sanityCheck();
+        perform(new SessionOperation("sanity check"));
 
         // check status of this item for read operation
         final int status = data.getStatus();
@@ -955,16 +968,21 @@ public abstract class ItemImpl implement
     /**
      * {@inheritDoc}
      */
-    public void save()
-            throws AccessDeniedException, ItemExistsException,
-            ConstraintViolationException, InvalidItemStateException,
-            ReferentialIntegrityException, VersionException, LockException,
-            NoSuchNodeTypeException, RepositoryException {
+    public void save() throws RepositoryException {
         // check state of this instance
         sanityCheck();
 
-        // synchronize on this session
-        synchronized (session) {
+        perform(new SaveOperation());
+    }
+
+    private class SaveOperation extends SessionOperation {
+
+        public SaveOperation() {
+            super("item save");
+        }
+
+        @Override
+        public void perform() throws RepositoryException {
             /**
              * build list of transient (i.e. new & modified) states that
              * should be persisted

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java?rev=956912&r1=956911&r2=956912&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java Tue Jun 22 15:01:23 2010
@@ -52,6 +52,7 @@ import org.apache.jackrabbit.core.util.D
 import org.apache.jackrabbit.core.version.VersionHistoryImpl;
 import org.apache.jackrabbit.core.version.VersionImpl;
 import org.apache.jackrabbit.core.security.AccessManager;
+import org.apache.jackrabbit.core.session.SessionContext;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.Path;
 import org.apache.jackrabbit.spi.QPropertyDefinition;
@@ -92,6 +93,11 @@ public class ItemManager implements Dump
     private final org.apache.jackrabbit.spi.commons.nodetype.NodeDefinitionImpl rootNodeDef;
     private final NodeId rootNodeId;
 
+    /**
+     * Component context of the associated session.
+     */
+    protected final SessionContext sessionContext;
+
     protected final SessionImpl session;
 
     private final SessionItemStateManager sism;
@@ -118,20 +124,19 @@ public class ItemManager implements Dump
      * @param sism        the item state manager associated with the new
      *                    instance
      * @param hierMgr     the hierarchy manager
-     * @param session     the session associated with the new instance
+     * @param sessionContext component context of the associated session
      * @param rootNodeDef the definition of the root node
      * @param rootNodeId  the id of the root node
      * @param dataStore   the data store of this repository, or <code>null</code>
      */
-    protected ItemManager(SessionItemStateManager sism,
-                          HierarchyManager hierMgr,
-                          SessionImpl session,
-                          NodeDefinitionImpl rootNodeDef,
-                          NodeId rootNodeId,
-                          DataStore dataStore) {
+    protected ItemManager(
+            SessionItemStateManager sism, HierarchyManager hierMgr,
+            SessionContext sessionContext, NodeDefinitionImpl rootNodeDef,
+            NodeId rootNodeId, DataStore dataStore) {
         this.sism = sism;
         this.hierMgr = hierMgr;
-        this.session = session;
+        this.sessionContext = sessionContext;
+        this.session = sessionContext.getSessionImpl();
         this.rootNodeDef = rootNodeDef;
         this.rootNodeId = rootNodeId;
         this.dataStore = dataStore;
@@ -149,7 +154,7 @@ public class ItemManager implements Dump
      * @param itemStateProvider the item state provider associated with
      *                          the new instance
      * @param hierMgr           the hierarchy manager
-     * @param session           the session associated with the new instance
+     * @param sessionContext component context of the associated session
      * @param rootNodeDef       the definition of the root node
      * @param rootNodeId        the id of the root node
      * @param dataStore   the data store of this repository, or <code>null</code>
@@ -158,12 +163,12 @@ public class ItemManager implements Dump
     public static ItemManager createInstance(
             SessionItemStateManager itemStateProvider,
             HierarchyManager hierMgr,
-            SessionImpl session,
+            SessionContext sessionContext,
             NodeDefinitionImpl rootNodeDef,
             NodeId rootNodeId,
             DataStore dataStore) {
         ItemManager mgr = new ItemManager(
-                itemStateProvider, hierMgr, session, rootNodeDef,
+                itemStateProvider, hierMgr, sessionContext, rootNodeDef,
                 rootNodeId, dataStore);
         itemStateProvider.addListener(mgr);
         return mgr;
@@ -865,18 +870,18 @@ public class ItemManager implements Dump
         // check special nodes
         final NodeState state = data.getNodeState();
         if (state.getNodeTypeName().equals(NameConstants.NT_VERSION)) {
-            return new VersionImpl(this, session, data);
+            return new VersionImpl(this, sessionContext, data);
         } else if (state.getNodeTypeName().equals(NameConstants.NT_VERSIONHISTORY)) {
-            return new VersionHistoryImpl(this, session, data);
+            return new VersionHistoryImpl(this, sessionContext, data);
         } else {
             // create node object
-            return new NodeImpl(this, session, data);
+            return new NodeImpl(this, sessionContext, data);
         }
     }
 
     private PropertyImpl createPropertyInstance(PropertyData data) {
         // check special nodes
-        return new PropertyImpl(this, session, data, dataStore);
+        return new PropertyImpl(this, sessionContext, data, dataStore);
     }
 
     //---------------------------------------------------< item cache methods >

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java?rev=956912&r1=956911&r2=956912&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java Tue Jun 22 15:01:23 2010
@@ -80,6 +80,7 @@ import org.apache.jackrabbit.core.nodety
 import org.apache.jackrabbit.core.query.QueryManagerImpl;
 import org.apache.jackrabbit.core.security.AccessManager;
 import org.apache.jackrabbit.core.security.authorization.Permission;
+import org.apache.jackrabbit.core.session.SessionContext;
 import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.state.ItemState;
 import org.apache.jackrabbit.core.state.ItemStateException;
@@ -123,11 +124,13 @@ public class NodeImpl extends ItemImpl i
      * Protected constructor.
      *
      * @param itemMgr    the <code>ItemManager</code> that created this <code>Node</code> instance
-     * @param session    the <code>Session</code> through which this <code>Node</code> is acquired
+     * @param sessionContext the component context of the associated session
      * @param data       the node data
      */
-    protected NodeImpl(ItemManager itemMgr, SessionImpl session, AbstractNodeData data) {
-        super(itemMgr, session, data);
+    protected NodeImpl(
+            ItemManager itemMgr, SessionContext sessionContext,
+            AbstractNodeData data) {
+        super(itemMgr, sessionContext, data);
         this.data = data;
         // paranoid sanity check
         NodeTypeRegistry ntReg = session.getNodeTypeManager().getNodeTypeRegistry();

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java?rev=956912&r1=956911&r2=956912&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java Tue Jun 22 15:01:23 2010
@@ -42,6 +42,7 @@ import javax.jcr.version.VersionExceptio
 import org.apache.jackrabbit.core.data.DataStore;
 import org.apache.jackrabbit.core.id.PropertyId;
 import org.apache.jackrabbit.core.security.authorization.Permission;
+import org.apache.jackrabbit.core.session.SessionContext;
 import org.apache.jackrabbit.core.state.ItemState;
 import org.apache.jackrabbit.core.state.ItemStateException;
 import org.apache.jackrabbit.core.state.PropertyState;
@@ -76,14 +77,14 @@ public class PropertyImpl extends ItemIm
      * Package private constructor.
      *
      * @param itemMgr    the <code>ItemManager</code> that created this <code>Property</code>
-     * @param session    the <code>Session</code> through which this <code>Property</code> is acquired
+     * @param sessionContext the component context of the associated session
      * @param data       the property data
      * @param dataStore  the data store of this repository, or <code>null</code>
      */
     PropertyImpl(
-            ItemManager itemMgr, SessionImpl session, PropertyData data,
-            DataStore dataStore) {
-        super(itemMgr, session, data);
+            ItemManager itemMgr, SessionContext sessionContext,
+            PropertyData data, DataStore dataStore) {
+        super(itemMgr, sessionContext, data);
         this.data = data;
         this.dataStore = dataStore;
         // value will be read on demand

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java?rev=956912&r1=956911&r2=956912&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java Tue Jun 22 15:01:23 2010
@@ -39,8 +39,8 @@ import org.apache.jackrabbit.core.securi
 import org.apache.jackrabbit.core.security.authorization.Permission;
 import org.apache.jackrabbit.core.session.ActiveSessionState;
 import org.apache.jackrabbit.core.session.ClosedSessionState;
+import org.apache.jackrabbit.core.session.SessionContext;
 import org.apache.jackrabbit.core.session.SessionOperation;
-import org.apache.jackrabbit.core.session.SessionState;
 import org.apache.jackrabbit.core.state.LocalItemStateManager;
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.state.SessionItemStateManager;
@@ -66,7 +66,6 @@ import org.xml.sax.InputSource;
 
 import javax.jcr.AccessDeniedException;
 import javax.jcr.Credentials;
-import javax.jcr.InvalidItemStateException;
 import javax.jcr.Item;
 import javax.jcr.ItemExistsException;
 import javax.jcr.ItemNotFoundException;
@@ -86,7 +85,6 @@ import javax.jcr.Workspace;
 import javax.jcr.lock.Lock;
 import javax.jcr.lock.LockException;
 import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
 import javax.jcr.observation.EventListener;
 import javax.jcr.observation.ObservationManager;
 import javax.jcr.retention.RetentionManager;
@@ -127,9 +125,9 @@ public class SessionImpl extends Abstrac
     private static Logger log = LoggerFactory.getLogger(SessionImpl.class);
 
     /**
-     * The state of this session.
+     * The component context of this session.
      */
-    protected volatile SessionState state = new ActiveSessionState();
+    protected final SessionContext context = new SessionContext(this);
 
     /**
      * The component context of the repository that issued this session.
@@ -274,6 +272,7 @@ public class SessionImpl extends Abstrac
             RepositoryContext repositoryContext, Subject subject,
             WorkspaceConfig wspConfig)
             throws AccessDeniedException, RepositoryException {
+        this.context.setSessionState(new ActiveSessionState());
         this.repositoryContext = repositoryContext;
         this.subject = subject;
 
@@ -334,7 +333,7 @@ public class SessionImpl extends Abstrac
     protected ItemManager createItemManager(SessionItemStateManager itemStateMgr,
                                             HierarchyManager hierMgr) {
         return ItemManager.createInstance(
-                itemStateMgr, hierMgr, this,
+                itemStateMgr, hierMgr, context,
                 ntMgr.getRootNodeDefinition(),
                 repositoryContext.getRootNodeId(),
                 repositoryContext.getDataStore());
@@ -375,6 +374,11 @@ public class SessionImpl extends Abstrac
         return repositoryContext.getSecurityManager().getAccessManager(this, ctx);
     }
 
+    private void perform(SessionOperation operation)
+            throws RepositoryException {
+        context.getSessionState().perform(operation);
+    }
+
     /**
      * Performs a sanity check on this session.
      *
@@ -383,7 +387,7 @@ public class SessionImpl extends Abstrac
      *                             been closed explicitly or if it has expired)
      */
     protected void sanityCheck() throws RepositoryException {
-        state.perform(new SessionOperation("sanity check"));
+        perform(new SessionOperation("sanity check"));
     }
 
     /**
@@ -893,7 +897,7 @@ public class SessionImpl extends Abstrac
      * {@inheritDoc}
      */
     public void save() throws RepositoryException {
-        state.perform(new SessionOperation("save") {
+        perform(new SessionOperation("save") {
             @Override
             public void perform() throws RepositoryException {
                 // JCR-2425: check whether session is allowed to read root node
@@ -911,7 +915,7 @@ public class SessionImpl extends Abstrac
      * {@inheritDoc}
      */
     public void refresh(final boolean keepChanges) throws RepositoryException {
-        state.perform(new SessionOperation("refresh") {
+        perform(new SessionOperation("refresh") {
             @Override
             public void perform() throws RepositoryException {
                 // JCR-1753: Ensure that we are up to date with cluster changes
@@ -1168,7 +1172,7 @@ public class SessionImpl extends Abstrac
      * {@inheritDoc}
      */
     public boolean isLive() {
-        return state.isAlive();
+        return context.getSessionState().isAlive();
     }
 
     /**
@@ -1222,7 +1226,7 @@ public class SessionImpl extends Abstrac
         wsp.dispose();
 
         // invalidate session
-        state = new ClosedSessionState();
+        context.setSessionState(new ClosedSessionState());
 
         // logout JAAS subject
         if (loginContext != null) {

Added: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionContext.java?rev=956912&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionContext.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionContext.java Tue Jun 22 15:01:23 2010
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.core.session;
+
+import org.apache.jackrabbit.core.SessionImpl;
+
+public class SessionContext {
+
+    private final SessionImpl session;
+
+    private volatile SessionState state;
+
+    public SessionContext(SessionImpl session) {
+        this.session = session;
+    }
+
+    public SessionImpl getSessionImpl() {
+        return session;
+    }
+
+    public SessionState getSessionState() {
+        return state;
+    }
+
+    public void setSessionState(SessionState state) {
+        this.state = state;
+    }
+
+}

Propchange: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java?rev=956912&r1=956911&r2=956912&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java Tue Jun 22 15:01:23 2010
@@ -20,8 +20,8 @@ import org.apache.jackrabbit.core.Abstra
 import org.apache.jackrabbit.core.ItemManager;
 import org.apache.jackrabbit.core.id.NodeId;
 import org.apache.jackrabbit.core.NodeImpl;
-import org.apache.jackrabbit.core.SessionImpl;
 import org.apache.jackrabbit.core.security.authorization.Permission;
+import org.apache.jackrabbit.core.session.SessionContext;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.commons.conversion.NameException;
 import org.apache.jackrabbit.commons.iterator.FrozenNodeIteratorAdapter;
@@ -56,11 +56,13 @@ public class VersionHistoryImpl extends 
     /**
      * Create a new instance of this class.
      * @param itemMgr item manager
-     * @param session session
+     * @param sessionContext component context of the associated session
      * @param data node data
      */
-    public VersionHistoryImpl(ItemManager itemMgr, SessionImpl session, AbstractNodeData data) {
-        super(itemMgr, session, data);
+    public VersionHistoryImpl(
+            ItemManager itemMgr, SessionContext sessionContext,
+            AbstractNodeData data) {
+        super(itemMgr, sessionContext, data);
     }
 
     /**

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionImpl.java?rev=956912&r1=956911&r2=956912&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionImpl.java Tue Jun 22 15:01:23 2010
@@ -19,8 +19,8 @@ package org.apache.jackrabbit.core.versi
 import org.apache.jackrabbit.core.ItemManager;
 import org.apache.jackrabbit.core.AbstractNodeData;
 import org.apache.jackrabbit.core.id.NodeId;
+import org.apache.jackrabbit.core.session.SessionContext;
 import org.apache.jackrabbit.core.NodeImpl;
-import org.apache.jackrabbit.core.SessionImpl;
 import javax.jcr.version.Version;
 import javax.jcr.version.VersionHistory;
 import org.slf4j.Logger;
@@ -47,11 +47,13 @@ public class VersionImpl extends NodeImp
     /**
      * Create a new instance of this class.
      * @param itemMgr item manager
-     * @param session session
+     * @param sessionContext component context of the associated session
      * @param data node data
      */
-    public VersionImpl(ItemManager itemMgr, SessionImpl session, AbstractNodeData data) {
-        super(itemMgr, session, data);
+    public VersionImpl(
+            ItemManager itemMgr, SessionContext sessionContext,
+            AbstractNodeData data) {
+        super(itemMgr, sessionContext, data);
     }
 
     /**