[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