Return-Path: Delivered-To: apmail-incubator-jackrabbit-commits-archive@www.apache.org Received: (qmail 97858 invoked from network); 19 Aug 2005 10:00:26 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 19 Aug 2005 10:00:26 -0000 Received: (qmail 24861 invoked by uid 500); 19 Aug 2005 09:58:47 -0000 Mailing-List: contact jackrabbit-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: jackrabbit-dev@incubator.apache.org Delivered-To: mailing list jackrabbit-commits@incubator.apache.org Received: (qmail 24844 invoked by uid 500); 19 Aug 2005 09:58:47 -0000 Delivered-To: apmail-incubator-jackrabbit-cvs@incubator.apache.org Received: (qmail 24840 invoked by uid 99); 19 Aug 2005 09:58:47 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Fri, 19 Aug 2005 02:58:46 -0700 Received: (qmail 95970 invoked by uid 65534); 19 Aug 2005 09:52:05 -0000 Message-ID: <20050819095205.95969.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r233459 - in /incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state: ItemStateManager.java ItemStateMap.java LocalItemStateManager.java SessionItemStateManager.java UpdatableItemStateManager.java Date: Fri, 19 Aug 2005 09:52:04 -0000 To: jackrabbit-cvs@incubator.apache.org From: stefan@apache.org X-Mailer: svnmailer-1.0.3 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: stefan Date: Fri Aug 19 02:51:57 2005 New Revision: 233459 URL: http://svn.apache.org/viewcvs?rev=233459&view=rev Log: JCR-188: Item states cached in UpdatableItemStateManager not discarded on logout Modified: incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/ItemStateManager.java incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/ItemStateMap.java incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/UpdatableItemStateManager.java Modified: incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/ItemStateManager.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/ItemStateManager.java?rev=233459&r1=233458&r2=233459&view=diff ============================================================================== --- incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/ItemStateManager.java (original) +++ incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/ItemStateManager.java Fri Aug 19 02:51:57 2005 @@ -19,7 +19,8 @@ import org.apache.jackrabbit.core.ItemId; /** - * The ItemStateManager interface... + * The ItemStateManager interface provides methods for retrieving + * ItemState and NodeReferences instances by id. */ public interface ItemStateManager { Modified: incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/ItemStateMap.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/ItemStateMap.java?rev=233459&r1=233458&r2=233459&view=diff ============================================================================== --- incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/ItemStateMap.java (original) +++ incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/ItemStateMap.java Fri Aug 19 02:51:57 2005 @@ -32,6 +32,8 @@ * A {@link java.util.Map} based ItemStateStore implementation. */ public class ItemStateMap implements ItemStateStore, Dumpable { + + /** Logger instance */ private static Logger log = Logger.getLogger(ItemStateMap.class); /** Modified: incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java?rev=233459&r1=233458&r2=233459&view=diff ============================================================================== --- incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java (original) +++ incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java Fri Aug 19 02:51:57 2005 @@ -25,6 +25,7 @@ import org.apache.log4j.Logger; import javax.jcr.RepositoryException; +import java.util.Iterator; /** * Local ItemStateManager that isolates changes to @@ -83,14 +84,6 @@ } /** - * Disposes this LocalItemStateManager and frees resources. - */ - public void dispose() { - // clear cache - cache.evictAll(); - } - - /** * Retrieve a node state from the parent shared state manager and * wraps it into a intermediate object that helps us handle local * modifications. @@ -349,6 +342,27 @@ sharedStateMgr.store(changeLog, obsMgr); changeLog.persisted(); + } + + /** + * {@inheritDoc} + */ + public void dispose() { + // this LocalItemStateManager instance is no longer needed; + // cached item states can now be safely discarded + Iterator iter = cache.values().iterator(); + while (iter.hasNext()) { + ItemState state = (ItemState) iter.next(); + // we're no longer interested in status changes of this item state + state.removeListener(this); + // discard item state; any remaining listeners will be informed + // about this status change + state.discard(); + // let the item state know that it has been disposed + state.onDisposed(); + } + // clear cache + cache.evictAll(); } //----------------------------------------------------< ItemStateListener > Modified: incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java?rev=233459&r1=233458&r2=233459&view=diff ============================================================================== --- incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java (original) +++ incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java Fri Aug 19 02:51:57 2005 @@ -48,11 +48,6 @@ private static Logger log = Logger.getLogger(SessionItemStateManager.class); /** - * Root node id - */ - private final NodeId rootNodeId; - - /** * State manager that allows updates */ private final UpdatableItemStateManager persistentStateMgr; @@ -78,7 +73,6 @@ UpdatableItemStateManager persistentStateMgr, NamespaceResolver nsResolver) { - rootNodeId = new NodeId(rootNodeUUID); this.persistentStateMgr = persistentStateMgr; // create transient item state manager transientStateMgr = new TransientItemStateManager(); @@ -268,6 +262,16 @@ */ public void update() throws ItemStateException, IllegalStateException { persistentStateMgr.update(); + } + + /** + * {@inheritDoc} + */ + public void dispose() { + // discard all transient changes + transientStateMgr.disposeAllItemStates(); + // dispose our (i.e. 'local') state manager + persistentStateMgr.dispose(); } //< more methods for listing and retrieving transient ItemState instances > Modified: incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/UpdatableItemStateManager.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/UpdatableItemStateManager.java?rev=233459&r1=233458&r2=233459&view=diff ============================================================================== --- incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/UpdatableItemStateManager.java (original) +++ incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/state/UpdatableItemStateManager.java Fri Aug 19 02:51:57 2005 @@ -113,4 +113,9 @@ * @throws IllegalStateException if the manager is not in edit mode. */ void update() throws ItemStateException, IllegalStateException; + + /** + * Disposes this UpdatableItemStateManager and frees resources. + */ + void dispose(); }