You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2005/08/19 11:52:04 UTC
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
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 <code>ItemStateManager</code> interface...
+ * The <code>ItemStateManager</code> interface provides methods for retrieving
+ * <code>ItemState</code> and <code>NodeReferences</code> 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 <code>ItemStateStore</code> 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 <code>ItemStateManager</code> that isolates changes to
@@ -83,14 +84,6 @@
}
/**
- * Disposes this <code>LocalItemStateManager</code> 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 <code>UpdatableItemStateManager</code> and frees resources.
+ */
+ void dispose();
}