[exo-jcr-commits] exo-jcr SVN: r5025 - jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Oct 5 09:37:30 EDT 2011


Author: areshetnyak
Date: 2011-10-05 09:37:30 -0400 (Wed, 05 Oct 2011)
New Revision: 5025

Modified:
   jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositorySameConfigRestore.java
Log:
EXOJCR-1531 : Restoring operation for single-db configuration by optimization cleaning db was improved

Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositorySameConfigRestore.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositorySameConfigRestore.java	2011-10-05 13:36:58 UTC (rev 5024)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositorySameConfigRestore.java	2011-10-05 13:37:30 UTC (rev 5025)
@@ -31,7 +31,12 @@
 import org.exoplatform.services.jcr.impl.backup.DataRestore;
 import org.exoplatform.services.jcr.impl.backup.JCRRestore;
 import org.exoplatform.services.jcr.impl.backup.rdbms.DataRestoreContext;
+import org.exoplatform.services.jcr.impl.clean.rdbms.DBCleanService;
+import org.exoplatform.services.jcr.impl.clean.rdbms.DBCleaner;
+import org.exoplatform.services.jcr.impl.clean.rdbms.DummyDBCleaner;
 import org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
+import org.exoplatform.services.jcr.impl.storage.jdbc.DBConstants;
+import org.exoplatform.services.jcr.impl.storage.jdbc.DialectDetecter;
 import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer;
 import org.exoplatform.services.jcr.impl.util.io.FileCleanerHolder;
 
@@ -83,7 +88,14 @@
 
          // define one common connection for all restores and cleaners for single db case
          Connection jdbcConn = null;
-         if (!Boolean.parseBoolean(wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.MULTIDB)))
+         
+         // define one common database cleaner for all restores for single db case
+         DBCleaner dbCleaner = null;
+         
+         Boolean isMultiDb =
+            Boolean.parseBoolean(wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.MULTIDB));
+
+         if (!isMultiDb)
          {
             String dsName = wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.SOURCE_NAME);
 
@@ -102,10 +114,17 @@
                }
             });
             jdbcConn.setAutoCommit(false);
+
+            if (!(DialectDetecter.detect(jdbcConn.getMetaData()).equals(DBConstants.DB_DIALECT_SYBASE)))
+            {
+               dbCleaner = DBCleanService.getRepositoryDBCleaner(jdbcConn, repositoryEntry);
+            }
          }
 
          repositoryService.getRepository(this.repositoryEntry.getName()).setState(ManageableRepository.SUSPENDED);
 
+         boolean isSharedDbCleaner = false;
+
          // collect all restorers
          for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
          {
@@ -121,9 +140,45 @@
 
             if (jdbcConn != null)
             {
-               context = new DataRestoreContext(
-                        new String[] {DataRestoreContext.STORAGE_DIR, DataRestoreContext.DB_CONNECTION}, 
-                        new Object[] {fullBackupDir, jdbcConn});
+               if (dbCleaner != null)
+               {
+                  if (isSharedDbCleaner)
+                  {
+                     context = new DataRestoreContext(
+                                 new String[]{
+                                    DataRestoreContext.STORAGE_DIR, 
+                                    DataRestoreContext.DB_CONNECTION, 
+                                    DataRestoreContext.DB_CLEANER}, 
+                                 new Object[]{
+                                    fullBackupDir, 
+                                    jdbcConn, 
+                                    new DummyDBCleaner(jdbcConn, new ArrayList<String>())});
+                  }
+                  else
+                  {
+                     context = new DataRestoreContext(
+                        new String[]{
+                           DataRestoreContext.STORAGE_DIR, 
+                           DataRestoreContext.DB_CONNECTION, 
+                           DataRestoreContext.DB_CLEANER}, 
+                        new Object[]{
+                           fullBackupDir, 
+                           jdbcConn, 
+                           dbCleaner});
+   
+                     isSharedDbCleaner = true;
+                  }
+               }
+               else
+               {
+                  context = new DataRestoreContext(
+                     new String[]{
+                        DataRestoreContext.STORAGE_DIR, 
+                        DataRestoreContext.DB_CONNECTION}, 
+                     new Object[]{
+                        fullBackupDir, 
+                        jdbcConn});
+               }
             }
             else
             {
@@ -152,7 +207,7 @@
          {
             restorer.commit();
          }
-
+         
          // resume components
          repositoryService.getRepository(this.repositoryEntry.getName()).setState(ManageableRepository.ONLINE);
 



More information about the exo-jcr-commits mailing list