[exo-jcr-commits] exo-jcr SVN: r575 - 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
Thu Nov 12 03:06:27 EST 2009


Author: tolusha
Date: 2009-11-12 03:06:27 -0500 (Thu, 12 Nov 2009)
New Revision: 575

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
Log:
EXOJCR-201: bug fix

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-11 18:14:58 UTC (rev 574)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java	2009-11-12 08:06:27 UTC (rev 575)
@@ -18,8 +18,11 @@
  */
 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.PlainChangesLog;
 import org.exoplatform.services.jcr.dataflow.ReadOnlyThroughChanges;
 import org.exoplatform.services.jcr.datamodel.QPath;
 import org.exoplatform.services.jcr.impl.Constants;
@@ -28,8 +31,10 @@
 import org.exoplatform.services.jcr.storage.WorkspaceDataContainer;
 import org.exoplatform.services.jcr.storage.WorkspaceStorageConnection;
 
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 
 import javax.jcr.RepositoryException;
@@ -44,7 +49,7 @@
  */
 public class JBossCacheWorkspaceDataManager extends WorkspacePersistentDataManager
 {
-   
+
    /**
     * JBossCachePersistentDataManager  constructor.
     *
@@ -54,7 +59,7 @@
    public JBossCacheWorkspaceDataManager(WorkspaceDataContainer dataContainer,
       SystemDataContainerHolder<WorkspaceDataContainer> systemDataContainerHolder)
    {
-      super(dataContainer, systemDataContainerHolder);      
+      super(dataContainer, systemDataContainerHolder);
    }
 
    @Override
@@ -69,85 +74,125 @@
       WorkspaceStorageConnection thisConnection = null;
       WorkspaceStorageConnection systemConnection = null;
 
+      // prepare changes log list
+      List<PlainChangesLog> chengesLogList = new ArrayList<PlainChangesLog>();
+      if (changesLog instanceof PlainChangesLog)
+      {
+         chengesLogList.add((PlainChangesLog)changesLog);
+      }
+      else if (changesLog instanceof CompositeChangesLog)
+      {
+         for (ChangesLogIterator iter = ((CompositeChangesLog)changesLog).getLogIterator(); iter.hasNextLog();)
+         {
+            chengesLogList.add(iter.nextLog());
+         }
+      }
+
       try
       {
-         for (Iterator<ItemState> iter = changesLog.getAllStates().iterator(); iter.hasNext();)
+         for (PlainChangesLog currChangesLog : chengesLogList)
          {
-            ItemState itemState = iter.next();
+            boolean systemConnSessionInfoAdded = false;
+            boolean thisConnSessionInfoAdded = false;
 
-            if (!itemState.isPersisted())
-               continue;
+            for (Iterator<ItemState> iter = currChangesLog.getAllStates().iterator(); iter.hasNext();)
+            {
+               ItemState itemState = iter.next();
 
-            long start = System.currentTimeMillis();
+               if (!itemState.isPersisted())
+                  continue;
 
-            TransientItemData data = (TransientItemData)itemState.getData();
+               long start = System.currentTimeMillis();
 
-            WorkspaceStorageConnection conn = null;
-            if (isSystemDescendant(data.getQPath()))
-            {
-               conn = systemConnection == null
-               // we need system connection but it's not exist
-                  ? systemConnection = (systemDataContainer != dataContainer
-                  // if it's different container instances
-                     ? systemDataContainer.equals(dataContainer) && thisConnection != null
-                     // but container confugrations are same and non-system connnection open
-                        // reuse this connection as system
-                        ? systemDataContainer.reuseConnection(thisConnection)
-                        // or open one new system
-                        : systemDataContainer.openConnection()
-                     // else if it's same container instances (system and this)
-                     : thisConnection == null
-                     // and non-system connection doens't exist - open it
-                        ? thisConnection = dataContainer.openConnection()
-                        // if already open - use it
-                        : thisConnection)
-                  // system connection opened - use it
-                  : systemConnection;
-            }
-            else
-            {
-               conn = thisConnection == null
-               // we need this conatiner conection
-                  ? thisConnection = (systemDataContainer != dataContainer
-                  // if it's different container instances
-                     ? dataContainer.equals(systemDataContainer) && systemConnection != null
-                     // but container confugrations are same and system connnection 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;
-            }
+               TransientItemData data = (TransientItemData)itemState.getData();
 
-            data.increasePersistedVersion();
+               WorkspaceStorageConnection conn = null;
+               if (isSystemDescendant(data.getQPath()))
+               {
+                  conn = systemConnection == null
+                  // we need system connection but it's not exist
+                     ? systemConnection = (systemDataContainer != dataContainer
+                     // if it's different container instances
+                        ? systemDataContainer.equals(dataContainer) && thisConnection != null
+                        // but container confugrations are same and non-system connnection open
+                           // reuse this connection as system
+                           ? systemDataContainer.reuseConnection(thisConnection)
+                           // or open one new system
+                           : systemDataContainer.openConnection()
+                        // else if it's same container instances (system and this)
+                        : thisConnection == null
+                        // and non-system connection doens't exist - open it
+                           ? thisConnection = dataContainer.openConnection()
+                           // if already open - use it
+                           : thisConnection)
+                     // system connection opened - use it
+                     : systemConnection;
 
-            if (itemState.isAdded())
-            {
-               doAdd(data, conn, addedNodes);
+                  if (!systemConnSessionInfoAdded)
+                  {
+                     // TODO userId
+                     if (!systemConnection.equals(thisConnection))
+                        systemConnection.addSessionInfo(currChangesLog.getSessionId());
+                     systemConnSessionInfoAdded = true;
+                  }
+               }
+               else
+               {
+                  conn = thisConnection == null
+                  // we need this conatiner conection
+                     ? thisConnection = (systemDataContainer != dataContainer
+                     // if it's different container instances
+                        ? dataContainer.equals(systemDataContainer) && systemConnection != null
+                        // but container confugrations are same and system connnection 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;
+
+                  if (!thisConnSessionInfoAdded)
+                  {
+                     // TODO userId
+                     if (!thisConnection.equals(systemConnection))
+                        thisConnection.addSessionInfo(currChangesLog.getSessionId());
+                     thisConnSessionInfoAdded = true;
+                  }
+               }
+
+               data.increasePersistedVersion();
+
+               if (itemState.isAdded())
+               {
+                  doAdd(data, conn, addedNodes);
+               }
+               else if (itemState.isUpdated())
+               {
+                  doUpdate(data, conn);
+               }
+               else if (itemState.isDeleted())
+               {
+                  doDelete(data, conn);
+               }
+               else if (itemState.isRenamed())
+               {
+                  doRename(data, conn, addedNodes);
+               }
+
+               if (LOG.isDebugEnabled())
+                  LOG.debug(ItemState.nameFromValue(itemState.getState()) + " " + (System.currentTimeMillis() - start)
+                     + "ms, " + data.getQPath().getAsString());
             }
-            else if (itemState.isUpdated())
-            {
-               doUpdate(data, conn);
-            }
-            else if (itemState.isDeleted())
-            {
-               doDelete(data, conn);
-            }
-            else if (itemState.isRenamed())
-            {
-               doRename(data, conn, addedNodes);
-            }
-
-            if (LOG.isDebugEnabled())
-               LOG.debug(ItemState.nameFromValue(itemState.getState()) + " " + (System.currentTimeMillis() - start)
-                  + "ms, " + data.getQPath().getAsString());
+            if (thisConnection != null)
+               thisConnection.removeSessionInfo();
+            if (systemConnection != null && !systemConnection.equals(thisConnection))
+               systemConnection.removeSessionInfo();
          }
          if (thisConnection != null)
             thisConnection.commit();
@@ -166,7 +211,6 @@
       }
    }
 
-
    /**
     * Tell if the path is jcr:system descendant.
     * 
@@ -178,5 +222,5 @@
    {
       return path.isDescendantOf(Constants.JCR_SYSTEM_PATH) || path.equals(Constants.JCR_SYSTEM_PATH);
    }
-   
+
 }

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-11 18:14:58 UTC (rev 574)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java	2009-11-12 08:06:27 UTC (rev 575)
@@ -131,125 +131,85 @@
       WorkspaceStorageConnection thisConnection = null;
       WorkspaceStorageConnection systemConnection = null;
 
-      // prepare changes log list
-      List<PlainChangesLog> chengesLogList = new ArrayList<PlainChangesLog>();
-      if (changesLog instanceof PlainChangesLog)
-      {
-         chengesLogList.add((PlainChangesLog)changesLog);
-      }
-      else if (changesLog instanceof CompositeChangesLog)
-      {
-         for (ChangesLogIterator iter = ((CompositeChangesLog)changesLog).getLogIterator(); iter.hasNextLog();)
-         {
-            chengesLogList.add(iter.nextLog());
-         }
-      }
-
       try
       {
-         for (PlainChangesLog currChangesLog : chengesLogList)
+         for (Iterator<ItemState> iter = changesLog.getAllStates().iterator(); iter.hasNext();)
          {
-            boolean systemConnSessionInfoAdded = false;
-            boolean thisConnSessionInfoAdded = false;
+            ItemState itemState = iter.next();
 
-            for (Iterator<ItemState> iter = currChangesLog.getAllStates().iterator(); iter.hasNext();)
-            {
-               ItemState itemState = iter.next();
+            if (!itemState.isPersisted())
+               continue;
 
-               if (!itemState.isPersisted())
-                  continue;
+            long start = System.currentTimeMillis();
 
-               long start = System.currentTimeMillis();
+            TransientItemData data = (TransientItemData)itemState.getData();
 
-               TransientItemData data = (TransientItemData)itemState.getData();
+            WorkspaceStorageConnection conn = null;
+            if (isSystemDescendant(data.getQPath()))
+            {
+               conn = systemConnection == null
+               // we need system connection but it's not exist
+                  ? systemConnection = (systemDataContainer != dataContainer
+                  // if it's different container instances
+                     ? systemDataContainer.equals(dataContainer) && thisConnection != null
+                     // but container configurations are same and non-system connection open
+                        // reuse this connection as system
+                        ? systemDataContainer.reuseConnection(thisConnection)
+                        // or open one new system
+                        : systemDataContainer.openConnection()
+                     // else if it's same container instances (system and this)
+                     : thisConnection == null
+                     // and non-system connection doens't exist - open it
+                        ? thisConnection = dataContainer.openConnection()
+                        // if already open - use it
+                        : thisConnection)
+                  // system connection opened - use it
+                  : systemConnection;
+            }
+            else
+            {
+               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;
+            }
 
-               WorkspaceStorageConnection conn = null;
-               if (isSystemDescendant(data.getQPath()))
-               {
-                  conn = systemConnection == null
-                  // we need system connection but it's not exist
-                     ? systemConnection = (systemDataContainer != dataContainer
-                     // if it's different container instances
-                        ? systemDataContainer.equals(dataContainer) && thisConnection != null
-                        // but container configurations are same and non-system connection open
-                           // reuse this connection as system
-                           ? systemDataContainer.reuseConnection(thisConnection)
-                           // or open one new system
-                           : systemDataContainer.openConnection()
-                        // else if it's same container instances (system and this)
-                        : thisConnection == null
-                        // and non-system connection doens't exist - open it
-                           ? thisConnection = dataContainer.openConnection()
-                           // if already open - use it
-                           : thisConnection)
-                     // system connection opened - use it
-                     : systemConnection;
+            data.increasePersistedVersion();
 
-                  if (!systemConnSessionInfoAdded)
-                  {
-                     // TODO userId
-                     if (!systemConnection.equals(thisConnection))
-                        systemConnection.addSessionInfo(currChangesLog.getSessionId());
-                     systemConnSessionInfoAdded = true;
-                  }
-               }
-               else
-               {
-                  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;
-
-                  if (!thisConnSessionInfoAdded)
-                  {
-                     // TODO userId
-                     if (!thisConnection.equals(systemConnection))
-                        thisConnection.addSessionInfo(currChangesLog.getSessionId());
-                     thisConnSessionInfoAdded = true;
-                  }
-               }
-
-               data.increasePersistedVersion();
-
-               if (itemState.isAdded())
-               {
-                  doAdd(data, conn, addedNodes);
-               }
-               else if (itemState.isUpdated())
-               {
-                  doUpdate(data, conn);
-               }
-               else if (itemState.isDeleted())
-               {
-                  doDelete(data, conn);
-               }
-               else if (itemState.isRenamed())
-               {
-                  doRename(data, conn, addedNodes);
-               }
-
-               if (LOG.isDebugEnabled())
-                  LOG.debug(ItemState.nameFromValue(itemState.getState()) + " " + (System.currentTimeMillis() - start)
-                     + "ms, " + data.getQPath().getAsString());
+            if (itemState.isAdded())
+            {
+               doAdd(data, conn, addedNodes);
             }
-            if (thisConnection != null)
-               thisConnection.removeSessionInfo();
-            if (systemConnection != null && !systemConnection.equals(thisConnection))
-               systemConnection.removeSessionInfo();
+            else if (itemState.isUpdated())
+            {
+               doUpdate(data, conn);
+            }
+            else if (itemState.isDeleted())
+            {
+               doDelete(data, conn);
+            }
+            else if (itemState.isRenamed())
+            {
+               doRename(data, conn, addedNodes);
+            }
+
+            if (LOG.isDebugEnabled())
+               LOG.debug(ItemState.nameFromValue(itemState.getState()) + " " + (System.currentTimeMillis() - start)
+                  + "ms, " + data.getQPath().getAsString());
          }
          if (thisConnection != null)
             thisConnection.commit();



More information about the exo-jcr-commits mailing list