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/23 10:19:15 UTC
svn commit: r957141 - in
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core:
ItemManager.java PropertyImpl.java RepositoryContext.java SessionImpl.java
session/SessionContext.java state/SessionItemStateManager.java
Author: jukka
Date: Wed Jun 23 08:19:14 2010
New Revision: 957141
URL: http://svn.apache.org/viewvc?rev=957141&view=rev
Log:
JCR-890: concurrent read-only access to a session
Leverage SessionContext in more places.
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.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/RepositoryContext.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/session/SessionContext.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java
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=957141&r1=957140&r2=957141&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 Wed Jun 23 08:19:14 2010
@@ -91,7 +91,6 @@ public class ItemManager implements Dump
private static Logger log = LoggerFactory.getLogger(ItemManager.class);
private final org.apache.jackrabbit.spi.commons.nodetype.NodeDefinitionImpl rootNodeDef;
- private final NodeId rootNodeId;
/**
* Component context of the associated session.
@@ -104,11 +103,6 @@ public class ItemManager implements Dump
private final HierarchyManager hierMgr;
/**
- * The data store of this repository, or <code>null</code>
- */
- private final DataStore dataStore;
-
- /**
* A cache for item instances created by this <code>ItemManager</code>
*/
private final Map<ItemId, ItemData> itemCache;
@@ -123,19 +117,14 @@ public class ItemManager implements Dump
*
* @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(
- SessionContext sessionContext, NodeDefinitionImpl rootNodeDef,
- NodeId rootNodeId, DataStore dataStore) {
+ SessionContext sessionContext, NodeDefinitionImpl rootNodeDef) {
this.sism = sessionContext.getItemStateManager();
this.hierMgr = sessionContext.getHierarchyManager();
this.sessionContext = sessionContext;
this.session = sessionContext.getSessionImpl();
this.rootNodeDef = rootNodeDef;
- this.rootNodeId = rootNodeId;
- this.dataStore = dataStore;
// setup item cache with weak references to items
itemCache = new ReferenceMap(ReferenceMap.HARD, ReferenceMap.WEAK);
@@ -145,26 +134,6 @@ public class ItemManager implements Dump
}
/**
- * Creates a new per-session instance <code>ItemManager</code> 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>
- * @return the item manager instance.
- */
- public static ItemManager createInstance(
- SessionContext sessionContext,
- NodeDefinitionImpl rootNodeDef,
- NodeId rootNodeId,
- DataStore dataStore) {
- ItemManager mgr = new ItemManager(
- sessionContext, rootNodeDef, rootNodeId, dataStore);
- sessionContext.getItemStateManager().addListener(mgr);
- return mgr;
- }
-
- /**
* Disposes this <code>ItemManager</code> and frees resources.
*/
void dispose() {
@@ -176,7 +145,7 @@ public class ItemManager implements Dump
NodeDefinitionImpl getDefinition(NodeState state)
throws RepositoryException {
- if (state.getId().equals(rootNodeId)) {
+ if (state.getId().equals(sessionContext.getRootNodeId())) {
// special handling required for root node
return rootNodeDef;
}
@@ -551,7 +520,7 @@ public class ItemManager implements Dump
* @throws RepositoryException
*/
NodeImpl getRootNode() throws RepositoryException {
- return (NodeImpl) getItem(rootNodeId);
+ return (NodeImpl) getItem(sessionContext.getRootNodeId());
}
/**
@@ -871,7 +840,7 @@ public class ItemManager implements Dump
private PropertyImpl createPropertyInstance(PropertyData data) {
// check special nodes
- return new PropertyImpl(this, sessionContext, data, dataStore);
+ return new PropertyImpl(this, sessionContext, data);
}
//---------------------------------------------------< item cache methods >
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=957141&r1=957140&r2=957141&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 Wed Jun 23 08:19:14 2010
@@ -39,7 +39,6 @@ import javax.jcr.nodetype.ConstraintViol
import javax.jcr.nodetype.PropertyDefinition;
import javax.jcr.version.VersionException;
-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;
@@ -69,24 +68,17 @@ public class PropertyImpl extends ItemIm
private final PropertyData data;
/**
- * The data store of this repository, or <code>null</code>
- */
- private final DataStore dataStore;
-
- /**
* Package private constructor.
*
* @param itemMgr the <code>ItemManager</code> that created this <code>Property</code>
* @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, SessionContext sessionContext,
- PropertyData data, DataStore dataStore) {
+ PropertyData data) {
super(itemMgr, sessionContext, data);
this.data = data;
- this.dataStore = dataStore;
// value will be read on demand
}
@@ -361,7 +353,8 @@ public class PropertyImpl extends ItemIm
Value targetValue = ValueHelper.convert(
ValueFormat.getJCRValue(InternalValue.create(name), session, session.getValueFactory()),
reqType, session.getValueFactory());
- internalValue = InternalValue.create(targetValue, session, dataStore);
+ internalValue = InternalValue.create(
+ targetValue, session, sessionContext.getDataStore());
} else {
// no type conversion required
internalValue = InternalValue.create(name);
@@ -412,7 +405,9 @@ public class PropertyImpl extends ItemIm
Value targetValue = ValueHelper.convert(
ValueFormat.getJCRValue(InternalValue.create(name), session, session.getValueFactory()),
reqType, session.getValueFactory());
- internalValue = InternalValue.create(targetValue, session, dataStore);
+ internalValue = InternalValue.create(
+ targetValue, session,
+ sessionContext.getDataStore());
} else {
// no type conversion required
internalValue = InternalValue.create(name);
@@ -699,10 +694,12 @@ public class PropertyImpl extends ItemIm
// type conversion required
Value targetVal = ValueHelper.convert(
value, reqType, session.getValueFactory());
- internalValue = InternalValue.create(targetVal, session, dataStore);
+ internalValue = InternalValue.create(
+ targetVal, session, sessionContext.getDataStore());
} else {
// no type conversion required
- internalValue = InternalValue.create(value, session, dataStore);
+ internalValue = InternalValue.create(
+ value, session, sessionContext.getDataStore());
}
internalSetValue(new InternalValue[]{internalValue}, reqType);
}
@@ -771,8 +768,8 @@ public class PropertyImpl extends ItemIm
value = ValueHelper.convert(
value, reqType, session.getValueFactory());
}
- internalValues[i] =
- InternalValue.create(value, session, dataStore);
+ internalValues[i] = InternalValue.create(
+ value, session, sessionContext.getDataStore());
} else {
internalValues[i] = null;
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java?rev=957141&r1=957140&r2=957141&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java Wed Jun 23 08:19:14 2010
@@ -213,7 +213,7 @@ public class RepositoryContext {
* Returns the data store of this repository, or <code>null</code>
* if a data store is not configured.
*
- * @return data store
+ * @return data store, or <code>null</code>
*/
public DataStore getDataStore() {
return dataStore;
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=957141&r1=957140&r2=957141&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 Wed Jun 23 08:19:14 2010
@@ -41,7 +41,6 @@ import org.apache.jackrabbit.core.sessio
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.state.LocalItemStateManager;
import org.apache.jackrabbit.core.state.NodeState;
import org.apache.jackrabbit.core.state.SessionItemStateManager;
import org.apache.jackrabbit.core.util.Dumpable;
@@ -127,7 +126,7 @@ public class SessionImpl extends Abstrac
/**
* The component context of this session.
*/
- protected final SessionContext context = new SessionContext(this);
+ protected final SessionContext context;
/**
* The component context of the repository that issued this session.
@@ -257,6 +256,7 @@ public class SessionImpl extends Abstrac
RepositoryContext repositoryContext, Subject subject,
WorkspaceConfig wspConfig)
throws AccessDeniedException, RepositoryException {
+ this.context = new SessionContext(repositoryContext, this);
this.context.setSessionState(new ActiveSessionState(context));
this.repositoryContext = repositoryContext;
this.subject = subject;
@@ -268,8 +268,7 @@ public class SessionImpl extends Abstrac
repositoryContext.getNodeTypeRegistry(), this,
repositoryContext.getDataStore());
wsp = createWorkspaceInstance(wspConfig);
- context.setItemStateManager(
- createSessionItemStateManager(wsp.getItemStateManager()));
+ context.setItemStateManager(createSessionItemStateManager());
context.setItemManager(createItemManager());
accessMgr = createAccessManager(subject);
versionMgr = createVersionManager();
@@ -291,11 +290,13 @@ public class SessionImpl extends Abstrac
*
* @return session item state manager
*/
- protected SessionItemStateManager createSessionItemStateManager(LocalItemStateManager manager) {
- return SessionItemStateManager.createInstance(
- repositoryContext.getRootNodeId(),
- manager,
+ protected SessionItemStateManager createSessionItemStateManager() {
+ SessionItemStateManager mgr = new SessionItemStateManager(
+ context.getRootNodeId(),
+ wsp.getItemStateManager(),
repositoryContext.getNodeTypeRegistry());
+ wsp.getItemStateManager().addListener(mgr);
+ return mgr;
}
/**
@@ -316,10 +317,10 @@ public class SessionImpl extends Abstrac
* @return item manager
*/
protected ItemManager createItemManager() {
- return ItemManager.createInstance(
- context, ntMgr.getRootNodeDefinition(),
- repositoryContext.getRootNodeId(),
- repositoryContext.getDataStore());
+ ItemManager mgr =
+ new ItemManager(context, ntMgr.getRootNodeDefinition());
+ context.getItemStateManager().addListener(mgr);
+ return mgr;
}
/**
@@ -1235,7 +1236,7 @@ public class SessionImpl extends Abstrac
public ValueFactory getValueFactory() {
if (valueFactory == null) {
valueFactory =
- new ValueFactoryImpl(this, repositoryContext.getDataStore());
+ new ValueFactoryImpl(this, context.getDataStore());
}
return valueFactory;
}
Modified: 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=957141&r1=957140&r2=957141&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionContext.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionContext.java Wed Jun 23 08:19:14 2010
@@ -18,11 +18,16 @@ package org.apache.jackrabbit.core.sessi
import org.apache.jackrabbit.core.HierarchyManager;
import org.apache.jackrabbit.core.ItemManager;
+import org.apache.jackrabbit.core.RepositoryContext;
import org.apache.jackrabbit.core.SessionImpl;
+import org.apache.jackrabbit.core.data.DataStore;
+import org.apache.jackrabbit.core.id.NodeId;
import org.apache.jackrabbit.core.state.SessionItemStateManager;
public class SessionContext {
+ private final RepositoryContext repositoryContext;
+
private final SessionImpl session;
private volatile SessionState state;
@@ -38,10 +43,37 @@ public class SessionContext {
private volatile ItemManager itemManager;
- public SessionContext(SessionImpl session) {
+ public SessionContext(
+ RepositoryContext repositoryContext, SessionImpl session) {
+ assert repositoryContext != null;
+ assert session != null;
+ this.repositoryContext = repositoryContext;
this.session = session;
}
+ public RepositoryContext getRepositoryContext() {
+ return repositoryContext;
+ }
+
+ /**
+ * Returns the root node identifier of the repository.
+ *
+ * @return root node identifier
+ */
+ public NodeId getRootNodeId() {
+ return repositoryContext.getRootNodeId();
+ }
+
+ /**
+ * Returns the data store of this repository, or <code>null</code>
+ * if a data store is not configured.
+ *
+ * @return data store, or <code>null</code>
+ */
+ public DataStore getDataStore() {
+ return repositoryContext.getDataStore();
+ }
+
public SessionImpl getSessionImpl() {
return session;
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java?rev=957141&r1=957140&r2=957141&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java Wed Jun 23 08:19:14 2010
@@ -95,7 +95,7 @@ public class SessionItemStateManager
* @param stateMgr the local item state manager
* @param ntReg node type registry
*/
- protected SessionItemStateManager(NodeId rootNodeId,
+ public SessionItemStateManager(NodeId rootNodeId,
LocalItemStateManager stateMgr,
NodeTypeRegistry ntReg) {
transientStore = new ItemStateMap();
@@ -111,24 +111,6 @@ public class SessionItemStateManager
}
/**
- * Creates a new <code>SessionItemStateManager</code> instance.
- *
- * @param rootNodeId the root node id
- * @param stateMgr the local item state manager
- * @param ntReg node type registry
- * @return the session item state manager.
- */
- public static SessionItemStateManager createInstance(
- NodeId rootNodeId,
- LocalItemStateManager stateMgr,
- NodeTypeRegistry ntReg) {
- SessionItemStateManager mgr = new SessionItemStateManager(
- rootNodeId, stateMgr, ntReg);
- stateMgr.addListener(mgr);
- return mgr;
- }
-
- /**
* Returns the hierarchy manager
*
* @return the hierarchy manager