Author: skabashnyuk
Date: 2009-11-24 08:22:15 -0500 (Tue, 24 Nov 2009)
New Revision: 827
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
Log:
EXOJCR-246 : NodeData update if mixin changed
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java 2009-11-24
10:26:19 UTC (rev 826)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java 2009-11-24
13:22:15 UTC (rev 827)
@@ -205,6 +205,10 @@
{
doRename(data, conn, addedNodes);
}
+ else if (itemState.isMixinChanged())
+ {
+ doUpdateMixin(data, conn);
+ }
if (LOG.isDebugEnabled())
LOG.debug(ItemState.nameFromValue(itemState.getState()) + " "
+ (System.currentTimeMillis() - start)
@@ -226,7 +230,7 @@
// help to GC
addedNodes.clear();
}
-
+
notifySaveItems(changesLog);
}
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java 2009-11-24
10:26:19 UTC (rev 826)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java 2009-11-24
13:22:15 UTC (rev 827)
@@ -18,12 +18,9 @@
*/
package org.exoplatform.services.jcr.impl.dataflow.persistent;
-import org.exoplatform.services.jcr.dataflow.ChangesLogIterator;
-import org.exoplatform.services.jcr.dataflow.CompositeChangesLog;
import org.exoplatform.services.jcr.dataflow.ItemState;
import org.exoplatform.services.jcr.dataflow.ItemStateChangesLog;
import org.exoplatform.services.jcr.dataflow.PersistentDataManager;
-import org.exoplatform.services.jcr.dataflow.PlainChangesLog;
import org.exoplatform.services.jcr.dataflow.ReadOnlyThroughChanges;
import org.exoplatform.services.jcr.dataflow.persistent.ItemsPersistenceListener;
import org.exoplatform.services.jcr.dataflow.persistent.ItemsPersistenceListenerFilter;
@@ -37,6 +34,7 @@
import org.exoplatform.services.jcr.impl.core.lock.LockData;
import org.exoplatform.services.jcr.impl.dataflow.TransientItemData;
import org.exoplatform.services.jcr.impl.storage.SystemDataContainerHolder;
+import org.exoplatform.services.jcr.impl.storage.jbosscache.JBossCacheStorageConnection;
import org.exoplatform.services.jcr.storage.WorkspaceDataContainer;
import org.exoplatform.services.jcr.storage.WorkspaceStorageConnection;
import org.exoplatform.services.log.ExoLogger;
@@ -449,6 +447,29 @@
}
/**
+ * Performs updating of node data after mixin update.
+ *
+ * @param item
+ * to update
+ * @param con
+ * connection
+ * @throws RepositoryException
+ * @throws InvalidItemStateException
+ * if the item not found TODO compare persistedVersion number
+ */
+ protected void doUpdateMixin(final TransientItemData item, final
WorkspaceStorageConnection con)
+ throws RepositoryException, InvalidItemStateException
+ {
+
+ if (item.isNode())
+ {
+ //TODO remove cast
+ ((JBossCacheStorageConnection)con).updateMixin((NodeData)item);
+ }
+
+ }
+
+ /**
* Performs actual item data adding.
*
* @param item
@@ -522,8 +543,8 @@
mandatoryListeners.add((MandatoryItemsPersistenceListener)listener);
else
listeners.add(listener);
-// if (LOG.isDebugEnabled())
- LOG.info("Workspace '" + this.dataContainer.getName() +
"' listener registered: " + listener);
+ // if (LOG.isDebugEnabled())
+ LOG.info("Workspace '" + this.dataContainer.getName() + "'
listener registered: " + listener);
}
public void removeItemPersistenceListener(ItemsPersistenceListener listener)
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java 2009-11-24
10:26:19 UTC (rev 826)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java 2009-11-24
13:22:15 UTC (rev 827)
@@ -737,6 +737,32 @@
// }
}
+ //Update NodeData after update mixin
+ public void updateMixin(NodeData data) throws RepositoryException
+ {
+ startBatch();
+
+ String nodeId = data.getIdentifier();
+
+ //1. Update node and also get old nodeData
+ Node<Serializable, Object> node = nodesRoot.getChild(makeNodeFqn(nodeId));
+ if (node == null)
+ {
+ throw new InvalidItemStateException("Node is not exist" +
data.getQPath().getAsString());
+ }
+
+ NodeData prevData = (NodeData)node.put(ITEM_DATA, data);
+ if (prevData == null)
+ {
+ throw new RepositoryException("FATAL NodeData is empty " +
data.getQPath().getAsString());
+ }
+
+ if (data instanceof TransientNodeData)
+ {
+ ((TransientNodeData)data).setState(TransientNodeData.TRANSITIVE_MIXIN_UPDATED);
+ }
+ }
+
/**
* Update Nodes tree with new path.
*
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-24
10:26:19 UTC (rev 826)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-24
13:22:15 UTC (rev 827)
@@ -120,6 +120,17 @@
case PUT_KEY_VALUE :
if (m.getFqn().size() == 2)
{
+ // if (m.getValue() instanceof TransientNodeData)
+ // {
+ // //Check flag it's mixin update for node, if
this flag set we have node need to
+ // // update node
+ // int skipMask =
TransientNodeData.TRANSITIVE_MIXIN_UPDATED;
+ // if
((((TransientNodeData)m.getValue()).getState() & skipMask) > 0)
+ // {
+ //
+ // continue;
+ // }
+ // }
if (isUpdate(m, (JDBCStorageConnection)conn))
{
doUpdate(m, conn);