You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2010/10/21 13:58:42 UTC
svn commit: r1025962 - in /jackrabbit/branches/2.1: ./
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/
Author: jukka
Date: Thu Oct 21 11:58:41 2010
New Revision: 1025962
URL: http://svn.apache.org/viewvc?rev=1025962&view=rev
Log:
2.1: Merged revision 1002168 (JCR-2699)
Removed:
jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemStateMap.java
jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceMap.java
jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemStateStore.java
Modified:
jackrabbit/branches/2.1/ (props changed)
jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java
jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java
jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/AbstractVISProvider.java
Propchange: jackrabbit/branches/2.1/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Oct 21 11:58:41 2010
@@ -2,4 +2,4 @@
/jackrabbit/sandbox/JCR-1456:774917-886178
/jackrabbit/sandbox/JCR-2170:812417-816332
/jackrabbit/sandbox/tripod-JCR-2209:795441-795863
-/jackrabbit/trunk:931121,931479,931483-931484,931504,931609,931613,931838,931919,932318-932319,933144,933197,933203,933213,933216,933554,933646,933694,934405,934412,934849,935557,936668,938099,945528,950440,950680,955222,955229,955307,955852,961487,961626,964362,965539,986682,986686,986715,991144,996810,1001707,1002065-1002066,1002084,1002101-1002102
+/jackrabbit/trunk:931121,931479,931483-931484,931504,931609,931613,931838,931919,932318-932319,933144,933197,933203,933213,933216,933554,933646,933694,934405,934412,934849,935557,936668,938099,945528,950440,950680,955222,955229,955307,955852,961487,961626,964362,965539,986682,986686,986715,991144,996810,1001707,1002065-1002066,1002084,1002101-1002102,1002168
Modified: jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java?rev=1025962&r1=1025961&r2=1025962&view=diff
==============================================================================
--- jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java (original)
+++ jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java Thu Oct 21 11:58:41 2010
@@ -16,12 +16,14 @@
*/
package org.apache.jackrabbit.core.state;
+import org.apache.commons.collections.map.ReferenceMap;
import org.apache.jackrabbit.core.id.ItemId;
import org.apache.jackrabbit.core.util.Dumpable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.PrintStream;
+import java.util.Map;
/**
* <code>ItemStateReferenceCache</code> internally consists of 2 components:
@@ -50,7 +52,10 @@ public class ItemStateReferenceCache imp
* primary cache storing weak references to <code>ItemState</code>
* instances.
*/
- private final ItemStateReferenceMap refs;
+ @SuppressWarnings("unchecked")
+ private final Map<ItemId, ItemState> refs =
+ new ReferenceMap(ReferenceMap.HARD, ReferenceMap.WEAK);
+
/**
* secondary cache that automatically flushes entries based on some
* eviction policy; entries flushed from the secondary cache will be
@@ -77,7 +82,6 @@ public class ItemStateReferenceCache imp
*/
public ItemStateReferenceCache(ItemStateCache cache) {
this.cache = cache;
- refs = new ItemStateReferenceMap();
}
//-------------------------------------------------------< ItemStateCache >
@@ -86,7 +90,7 @@ public class ItemStateReferenceCache imp
*/
public synchronized boolean isCached(ItemId id) {
// check primary cache
- return refs.contains(id);
+ return refs.containsKey(id);
}
/**
@@ -113,13 +117,13 @@ public class ItemStateReferenceCache imp
*/
public synchronized void cache(ItemState state) {
ItemId id = state.getId();
- if (refs.contains(id)) {
+ if (refs.containsKey(id)) {
log.warn("overwriting cached entry " + id);
}
// fake call to update stats of secondary cache
cache.cache(state);
// store weak reference in primary cache
- refs.put(state);
+ refs.put(id, state);
}
@@ -172,8 +176,7 @@ public class ItemStateReferenceCache imp
*/
public synchronized void dump(PrintStream ps) {
ps.println("ItemStateReferenceCache (" + this + ")");
+ ps.println(" refs: " + refs.keySet());
ps.println();
- ps.print("[refs] ");
- refs.dump(ps);
}
}
Modified: jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java?rev=1025962&r1=1025961&r2=1025962&view=diff
==============================================================================
--- jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java (original)
+++ jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java Thu Oct 21 11:58:41 2010
@@ -21,8 +21,12 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
+import java.util.HashMap;
import java.util.List;
import java.util.LinkedList;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
import javax.jcr.InvalidItemStateException;
import javax.jcr.ItemNotFoundException;
@@ -65,12 +69,14 @@ public class SessionItemStateManager
/**
* map of those states that have been removed transiently
*/
- private final ItemStateStore atticStore;
+ private final Map<ItemId, ItemState> atticStore =
+ new HashMap<ItemId, ItemState>();
/**
* map of new or modified transient states
*/
- private final ItemStateStore transientStore;
+ private final Map<ItemId, ItemState> transientStore =
+ new HashMap<ItemId, ItemState>();
/**
* ItemStateManager view of the states in the attic; lazily instantiated
@@ -93,21 +99,16 @@ public class SessionItemStateManager
*
* @param rootNodeId the root node id
* @param stateMgr the local item state manager
- * @param ntReg node type registry
*/
- protected SessionItemStateManager(NodeId rootNodeId,
- LocalItemStateManager stateMgr,
- NodeTypeRegistry ntReg) {
- transientStore = new ItemStateMap();
- atticStore = new ItemStateMap();
-
+ public SessionItemStateManager(
+ NodeId rootNodeId, LocalItemStateManager stateMgr,
+ NodeTypeRegistry ntReg) {
this.stateMgr = stateMgr;
+ this.ntReg = ntReg;
// create hierarchy manager that uses both transient and persistent state
hierMgr = new CachingHierarchyManager(rootNodeId, this);
addListener(hierMgr);
-
- this.ntReg = ntReg;
}
/**
@@ -119,11 +120,10 @@ public class SessionItemStateManager
* @return the session item state manager.
*/
public static SessionItemStateManager createInstance(
- NodeId rootNodeId,
- LocalItemStateManager stateMgr,
+ NodeId rootNodeId, LocalItemStateManager stateMgr,
NodeTypeRegistry ntReg) {
- SessionItemStateManager mgr = new SessionItemStateManager(
- rootNodeId, stateMgr, ntReg);
+ SessionItemStateManager mgr =
+ new SessionItemStateManager(rootNodeId, stateMgr, ntReg);
stateMgr.addListener(mgr);
return mgr;
}
@@ -181,7 +181,7 @@ public class SessionItemStateManager
throws NoSuchItemStateException, ItemStateException {
// first check if the specified item has been transiently removed
- if (atticStore.contains(id)) {
+ if (atticStore.containsKey(id)) {
/**
* check if there's new transient state for the specified item
* (e.g. if a property with name 'x' has been removed and a new
@@ -193,7 +193,7 @@ public class SessionItemStateManager
}
// check if there's transient state for the specified item
- if (transientStore.contains(id)) {
+ if (transientStore.containsKey(id)) {
return getTransientItemState(id);
}
@@ -205,16 +205,16 @@ public class SessionItemStateManager
*/
public boolean hasItemState(ItemId id) {
// first check if the specified item has been transiently removed
- if (atticStore.contains(id)) {
+ if (atticStore.containsKey(id)) {
/**
* check if there's new transient state for the specified item
* (e.g. if a property with name 'x' has been removed and a new
* property with same name has been created);
*/
- return transientStore.contains(id);
+ return transientStore.containsKey(id);
}
// check if there's transient state for the specified item
- if (transientStore.contains(id)) {
+ if (transientStore.containsKey(id)) {
return true;
}
// check if there's persistent state for the specified item
@@ -366,7 +366,7 @@ public class SessionItemStateManager
* @return
*/
public boolean hasTransientItemState(ItemId id) {
- return transientStore.contains(id);
+ return transientStore.containsKey(id);
}
/**
@@ -375,7 +375,7 @@ public class SessionItemStateManager
* @return
*/
public boolean hasTransientItemStateInAttic(ItemId id) {
- return atticStore.contains(id);
+ return atticStore.containsKey(id);
}
/**
@@ -572,7 +572,7 @@ public class SessionItemStateManager
}
// short cut
- if (transientStore.contains(hierMgr.getRootNodeId())) {
+ if (transientStore.containsKey(hierMgr.getRootNodeId())) {
return hierMgr.getRootNodeId();
}
@@ -665,7 +665,7 @@ public class SessionItemStateManager
* <code>false</code> otherwise
*/
public boolean isItemStateInAttic(ItemId id) {
- return atticStore.contains(id);
+ return atticStore.containsKey(id);
}
//------< methods for creating & discarding transient ItemState instances >
@@ -683,7 +683,7 @@ public class SessionItemStateManager
// check map; synchronized to ensure an entry is not created twice.
synchronized (transientStore) {
- if (transientStore.contains(id)) {
+ if (transientStore.containsKey(id)) {
String msg = "there's already a node state instance with id " + id;
log.debug(msg);
throw new ItemStateException(msg);
@@ -692,7 +692,7 @@ public class SessionItemStateManager
NodeState state = new NodeState(id, nodeTypeName, parentId,
initialStatus, true);
// put transient state in the map
- transientStore.put(state);
+ transientStore.put(state.getId(), state);
state.setContainer(this);
return state;
}
@@ -711,7 +711,7 @@ public class SessionItemStateManager
// check map; synchronized to ensure an entry is not created twice.
synchronized (transientStore) {
- if (transientStore.contains(id)) {
+ if (transientStore.containsKey(id)) {
String msg = "there's already a node state instance with id " + id;
log.debug(msg);
throw new ItemStateException(msg);
@@ -719,7 +719,7 @@ public class SessionItemStateManager
NodeState state = new NodeState(overlayedState, initialStatus, true);
// put transient state in the map
- transientStore.put(state);
+ transientStore.put(id, state);
state.setContainer(this);
return state;
}
@@ -739,7 +739,7 @@ public class SessionItemStateManager
// check map; synchronized to ensure an entry is not created twice.
synchronized (transientStore) {
- if (transientStore.contains(id)) {
+ if (transientStore.containsKey(id)) {
String msg = "there's already a property state instance with id " + id;
log.debug(msg);
throw new ItemStateException(msg);
@@ -747,7 +747,7 @@ public class SessionItemStateManager
PropertyState state = new PropertyState(id, initialStatus, true);
// put transient state in the map
- transientStore.put(state);
+ transientStore.put(id, state);
state.setContainer(this);
return state;
}
@@ -766,7 +766,7 @@ public class SessionItemStateManager
// check map; synchronized to ensure an entry is not created twice.
synchronized (transientStore) {
- if (transientStore.contains(id)) {
+ if (transientStore.containsKey(id)) {
String msg = "there's already a property state instance with id " + id;
log.debug(msg);
throw new ItemStateException(msg);
@@ -774,7 +774,7 @@ public class SessionItemStateManager
PropertyState state = new PropertyState(overlayedState, initialStatus, true);
// put transient state in the map
- transientStore.put(state);
+ transientStore.put(id, state);
state.setContainer(this);
return state;
}
@@ -820,7 +820,7 @@ public class SessionItemStateManager
// remove from map
transientStore.remove(state.getId());
// add to attic
- atticStore.put(state);
+ atticStore.put(state.getId(), state);
}
/**
@@ -949,7 +949,7 @@ public class SessionItemStateManager
}
public boolean isDeleted(ItemId id) {
- return atticStore.contains(id);
+ return atticStore.containsKey(id);
}
public boolean isModified(ItemId id) {
@@ -1046,7 +1046,8 @@ public class SessionItemStateManager
* or if the local state is not overlayed.
*/
public void nodeAdded(NodeState state, Name name, int index, NodeId id) {
- if (state.getContainer() == this || !transientStore.contains(state.getId())) {
+ if (state.getContainer() == this
+ || !transientStore.containsKey(state.getId())) {
dispatcher.notifyNodeAdded(state, name, index, id);
}
}
@@ -1058,7 +1059,8 @@ public class SessionItemStateManager
* or if the local state is not overlayed.
*/
public void nodesReplaced(NodeState state) {
- if (state.getContainer() == this || !transientStore.contains(state.getId())) {
+ if (state.getContainer() == this
+ || !transientStore.containsKey(state.getId())) {
dispatcher.notifyNodesReplaced(state);
}
}
@@ -1070,7 +1072,8 @@ public class SessionItemStateManager
* or if the local state is not overlayed.
*/
public void nodeModified(NodeState state) {
- if (state.getContainer() == this || !transientStore.contains(state.getId())) {
+ if (state.getContainer() == this
+ || !transientStore.containsKey(state.getId())) {
dispatcher.notifyNodeModified(state);
}
}
@@ -1082,7 +1085,8 @@ public class SessionItemStateManager
* or if the local state is not overlayed.
*/
public void nodeRemoved(NodeState state, Name name, int index, NodeId id) {
- if (state.getContainer() == this || !transientStore.contains(state.getId())) {
+ if (state.getContainer() == this
+ || !transientStore.containsKey(state.getId())) {
dispatcher.notifyNodeRemoved(state, name, index, id);
}
}
@@ -1114,7 +1118,7 @@ public class SessionItemStateManager
* {@inheritDoc}
*/
public boolean hasItemState(ItemId id) {
- return atticStore.contains(id);
+ return atticStore.containsKey(id);
}
/**
Modified: jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/AbstractVISProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/AbstractVISProvider.java?rev=1025962&r1=1025961&r2=1025962&view=diff
==============================================================================
--- jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/AbstractVISProvider.java (original)
+++ jackrabbit/branches/2.1/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/AbstractVISProvider.java Thu Oct 21 11:58:41 2010
@@ -16,6 +16,7 @@
*/
package org.apache.jackrabbit.core.virtual;
+import org.apache.commons.collections.map.ReferenceMap;
import org.apache.jackrabbit.core.id.ItemId;
import org.apache.jackrabbit.core.id.NodeId;
import org.apache.jackrabbit.core.id.PropertyId;
@@ -27,7 +28,6 @@ import org.apache.jackrabbit.core.state.
import org.apache.jackrabbit.core.state.NoSuchItemStateException;
import org.apache.jackrabbit.core.state.NodeReferences;
import org.apache.jackrabbit.core.state.NodeState;
-import org.apache.jackrabbit.core.state.ItemStateReferenceMap;
import org.apache.jackrabbit.core.state.ItemStateListener;
import org.apache.jackrabbit.core.state.ChildNodeEntry;
import org.apache.jackrabbit.spi.Name;
@@ -39,6 +39,7 @@ import org.slf4j.LoggerFactory;
import javax.jcr.RepositoryException;
import java.util.Collection;
+import java.util.Map;
/**
* This Class implements a virtual item state provider, in order to expose the
@@ -68,11 +69,14 @@ public abstract class AbstractVISProvide
/**
* the cache node states. key=ItemId, value=ItemState
*/
- private ItemStateReferenceMap nodes = new ItemStateReferenceMap();
+ @SuppressWarnings("unchecked")
+ private final Map<NodeId, NodeState> nodes =
+ new ReferenceMap(ReferenceMap.HARD, ReferenceMap.SOFT);
/**
* Listeners (weak references)
*/
+ @SuppressWarnings("unchecked")
private final transient Collection<ItemStateListener> listeners =
new WeakIdentityCollection(5);
@@ -102,7 +106,7 @@ public abstract class AbstractVISProvide
*/
public boolean hasItemState(ItemId id) {
if (id instanceof NodeId) {
- if (nodes.contains(id)) {
+ if (nodes.containsKey(id)) {
return true;
} else if (id.equals(rootNodeId)) {
return true;
@@ -122,7 +126,7 @@ public abstract class AbstractVISProvide
if (id instanceof NodeId) {
ItemState s;
- if (nodes.contains(id)) {
+ if (nodes.containsKey(id)) {
s = nodes.get(id);
} else if (id.equals(rootNodeId)) {
s = getRootState();
@@ -321,7 +325,7 @@ public abstract class AbstractVISProvide
*/
protected NodeState cache(NodeState state) {
if (state != null) {
- nodes.put(state);
+ nodes.put(state.getNodeId(), state);
log.debug("item added to cache. size=" + nodes.size());
}
return state;