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);
Show replies by date