[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