Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java =================================================================== *** jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java (revision 923523) --- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java (working copy) *************** *** 193,210 **** ItemStateCacheFactory cacheFactory, ISMLocking locking) throws ItemStateException { - cache = new ItemStateReferenceCache(cacheFactory); this.persistMgr = persistMgr; this.ntReg = ntReg; this.usesReferences = usesReferences; this.rootNodeId = rootNodeId; this.ismLocking = locking; // create root node state if it doesn't yet exist if (!hasNonVirtualItemState(rootNodeId)) { createRootNodeState(rootNodeId, ntReg); } } /** * Enables or disables the referential integrity checking, this * should be used very carefully by experienced developers only. --- 193,214 ---- ItemStateCacheFactory cacheFactory, ISMLocking locking) throws ItemStateException { this.persistMgr = persistMgr; this.ntReg = ntReg; this.usesReferences = usesReferences; this.rootNodeId = rootNodeId; this.ismLocking = locking; + cache = initializeItemStateCache(cacheFactory); // create root node state if it doesn't yet exist if (!hasNonVirtualItemState(rootNodeId)) { createRootNodeState(rootNodeId, ntReg); } } + protected ItemStateCache initializeItemStateCache(ItemStateCacheFactory cacheFactory) { + return new ItemStateReferenceCache(cacheFactory); + } + /** * Enables or disables the referential integrity checking, this * should be used very carefully by experienced developers only. Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java =================================================================== *** jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java (revision 923523) --- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java (working copy) *************** *** 69,77 **** */ protected LocalItemStateManager(SharedItemStateManager sharedStateMgr, EventStateCollectionFactory factory, ItemStateCacheFactory cacheFactory) { - cache = new ItemStateReferenceCache(cacheFactory); this.sharedStateMgr = sharedStateMgr; this.factory = factory; } /** --- 69,81 ---- */ protected LocalItemStateManager(SharedItemStateManager sharedStateMgr, EventStateCollectionFactory factory, ItemStateCacheFactory cacheFactory) { this.sharedStateMgr = sharedStateMgr; this.factory = factory; + cache = initializeItemStateCache(cacheFactory); + } + + protected ItemStateCache initializeItemStateCache(ItemStateCacheFactory cacheFactory) { + return new ItemStateReferenceCache(cacheFactory); } /** Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/LocalAuthContext.java =================================================================== *** jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/LocalAuthContext.java (revision 923523) --- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/LocalAuthContext.java (working copy) *************** *** 26,31 **** --- 26,32 ---- import javax.security.auth.login.FailedLoginException; import javax.security.auth.login.LoginException; import javax.security.auth.spi.LoginModule; + import java.util.Map; import java.util.HashMap; /** *************** *** 67,73 **** } catch (ConfigurationException e) { throw new LoginException(e.getMessage()); } ! module.initialize(subject, cbHandler, new HashMap(), config.getParameters()); try { if (!(module.login() && module.commit())) { throw new FailedLoginException("LoginModule ignored Credentials"); --- 68,76 ---- } catch (ConfigurationException e) { throw new LoginException(e.getMessage()); } ! Map auxParamMap = new HashMap(); ! auxParamMap.putAll(config.getParameters()); ! module.initialize(subject, cbHandler, new HashMap(), auxParamMap); try { if (!(module.login() && module.commit())) { throw new FailedLoginException("LoginModule ignored Credentials"); Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChangeLog.java =================================================================== *** jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChangeLog.java (revision 923523) --- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChangeLog.java (working copy) *************** *** 19,24 **** --- 19,26 ---- import org.apache.commons.collections.map.LinkedMap; import org.apache.jackrabbit.core.ItemId; + import java.util.Collection; + import java.util.LinkedList; import java.util.Iterator; import java.util.Map; *************** *** 49,54 **** --- 51,61 ---- private final Map modifiedRefs = new LinkedMap(); /** + * Overlayed items that are modified + */ + private Collection overlayedStates = new LinkedList(); + + /** * Checks whether this change log contains any changes. This method is * used to avoid extra work on updates that contain no changes. * *************** *** 81,87 **** --- 88,97 ---- */ public void modified(ItemState state) { if (!addedStates.containsKey(state.getId())) { + if(state.isConnected()) { + overlayedStates.add(state.getOverlayedState()); state.disconnect(); + } modifiedStates.put(state.getId(), state); } } *************** *** 97,103 **** --- 107,116 ---- */ public void deleted(ItemState state) { if (addedStates.remove(state.getId()) == null) { + if(state.isConnected()) { + overlayedStates.add(state.getOverlayedState()); state.disconnect(); + } modifiedStates.remove(state.getId()); deletedStates.put(state.getId(), state); } *************** *** 320,325 **** --- 333,339 ---- modifiedStates.clear(); deletedStates.clear(); modifiedRefs.clear(); + overlayedStates.clear(); } /**