[exo-jcr-commits] exo-jcr SVN: r1439 - in jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src: test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache and 1 other directory.
do-not-reply at jboss.org
do-not-reply at jboss.org
Sun Jan 17 03:09:08 EST 2010
Author: nzamosenchuk
Date: 2010-01-17 03:09:07 -0500 (Sun, 17 Jan 2010)
New Revision: 1439
Modified:
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/BufferedJBossCache.java
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/TestCompressedChangesBuffer.java
Log:
EXOJCR-409: Added and applied option for local cache operations, skipping replication and refactored BufferedJBossCache.
Modified: jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/BufferedJBossCache.java
===================================================================
--- jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/BufferedJBossCache.java 2010-01-16 20:04:46 UTC (rev 1438)
+++ jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/BufferedJBossCache.java 2010-01-17 08:09:07 UTC (rev 1439)
@@ -59,6 +59,8 @@
private final Cache<Serializable, Object> parentCache;
private ThreadLocal<CompressedChangesBuffer> changesList = new ThreadLocal<CompressedChangesBuffer>();
+
+ private ThreadLocal<Boolean> local = new ThreadLocal<Boolean>();
protected static final Log LOG =
ExoLogger.getLogger("org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.BufferedJBossCache");
@@ -75,6 +77,7 @@
public void beginTransaction()
{
changesList.set(new CompressedChangesBuffer());
+ local.set(false);
}
/**
@@ -82,11 +85,7 @@
*/
public void commitTransaction()
{
- CompressedChangesBuffer changesContainer = changesList.get();
- if (changesContainer == null)
- {
- throw new IllegalStateException("changesContainer should not be empty");
- }
+ CompressedChangesBuffer changesContainer = getChangesBufferSafe();
try
{
//log.info("Before=" + changesContainer.toString());
@@ -105,6 +104,21 @@
}
/**
+ * Tries to get buffer and if it is null throws an exception otherwise returns buffer.
+ *
+ * @return
+ */
+ private CompressedChangesBuffer getChangesBufferSafe()
+ {
+ CompressedChangesBuffer changesContainer = changesList.get();
+ if (changesContainer == null)
+ {
+ throw new IllegalStateException("changesContainer should not be empty");
+ }
+ return changesContainer;
+ }
+
+ /**
* Forget about changes
*/
public void rollbackTransaction()
@@ -112,6 +126,16 @@
changesList.set(null);
}
+ /**
+ * Creates all ChangesBuffers with given parameter
+ *
+ * @param local
+ */
+ public void setLocal(boolean local)
+ {
+ this.local.set(local);
+ }
+
/* (non-Javadoc)
* @see org.jboss.cache.Cache#addCacheListener(java.lang.Object)
*/
@@ -376,13 +400,8 @@
*/
public void put(Fqn fqn, Map<? extends Serializable, ? extends Object> data)
{
- //parentCache.put(fqn, data);
- CompressedChangesBuffer changesContainer = changesList.get();
- if (changesContainer == null)
- {
- throw new IllegalStateException("changesContainer should not be empty");
- }
- changesContainer.add(new PutObjectContainer(fqn, data, parentCache, changesContainer.getHistoryIndex()));
+ CompressedChangesBuffer changesContainer = getChangesBufferSafe();
+ changesContainer.add(new PutObjectContainer(fqn, data, parentCache, changesContainer.getHistoryIndex(), local.get()));
}
/* (non-Javadoc)
@@ -390,12 +409,8 @@
*/
public Object put(Fqn fqn, Serializable key, Object value)
{
- CompressedChangesBuffer changesContainer = changesList.get();
- if (changesContainer == null)
- {
- throw new IllegalStateException("changesContainer should not be empty");
- }
- changesContainer.add(new PutKeyValueContainer(fqn, key, value, parentCache, changesContainer.getHistoryIndex()));
+ CompressedChangesBuffer changesContainer = getChangesBufferSafe();
+ changesContainer.add(new PutKeyValueContainer(fqn, key, value, parentCache, changesContainer.getHistoryIndex(), local.get()));
return parentCache.get(fqn, key);
}
@@ -430,12 +445,8 @@
*/
public Object remove(Fqn fqn, Serializable key)
{
- CompressedChangesBuffer changesContainer = changesList.get();
- if (changesContainer == null)
- {
- throw new IllegalStateException("changesContainer should not be empty");
- }
- changesContainer.add(new RemoveKeyContainer(fqn, key, parentCache, changesContainer.getHistoryIndex()));
+ CompressedChangesBuffer changesContainer = getChangesBufferSafe();
+ changesContainer.add(new RemoveKeyContainer(fqn, key, parentCache, changesContainer.getHistoryIndex(), local.get()));
return parentCache.get(fqn, key);
}
@@ -476,12 +487,8 @@
*/
public boolean removeNode(Fqn fqn)
{
- CompressedChangesBuffer changesContainer = changesList.get();
- if (changesContainer == null)
- {
- throw new IllegalStateException("changesContainer should not be empty");
- }
- changesContainer.add(new RemoveNodeContainer(fqn, parentCache, changesContainer.getHistoryIndex()));
+ CompressedChangesBuffer changesContainer = getChangesBufferSafe();
+ changesContainer.add(new RemoveNodeContainer(fqn, parentCache, changesContainer.getHistoryIndex(), local.get()));
return true;
}
@@ -548,12 +555,8 @@
*/
public void addToList(Fqn fqn, String key, Object value)
{
- CompressedChangesBuffer changesContainer = changesList.get();
- if (changesContainer == null)
- {
- throw new IllegalStateException("changesContainer should not be empty");
- }
- changesContainer.add(new AddToListContainer(fqn, key, value, parentCache, changesContainer.getHistoryIndex()));
+ CompressedChangesBuffer changesContainer = getChangesBufferSafe();
+ changesContainer.add(new AddToListContainer(fqn, key, value, parentCache, changesContainer.getHistoryIndex(), local.get()));
}
/**
@@ -565,13 +568,9 @@
*/
public void removeFromList(Fqn fqn, String key, Object value)
{
- CompressedChangesBuffer changesContainer = changesList.get();
- if (changesContainer == null)
- {
- throw new IllegalStateException("changesContainer should not be empty");
- }
+ CompressedChangesBuffer changesContainer = getChangesBufferSafe();
changesContainer
- .add(new RemoveFromListContainer(fqn, key, value, parentCache, changesContainer.getHistoryIndex()));
+ .add(new RemoveFromListContainer(fqn, key, value, parentCache, changesContainer.getHistoryIndex(), local.get()));
}
public static enum ChangesType {
@@ -591,13 +590,16 @@
protected final int historicalIndex;
- public ChangesContainer(Fqn fqn, ChangesType changesType, Cache<Serializable, Object> cache, int historicalIndex)
+ protected final boolean localMode;
+
+ public ChangesContainer(Fqn fqn, ChangesType changesType, Cache<Serializable, Object> cache, int historicalIndex, boolean localMode)
{
super();
this.fqn = fqn;
this.changesType = changesType;
this.cache = cache;
this.historicalIndex = historicalIndex;
+ this.localMode = localMode;
}
/**
@@ -639,6 +641,11 @@
return result == 0 ? historicalIndex - o.getHistoricalIndex() : result;
}
+ protected void setCacheLocalMode()
+ {
+ cache.getInvocationContext().getOptionOverrides().setCacheModeLocal(localMode);
+ }
+
public abstract void apply();
}
@@ -650,9 +657,9 @@
private final Map<? extends Serializable, ? extends Object> data;
public PutObjectContainer(Fqn fqn, Map<? extends Serializable, ? extends Object> data,
- Cache<Serializable, Object> cache, int historicalIndex)
+ Cache<Serializable, Object> cache, int historicalIndex, boolean local)
{
- super(fqn, ChangesType.PUT, cache, historicalIndex);
+ super(fqn, ChangesType.PUT, cache, historicalIndex, local);
this.data = data;
}
@@ -660,6 +667,7 @@
@Override
public void apply()
{
+ setCacheLocalMode();
cache.put(fqn, data);
}
}
@@ -674,9 +682,9 @@
private final Object value;
public PutKeyValueContainer(Fqn fqn, Serializable key, Object value, Cache<Serializable, Object> cache,
- int historicalIndex)
+ int historicalIndex, boolean local)
{
- super(fqn, ChangesType.PUT_KEY, cache, historicalIndex);
+ super(fqn, ChangesType.PUT_KEY, cache, historicalIndex, local);
this.key = key;
this.value = value;
}
@@ -684,6 +692,7 @@
@Override
public void apply()
{
+ setCacheLocalMode();
cache.put(fqn, key, value);
}
}
@@ -699,9 +708,9 @@
private final Object value;
public AddToListContainer(Fqn fqn, Serializable key, Object value, Cache<Serializable, Object> cache,
- int historicalIndex)
+ int historicalIndex, boolean local)
{
- super(fqn, ChangesType.PUT_KEY, cache, historicalIndex);
+ super(fqn, ChangesType.PUT_KEY, cache, historicalIndex, local);
this.key = key;
this.value = value;
}
@@ -723,6 +732,7 @@
newSet.addAll((Set<Object>)existingObject);
}
newSet.add(value);
+ setCacheLocalMode();
cache.put(fqn, key, newSet);
}
else
@@ -743,9 +753,9 @@
private final Object value;
public RemoveFromListContainer(Fqn fqn, Serializable key, Object value, Cache<Serializable, Object> cache,
- int historicalIndex)
+ int historicalIndex, boolean local)
{
- super(fqn, ChangesType.REMOVE_KEY, cache, historicalIndex);
+ super(fqn, ChangesType.REMOVE_KEY, cache, historicalIndex, local);
this.key = key;
this.value = value;
}
@@ -756,12 +766,14 @@
// force writeLock on next read
cache.getInvocationContext().getOptionOverrides().setForceWriteLock(true);
// object found by FQN and key;
+ setCacheLocalMode();
Object existingObject = cache.get(getFqn(), key);
// if found value is really set! add to it.
if (existingObject instanceof Set)
{
Set<Object> newSet = new HashSet<Object>((Set<Object>)existingObject);
newSet.remove(value);
+ setCacheLocalMode();
cache.put(fqn, key, newSet);
}
}
@@ -774,17 +786,17 @@
{
private final Serializable key;
- public RemoveKeyContainer(Fqn fqn, Serializable key, Cache<Serializable, Object> cache, int historicalIndex)
+ public RemoveKeyContainer(Fqn fqn, Serializable key, Cache<Serializable, Object> cache, int historicalIndex, boolean local)
{
- super(fqn, ChangesType.REMOVE_KEY, cache, historicalIndex);
+ super(fqn, ChangesType.REMOVE_KEY, cache, historicalIndex, local);
this.key = key;
}
@Override
public void apply()
{
+ setCacheLocalMode();
cache.remove(fqn, key);
-
}
}
@@ -795,14 +807,15 @@
public static class RemoveNodeContainer extends ChangesContainer
{
- public RemoveNodeContainer(Fqn fqn, Cache<Serializable, Object> cache, int historicalIndex)
+ public RemoveNodeContainer(Fqn fqn, Cache<Serializable, Object> cache, int historicalIndex, boolean local)
{
- super(fqn, ChangesType.REMOVE, cache, historicalIndex);
+ super(fqn, ChangesType.REMOVE, cache, historicalIndex, local);
}
@Override
public void apply()
{
+ setCacheLocalMode();
cache.removeNode(fqn);
}
}
Modified: jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java
===================================================================
--- jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java 2010-01-16 20:04:46 UTC (rev 1438)
+++ jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java 2010-01-17 08:09:07 UTC (rev 1439)
@@ -371,6 +371,7 @@
*/
public void put(ItemData item)
{
+ cache.setLocal(true);
if (item.isNode())
{
putNode((NodeData)item, ModifyChildOption.NOT_MODIFY);
@@ -379,6 +380,7 @@
{
putProperty((PropertyData)item, ModifyChildOption.NOT_MODIFY);
}
+ cache.setLocal(false);
}
/**
@@ -439,6 +441,7 @@
*/
public void addChildNodes(NodeData parent, List<NodeData> childs)
{
+ cache.setLocal(true);
// remove previous all (to be sure about consistency)
cache.removeNode(makeChildListFqn(childNodesList, parent.getIdentifier()));
@@ -455,6 +458,7 @@
// cache fact of empty childs list
cache.put(makeChildListFqn(childNodesList, parent.getIdentifier()), ITEM_LIST, new HashSet<Object>());
}
+ cache.setLocal(false);
}
/**
@@ -462,6 +466,7 @@
*/
public void addChildProperties(NodeData parent, List<PropertyData> childs)
{
+ cache.setLocal(true);
// remove previous all (to be sure about consistency)
cache.removeNode(makeChildListFqn(childPropsList, parent.getIdentifier()));
if (childs.size() > 0)
@@ -476,6 +481,7 @@
{
LOG.warn("Empty properties list cached " + (parent != null ? parent.getQPath().getAsString() : parent));
}
+ cache.setLocal(false);
}
/**
@@ -483,7 +489,9 @@
*/
public void addChildPropertiesList(NodeData parent, List<PropertyData> childProperties)
{
+ cache.setLocal(true);
// TODO not implemented, will force read from DB
+ cache.setLocal(false);
}
/**
Modified: jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/TestCompressedChangesBuffer.java
===================================================================
--- jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/TestCompressedChangesBuffer.java 2010-01-16 20:04:46 UTC (rev 1438)
+++ jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/TestCompressedChangesBuffer.java 2010-01-17 08:09:07 UTC (rev 1439)
@@ -40,13 +40,13 @@
CompressedChangesBuffer buffer = new CompressedChangesBuffer();
ChangesContainer put1 =
new PutObjectContainer(Fqn.fromString("/" + JBossCacheWorkspaceStorageCache.CHILD_NODES + "/b"),
- new HashMap<String, String>(), null, buffer.getHistoryIndex());
+ new HashMap<String, String>(), null, buffer.getHistoryIndex(), false);
ChangesContainer put2 =
new PutObjectContainer(Fqn.fromString("/" + JBossCacheWorkspaceStorageCache.CHILD_NODES + "/b/c"),
- new HashMap<String, String>(), null, buffer.getHistoryIndex());
+ new HashMap<String, String>(), null, buffer.getHistoryIndex(), false);
ChangesContainer rm1 =
new RemoveNodeContainer(Fqn.fromString("/" + JBossCacheWorkspaceStorageCache.CHILD_NODES + "/b"), null, buffer
- .getHistoryIndex());
+ .getHistoryIndex(), false);
buffer.add(put1);
buffer.add(put2);
assertTrue("List MUST contain put container", buffer.getSortedList().contains(put1));
@@ -67,17 +67,17 @@
CompressedChangesBuffer buffer = new CompressedChangesBuffer();
ChangesContainer put1 =
new PutObjectContainer(Fqn.fromString("/" + JBossCacheWorkspaceStorageCache.CHILD_NODES + "/b"),
- new HashMap<String, String>(), null, buffer.getHistoryIndex());
+ new HashMap<String, String>(), null, buffer.getHistoryIndex(), false);
ChangesContainer put2 =
new PutObjectContainer(Fqn.fromString("/" + JBossCacheWorkspaceStorageCache.CHILD_NODES + "/b/c"),
- new HashMap<String, String>(), null, buffer.getHistoryIndex());
+ new HashMap<String, String>(), null, buffer.getHistoryIndex(), false);
ChangesContainer rm1 =
new RemoveNodeContainer(Fqn.fromString("/" + JBossCacheWorkspaceStorageCache.CHILD_NODES + "/b/c"), null,
- buffer.getHistoryIndex());
+ buffer.getHistoryIndex(), false);
ChangesContainer rm2 =
new RemoveNodeContainer(Fqn.fromString("/" + JBossCacheWorkspaceStorageCache.CHILD_NODES + "/b"), null, buffer
- .getHistoryIndex());
+ .getHistoryIndex(), false);
buffer.add(put1);
buffer.add(put2);
assertTrue("List MUST contain put container", buffer.getSortedList().contains(put1));
@@ -97,11 +97,11 @@
CompressedChangesBuffer buffer = new CompressedChangesBuffer();
ChangesContainer put1 =
new PutObjectContainer(Fqn.fromString("/" + JBossCacheWorkspaceStorageCache.CHILD_NODES_LIST + "/b"),
- new HashMap<String, String>(), null, buffer.getHistoryIndex());
+ new HashMap<String, String>(), null, buffer.getHistoryIndex(), false);
ChangesContainer rm1 =
new RemoveNodeContainer(Fqn.fromString("/" + JBossCacheWorkspaceStorageCache.CHILD_NODES_LIST + "/b"), null,
- buffer.getHistoryIndex());
+ buffer.getHistoryIndex(), false);
buffer.add(put1);
assertTrue("List MUST contain put container", buffer.getSortedList().contains(put1));
buffer.add(rm1);
More information about the exo-jcr-commits
mailing list