[exo-jcr-commits] exo-jcr SVN: r745 - jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent.
do-not-reply at jboss.org
do-not-reply at jboss.org
Wed Nov 18 05:40:33 EST 2009
Author: nzamosenchuk
Date: 2009-11-18 05:40:33 -0500 (Wed, 18 Nov 2009)
New Revision: 745
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java
Log:
EXOJCR-242:JbossCache WorkspaceDataManager updated to handle changes logs of ExtendedEvent.LOCK an UNLOCK types.
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-18 10:36:41 UTC (rev 744)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java 2009-11-18 10:40:33 UTC (rev 745)
@@ -22,13 +22,16 @@
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.LockPlainChangesLogImpl;
import org.exoplatform.services.jcr.dataflow.PlainChangesLog;
import org.exoplatform.services.jcr.dataflow.ReadOnlyThroughChanges;
import org.exoplatform.services.jcr.dataflow.TransactionChangesLog;
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.impl.Constants;
+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.observation.ExtendedEvent;
import org.exoplatform.services.jcr.storage.WorkspaceDataContainer;
import org.exoplatform.services.jcr.storage.WorkspaceStorageConnection;
@@ -93,6 +96,43 @@
{
for (PlainChangesLog curChangesLog : chengesLogList)
{
+ // if this is LOCK or UNLOCK changes log, then put or remove lock data from cache
+ if (curChangesLog.getEventType() == ExtendedEvent.LOCK
+ || curChangesLog.getEventType() == ExtendedEvent.UNLOCK)
+ {
+ WorkspaceStorageConnection conn = thisConnection == null
+ // we need this container connection
+ ? thisConnection = (systemDataContainer != dataContainer
+ // if it's different container instances
+ ? dataContainer.equals(systemDataContainer) && systemConnection != null
+ // but container configurations are same and system connection open
+ // reuse system connection as this
+ ? dataContainer.reuseConnection(systemConnection)
+ // or open one new
+ : dataContainer.openConnection()
+ // else if it's same container instances (system and this)
+ : systemConnection == null
+ // and system connection doens't exist - open it
+ ? systemConnection = dataContainer.openConnection()
+ // if already open - use it
+ : systemConnection)
+ // this connection opened - use it
+ : thisConnection;
+
+ switch (curChangesLog.getEventType())
+ {
+ case ExtendedEvent.LOCK :
+ // put lock data to cache
+ LockData lockData = ((LockPlainChangesLogImpl)curChangesLog).getLockData();
+ conn.addLockData(lockData);
+ break;
+ case ExtendedEvent.UNLOCK :
+ // remove lock data from cache
+ conn.removeLockData(curChangesLog.getAllStates().get(0).getData().getParentIdentifier());
+ break;
+ }
+ }
+
for (Iterator<ItemState> iter = curChangesLog.getAllStates().iterator(); iter.hasNext();)
{
ItemState itemState = iter.next();
More information about the exo-jcr-commits
mailing list