Index: src/main/java/org/apache/jackrabbit/core/ItemManager.java
===================================================================
--- src/main/java/org/apache/jackrabbit/core/ItemManager.java (revision 800266)
+++ src/main/java/org/apache/jackrabbit/core/ItemManager.java (working copy)
@@ -125,13 +125,35 @@
// setup item cache with weak references to items
itemCache = new ReferenceMap(ReferenceMap.HARD, ReferenceMap.WEAK);
- itemStateProvider.addListener(this);
// setup shareable nodes cache
shareableNodesCache = new ShareableNodesCache();
}
/**
+ * Creates a new per-session instance ItemManager instance.
+ *
+ * @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 rootNodeDef the definition of the root node
+ * @param rootNodeId the id of the root node
+ * @return the item manager instance.
+ */
+ public static ItemManager createInstance(
+ SessionItemStateManager itemStateProvider,
+ HierarchyManager hierMgr,
+ SessionImpl session,
+ NodeDefinition rootNodeDef,
+ NodeId rootNodeId) {
+ ItemManager mgr = new ItemManager(itemStateProvider, hierMgr,
+ session, rootNodeDef, rootNodeId);
+ itemStateProvider.addListener(mgr);
+ return mgr;
+ }
+
+ /**
* Disposes this ItemManager and frees resources.
*/
void dispose() {
Index: src/main/java/org/apache/jackrabbit/core/SessionImpl.java
===================================================================
--- src/main/java/org/apache/jackrabbit/core/SessionImpl.java (revision 800266)
+++ src/main/java/org/apache/jackrabbit/core/SessionImpl.java (working copy)
@@ -307,7 +307,7 @@
* @return session item state manager
*/
protected SessionItemStateManager createSessionItemStateManager(LocalItemStateManager manager) {
- return new SessionItemStateManager(
+ return SessionItemStateManager.createInstance(
rep.getRootNodeId(), manager, rep.getNodeTypeRegistry());
}
@@ -334,7 +334,7 @@
*/
protected ItemManager createItemManager(SessionItemStateManager itemStateMgr,
HierarchyManager hierMgr) {
- return new ItemManager(itemStateMgr, hierMgr, this,
+ return ItemManager.createInstance(itemStateMgr, hierMgr, this,
ntMgr.getRootNodeDefinition(), rep.getRootNodeId());
}
Index: src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java
===================================================================
--- src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java (revision 800266)
+++ src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java (working copy)
@@ -93,14 +93,13 @@
* @param stateMgr the local item state manager
* @param ntReg node type registry
*/
- public SessionItemStateManager(NodeId rootNodeId,
+ protected SessionItemStateManager(NodeId rootNodeId,
LocalItemStateManager stateMgr,
NodeTypeRegistry ntReg) {
transientStore = new ItemStateMap();
atticStore = new ItemStateMap();
this.stateMgr = stateMgr;
- stateMgr.addListener(this);
// create hierarchy manager that uses both transient and persistent state
hierMgr = new CachingHierarchyManager(rootNodeId, this);
@@ -110,6 +109,24 @@
}
/**
+ * Creates a new SessionItemStateManager 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