Index: src/main/java/org/apache/jackrabbit/core/XAWorkspace.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/XAWorkspace.java (revision 787324) +++ src/main/java/org/apache/jackrabbit/core/XAWorkspace.java (working copy) @@ -45,6 +45,6 @@ * {@inheritDoc} */ protected LocalItemStateManager createItemStateManager(SharedItemStateManager shared) { - return new XAItemStateManager(shared, this, rep.getItemStateCacheFactory()); + return XAItemStateManager.createInstance(shared, this, null, rep.getItemStateCacheFactory()); } } Index: src/main/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java (revision 787324) +++ src/main/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java (working copy) @@ -67,13 +67,27 @@ * @param sharedStateMgr shared state manager * @param factory event state collection factory */ - public LocalItemStateManager(SharedItemStateManager sharedStateMgr, + protected LocalItemStateManager(SharedItemStateManager sharedStateMgr, EventStateCollectionFactory factory, ItemStateCacheFactory cacheFactory) { cache = new ItemStateReferenceCache(cacheFactory); this.sharedStateMgr = sharedStateMgr; this.factory = factory; + } - sharedStateMgr.addListener(this); + /** + * Creates a new {@code LocalItemStateManager} instance and registers it as an {@link ItemStateListener} + * at the given {@link SharedItemStateManager}. + * + * @param sharedStateMgr the {@link SharedItemStateManager} + * @param factory the {@link EventStateCollectionFactory} + * @param cacheFactory the {@link ItemStateCacheFactory} + * @return a new {@code LocalItemStateManager} instance + */ + public static LocalItemStateManager createInstance(SharedItemStateManager sharedStateMgr, + EventStateCollectionFactory factory, ItemStateCacheFactory cacheFactory) { + LocalItemStateManager mgr = new LocalItemStateManager(sharedStateMgr, factory, cacheFactory); + sharedStateMgr.addListener(mgr); + return mgr; } /** Index: src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java (revision 787324) +++ src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java (working copy) @@ -83,30 +83,39 @@ private VirtualItemStateProvider virtualProvider; /** - * Creates a new instance of this class. - * - * @param sharedStateMgr shared state manager - * @param factory event state collection factory - */ - public XAItemStateManager(SharedItemStateManager sharedStateMgr, - EventStateCollectionFactory factory, ItemStateCacheFactory cacheFactory) { - this(sharedStateMgr, factory, DEFAULT_ATTRIBUTE_NAME, cacheFactory); - } - - /** * Creates a new instance of this class with a custom attribute name. * * @param sharedStateMgr shared state manager * @param factory event state collection factory * @param attributeName attribute name */ - public XAItemStateManager(SharedItemStateManager sharedStateMgr, + private XAItemStateManager(SharedItemStateManager sharedStateMgr, EventStateCollectionFactory factory, String attributeName, ItemStateCacheFactory cacheFactory) { super(sharedStateMgr, factory, cacheFactory); + if (attributeName != null) { + this.attributeName = attributeName; + } else { + this.attributeName = DEFAULT_ATTRIBUTE_NAME; + } + } - this.attributeName = attributeName; + /** + * Creates a new {@code XAItemStateManager} instance and registers it as an {@link ItemStateListener} + * at the given {@link SharedItemStateManager}. + * + * @param sharedStateMgr the {@link SharedItemStateManager} + * @param factory the {@link EventStateCollectionFactory} + * @param attributeName the attribute name, if {@code null} then a default name is used + * @param cacheFactory the {@link ItemStateCacheFactory} + * @return a new {@code XAItemStateManager} instance + */ + public static XAItemStateManager createInstance(SharedItemStateManager sharedStateMgr, + EventStateCollectionFactory factory, String attributeName, ItemStateCacheFactory cacheFactory) { + XAItemStateManager mgr = new XAItemStateManager(sharedStateMgr, factory, attributeName, cacheFactory); + sharedStateMgr.addListener(mgr); + return mgr; } /** Index: src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java (revision 787324) +++ src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java (working copy) @@ -203,7 +203,7 @@ sharedStateMgr = createItemStateManager(pMgr, storageId, ntReg, cacheFactory, ismLocking); - stateMgr = new LocalItemStateManager(sharedStateMgr, escFactory, cacheFactory); + stateMgr = LocalItemStateManager.createInstance(sharedStateMgr, escFactory, cacheFactory); stateMgr.addListener(this); NodeState nodeState = (NodeState) stateMgr.getItemState(storageId); Index: src/main/java/org/apache/jackrabbit/core/version/XAVersionManager.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/version/XAVersionManager.java (revision 787324) +++ src/main/java/org/apache/jackrabbit/core/version/XAVersionManager.java (working copy) @@ -112,7 +112,7 @@ super(ntReg); this.vMgr = vMgr; this.session = session; - this.stateMgr = new XAItemStateManager(vMgr.getSharedStateMgr(), + this.stateMgr = XAItemStateManager.createInstance(vMgr.getSharedStateMgr(), this, CHANGE_LOG_ATTRIBUTE_NAME, cacheFactory); NodeState state; Index: src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java (revision 787324) +++ src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java (working copy) @@ -913,7 +913,7 @@ * @return local item state manager */ protected LocalItemStateManager createItemStateManager(SharedItemStateManager shared) { - return new LocalItemStateManager(shared, this, rep.getItemStateCacheFactory()); + return LocalItemStateManager.createInstance(shared, this, rep.getItemStateCacheFactory()); } //------------------------------------------< EventStateCollectionFactory >