[exo-jcr-commits] exo-jcr SVN: r4164 - in jcr/trunk: exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache and 1 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Wed Mar 23 06:42:41 EDT 2011
Author: tolusha
Date: 2011-03-23 06:42:41 -0400 (Wed, 23 Mar 2011)
New Revision: 4164
Added:
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRDBMSRestore.java
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRDBMSRestore.java
Removed:
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRestoreSameConfig.java
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRestoreSameConfig.java
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java
Log:
EXOJCR-1170: no need to clean cache if repository is dropped, no need to remove repository/workspace if we have deal with RDBMS restore
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java 2011-03-22 16:14:38 UTC (rev 4163)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -49,6 +49,7 @@
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.infinispan.Cache;
+import org.infinispan.lifecycle.ComponentStatus;
import java.io.File;
import java.io.IOException;
@@ -1153,7 +1154,10 @@
*/
public void clean() throws BackupException
{
- cache.clear();
+ if (cache.getStatus() == ComponentStatus.RUNNING)
+ {
+ cache.clear();
+ }
}
/**
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java 2011-03-22 16:14:38 UTC (rev 4163)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -49,6 +49,7 @@
import org.exoplatform.services.log.Log;
import org.exoplatform.services.transaction.TransactionService;
import org.jboss.cache.Cache;
+import org.jboss.cache.CacheStatus;
import org.jboss.cache.Fqn;
import org.jboss.cache.Node;
import org.jboss.cache.config.Configuration.CacheMode;
@@ -1634,22 +1635,25 @@
*/
private void cleanCache()
{
- cache.beginTransaction();
+ if (cache.getCacheStatus() == CacheStatus.STARTED)
+ {
+ cache.beginTransaction();
- cache.removeNode(itemsRoot);
- cache.removeNode(refRoot);
- cache.removeNode(childNodes);
- cache.removeNode(childProps);
- cache.removeNode(childNodesList);
- cache.removeNode(childPropsList);
+ cache.removeNode(itemsRoot);
+ cache.removeNode(refRoot);
+ cache.removeNode(childNodes);
+ cache.removeNode(childProps);
+ cache.removeNode(childNodesList);
+ cache.removeNode(childPropsList);
- cache.commitTransaction();
+ cache.commitTransaction();
- createResidentNode(childNodes);
- createResidentNode(refRoot);
- createResidentNode(childNodesList);
- createResidentNode(childProps);
- createResidentNode(childPropsList);
- createResidentNode(itemsRoot);
+ createResidentNode(childNodes);
+ createResidentNode(refRoot);
+ createResidentNode(childNodesList);
+ createResidentNode(childProps);
+ createResidentNode(childPropsList);
+ createResidentNode(itemsRoot);
+ }
}
}
Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java 2011-03-22 16:14:38 UTC (rev 4163)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -61,8 +61,6 @@
import org.exoplatform.services.jcr.util.IdGenerator;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
-import org.exoplatform.ws.frameworks.json.impl.JsonException;
-import org.exoplatform.ws.frameworks.json.impl.JsonGeneratorImpl;
import org.picocontainer.Startable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -1555,31 +1553,9 @@
workspacesMapping.put(wsEntry.getName(), backups.get(wsEntry.getName()));
}
}
+
- // check if need to restore with same configuration or not
- boolean isSameConfig = false;
- try
- {
- String newConf = new JsonGeneratorImpl().createJsonObject(repositoryEntry).toString();
- String currnetConf =
- new JsonGeneratorImpl().createJsonObject(
- repoService.getRepository(repositoryEntry.getName()).getConfiguration()).toString();
- isSameConfig = newConf.equals(currnetConf);
- }
- catch (JsonException e)
- {
- this.log.error("Can't get JSON object from wokrspace configuration", e);
- }
- catch (RepositoryException e)
- {
- this.log.error(e);
- }
- catch (RepositoryConfigurationException e)
- {
- this.log.error(e);
- }
-
// check if we have deal with RDBMS backup
boolean isRDBMSBackup = false;
try
@@ -1594,9 +1570,8 @@
}
JobRepositoryRestore jobExistedRepositoryRestore =
- isSameConfig && isRDBMSBackup ? new JobExistedRepositoryRestoreSameConfig(repoService, this, repositoryEntry,
- workspacesMapping, rblog) : new JobExistedRepositoryRestore(repoService, this, repositoryEntry,
- workspacesMapping, rblog);
+ isRDBMSBackup ? new JobExistedRepositoryRDBMSRestore(repoService, this, repositoryEntry, workspacesMapping,
+ rblog) : new JobExistedRepositoryRestore(repoService, this, repositoryEntry, workspacesMapping, rblog);
restoreRepositoryJobs.add(jobExistedRepositoryRestore);
if (asynchronous)
@@ -1661,38 +1636,6 @@
throw new WorkspaceRestoreException("Repository \"" + repositoryName + "\" should be existed", e);
}
- // check if need to restore with same configuration or not
- boolean isSameConfig = false;
- try
- {
- WorkspaceEntry currentWsEntry = null;
- for (WorkspaceEntry wsEntry : repoService.getRepository(repositoryName).getConfiguration().getWorkspaceEntries())
- {
- if (wsEntry.getName().equals(workspaceEntry.getName()))
- {
- currentWsEntry = wsEntry;
- break;
- }
- }
-
- String newConf = new JsonGeneratorImpl().createJsonObject(workspaceEntry).toString();
- String currnetConf = new JsonGeneratorImpl().createJsonObject(currentWsEntry).toString();
-
- isSameConfig = newConf.equals(currnetConf);
- }
- catch (JsonException e)
- {
- this.log.error("Can't get JSON object from wokrspace configuration", e);
- }
- catch (RepositoryException e)
- {
- this.log.error(e);
- }
- catch (RepositoryConfigurationException e)
- {
- this.log.error(e);
- }
-
// check if we have deal with RDBMS backup
boolean isRDBMSBackup = false;
try
@@ -1707,9 +1650,8 @@
}
JobWorkspaceRestore jobRestore =
- isSameConfig && isRDBMSBackup ? new JobExistedWorkspaceRestoreSameConfig(repoService, this, repositoryName,
- log, workspaceEntry) : new JobExistedWorkspaceRestore(repoService, this, repositoryName, log,
- workspaceEntry);
+ isRDBMSBackup ? new JobExistedWorkspaceRDBMSRestore(repoService, this, repositoryName, log,
+ workspaceEntry) : new JobExistedWorkspaceRestore(repoService, this, repositoryName, log, workspaceEntry);
restoreJobs.add(jobRestore);
if (asynchronous)
Copied: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRDBMSRestore.java (from rev 4156, jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRestoreSameConfig.java)
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRDBMSRestore.java (rev 0)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRDBMSRestore.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -0,0 +1,244 @@
+/*
+ * Copyright (C) 2003-2010 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.services.jcr.ext.backup.impl;
+
+import org.exoplatform.commons.utils.SecurityHelper;
+import org.exoplatform.services.jcr.RepositoryService;
+import org.exoplatform.services.jcr.config.RepositoryEntry;
+import org.exoplatform.services.jcr.config.WorkspaceEntry;
+import org.exoplatform.services.jcr.dataflow.DataManager;
+import org.exoplatform.services.jcr.ext.backup.BackupChainLog;
+import org.exoplatform.services.jcr.ext.backup.RepositoryBackupChainLog;
+import org.exoplatform.services.jcr.ext.backup.RepositoryRestoreExeption;
+import org.exoplatform.services.jcr.impl.backup.BackupException;
+import org.exoplatform.services.jcr.impl.backup.Backupable;
+import org.exoplatform.services.jcr.impl.backup.DataRestor;
+import org.exoplatform.services.jcr.impl.backup.JCRRestor;
+import org.exoplatform.services.jcr.impl.backup.JdbcBackupable;
+import org.exoplatform.services.jcr.impl.backup.ResumeException;
+import org.exoplatform.services.jcr.impl.backup.Suspendable;
+import org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
+import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer;
+import org.exoplatform.services.jcr.impl.util.io.FileCleanerHolder;
+
+import java.io.File;
+import java.security.PrivilegedExceptionAction;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.naming.InitialContext;
+import javax.naming.NameNotFoundException;
+import javax.sql.DataSource;
+
+/**
+ * Created by The eXo Platform SAS.
+ *
+ * Date: 24 01 2011
+ *
+ * @author <a href="mailto:anatoliy.bazko at exoplatform.com.ua">Anatoliy Bazko</a>
+ * @version $Id: JobExistedRepositoryRestoreSameConfig.java 34360 2010-11-11 11:11:11Z tolusha $
+ */
+public class JobExistedRepositoryRDBMSRestore extends JobRepositoryRestore
+{
+
+ /**
+ * JobExistedRepositoryRDBMSRestore constructor.
+ */
+ public JobExistedRepositoryRDBMSRestore(RepositoryService repoService, BackupManagerImpl backupManagerImpl,
+ RepositoryEntry repositoryEntry, Map<String, BackupChainLog> workspacesMapping,
+ RepositoryBackupChainLog backupChainLog)
+ {
+ super(repoService, backupManagerImpl, repositoryEntry, workspacesMapping, backupChainLog);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void restoreRepository() throws RepositoryRestoreExeption
+ {
+ // list of data restorers
+ List<DataRestor> dataRestorer = new ArrayList<DataRestor>();
+
+ // the list of components to resume
+ List<Suspendable> resumeComponents = new ArrayList<Suspendable>();
+
+ try
+ {
+ WorkspaceEntry wsEntry = repositoryEntry.getWorkspaceEntries().get(0);
+
+ // define one common connection for all restores and cleaners for single db case
+ Connection jdbcConn = null;
+ if (!Boolean.parseBoolean(wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.MULTIDB)))
+ {
+ String dsName = wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.SOURCE_NAME);
+
+ final DataSource ds = (DataSource)new InitialContext().lookup(dsName);
+ if (ds == null)
+ {
+ throw new NameNotFoundException("Data source " + dsName + " not found");
+ }
+
+ jdbcConn = SecurityHelper.doPrivilegedSQLExceptionAction(new PrivilegedExceptionAction<Connection>()
+ {
+ public Connection run() throws Exception
+ {
+ return ds.getConnection();
+
+ }
+ });
+ jdbcConn.setAutoCommit(false);
+ }
+
+ // suspend all components
+ for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
+ {
+ List<Suspendable> suspendableComponents =
+ repositoryService.getRepository(this.repositoryEntry.getName()).getWorkspaceContainer(wEntry.getName())
+ .getComponentInstancesOfType(Suspendable.class);
+
+ for (Suspendable component : suspendableComponents)
+ {
+ component.suspend();
+ resumeComponents.add(component);
+ }
+ }
+
+ // collect all restorers
+ for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
+ {
+ // get all backupable components
+ List<Backupable> backupable =
+ repositoryService.getRepository(this.repositoryEntry.getName()).getWorkspaceContainer(wEntry.getName())
+ .getComponentInstancesOfType(Backupable.class);
+
+ File fullBackupDir =
+ JCRRestor.getFullBackupFile(workspacesMapping.get(wEntry.getName()).getBackupConfig().getBackupDir());
+
+ for (Backupable component : backupable)
+ {
+ if (component instanceof JdbcBackupable && jdbcConn != null)
+ {
+ dataRestorer.add(((JdbcBackupable)component).getDataRestorer(fullBackupDir, jdbcConn));
+ }
+ else
+ {
+ dataRestorer.add(component.getDataRestorer(fullBackupDir));
+ }
+ }
+ }
+
+ for (DataRestor restorer : dataRestorer)
+ {
+ restorer.clean();
+ }
+
+ for (DataRestor restorer : dataRestorer)
+ {
+ restorer.restore();
+ }
+
+ for (DataRestor restorer : dataRestorer)
+ {
+ restorer.commit();
+ }
+
+ // resume components
+ for (int i = 0; i < resumeComponents.size(); i++)
+ {
+ try
+ {
+ resumeComponents.remove(i).resume();
+ }
+ catch (ResumeException e)
+ {
+ log.error("Can't resume component", e);
+ }
+ }
+
+ // incremental restore
+ for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
+ {
+ repositoryService.getRepository(this.repositoryEntry.getName()).getWorkspaceContainer(wEntry.getName())
+ .getComponentInstancesOfType(Backupable.class);
+
+ DataManager dataManager =
+ (WorkspacePersistentDataManager)repositoryService.getRepository(this.repositoryEntry.getName())
+ .getWorkspaceContainer(wEntry.getName()).getComponent(WorkspacePersistentDataManager.class);
+
+ FileCleanerHolder fileCleanHolder =
+ (FileCleanerHolder)repositoryService.getRepository(this.repositoryEntry.getName())
+ .getWorkspaceContainer(wEntry.getName()).getComponent(FileCleanerHolder.class);
+
+ File storageDir =
+ JCRRestor.getFullBackupFile(workspacesMapping.get(wEntry.getName()).getBackupConfig().getBackupDir());
+
+ JCRRestor restorer = new JCRRestor(dataManager, fileCleanHolder.getFileCleaner());
+ for (File incrBackupFile : JCRRestor.getIncrementalFiles(storageDir))
+ {
+ restorer.incrementalRestore(incrBackupFile);
+ }
+ }
+ }
+ catch (Throwable t)
+ {
+ // rollback
+ for (DataRestor restorer : dataRestorer)
+ {
+ try
+ {
+ restorer.rollback();
+ }
+ catch (BackupException e)
+ {
+ log.error("Can't rollback changes", e);
+ }
+ }
+
+ throw new RepositoryRestoreExeption("Repository " + repositoryEntry.getName() + " was not restored", t);
+ }
+ finally
+ {
+ // close
+ for (DataRestor restorer : dataRestorer)
+ {
+ try
+ {
+ restorer.close();
+ }
+ catch (BackupException e)
+ {
+ log.error("Can't close restorer", e);
+ }
+ }
+
+ for (Suspendable component : resumeComponents)
+ {
+ try
+ {
+ component.resume();
+ }
+ catch (ResumeException e)
+ {
+ log.error("Can't resume component " + component.getClass(), e);
+ }
+ }
+ }
+ }
+}
Deleted: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRestoreSameConfig.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRestoreSameConfig.java 2011-03-22 16:14:38 UTC (rev 4163)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRestoreSameConfig.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -1,244 +0,0 @@
-/*
- * Copyright (C) 2003-2010 eXo Platform SAS.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see<http://www.gnu.org/licenses/>.
- */
-package org.exoplatform.services.jcr.ext.backup.impl;
-
-import org.exoplatform.commons.utils.SecurityHelper;
-import org.exoplatform.services.jcr.RepositoryService;
-import org.exoplatform.services.jcr.config.RepositoryEntry;
-import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.dataflow.DataManager;
-import org.exoplatform.services.jcr.ext.backup.BackupChainLog;
-import org.exoplatform.services.jcr.ext.backup.RepositoryBackupChainLog;
-import org.exoplatform.services.jcr.ext.backup.RepositoryRestoreExeption;
-import org.exoplatform.services.jcr.impl.backup.BackupException;
-import org.exoplatform.services.jcr.impl.backup.Backupable;
-import org.exoplatform.services.jcr.impl.backup.DataRestor;
-import org.exoplatform.services.jcr.impl.backup.JCRRestor;
-import org.exoplatform.services.jcr.impl.backup.JdbcBackupable;
-import org.exoplatform.services.jcr.impl.backup.ResumeException;
-import org.exoplatform.services.jcr.impl.backup.Suspendable;
-import org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
-import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer;
-import org.exoplatform.services.jcr.impl.util.io.FileCleanerHolder;
-
-import java.io.File;
-import java.security.PrivilegedExceptionAction;
-import java.sql.Connection;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.naming.InitialContext;
-import javax.naming.NameNotFoundException;
-import javax.sql.DataSource;
-
-/**
- * Created by The eXo Platform SAS.
- *
- * Date: 24 01 2011
- *
- * @author <a href="mailto:anatoliy.bazko at exoplatform.com.ua">Anatoliy Bazko</a>
- * @version $Id: JobExistedRepositoryRestoreSameConfig.java 34360 2010-11-11 11:11:11Z tolusha $
- */
-public class JobExistedRepositoryRestoreSameConfig extends JobRepositoryRestore
-{
-
- /**
- * JobExistedRepositoryRestoreSameConfig constructor.
- */
- public JobExistedRepositoryRestoreSameConfig(RepositoryService repoService, BackupManagerImpl backupManagerImpl,
- RepositoryEntry repositoryEntry, Map<String, BackupChainLog> workspacesMapping,
- RepositoryBackupChainLog backupChainLog)
- {
- super(repoService, backupManagerImpl, repositoryEntry, workspacesMapping, backupChainLog);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected void restoreRepository() throws RepositoryRestoreExeption
- {
- // list of data restorers
- List<DataRestor> dataRestorer = new ArrayList<DataRestor>();
-
- // the list of components to resume
- List<Suspendable> resumeComponents = new ArrayList<Suspendable>();
-
- try
- {
- WorkspaceEntry wsEntry = repositoryEntry.getWorkspaceEntries().get(0);
-
- // define one common connection for all restores and cleaners for single db case
- Connection jdbcConn = null;
- if (!Boolean.parseBoolean(wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.MULTIDB)))
- {
- String dsName = wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.SOURCE_NAME);
-
- final DataSource ds = (DataSource)new InitialContext().lookup(dsName);
- if (ds == null)
- {
- throw new NameNotFoundException("Data source " + dsName + " not found");
- }
-
- jdbcConn = SecurityHelper.doPrivilegedSQLExceptionAction(new PrivilegedExceptionAction<Connection>()
- {
- public Connection run() throws Exception
- {
- return ds.getConnection();
-
- }
- });
- jdbcConn.setAutoCommit(false);
- }
-
- // suspend all components
- for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
- {
- List<Suspendable> suspendableComponents =
- repositoryService.getRepository(this.repositoryEntry.getName()).getWorkspaceContainer(wEntry.getName())
- .getComponentInstancesOfType(Suspendable.class);
-
- for (Suspendable component : suspendableComponents)
- {
- component.suspend();
- resumeComponents.add(component);
- }
- }
-
- // collect all restorers
- for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
- {
- // get all backupable components
- List<Backupable> backupable =
- repositoryService.getRepository(this.repositoryEntry.getName()).getWorkspaceContainer(wEntry.getName())
- .getComponentInstancesOfType(Backupable.class);
-
- File fullBackupDir =
- JCRRestor.getFullBackupFile(workspacesMapping.get(wEntry.getName()).getBackupConfig().getBackupDir());
-
- for (Backupable component : backupable)
- {
- if (component instanceof JdbcBackupable && jdbcConn != null)
- {
- dataRestorer.add(((JdbcBackupable)component).getDataRestorer(fullBackupDir, jdbcConn));
- }
- else
- {
- dataRestorer.add(component.getDataRestorer(fullBackupDir));
- }
- }
- }
-
- for (DataRestor restorer : dataRestorer)
- {
- restorer.clean();
- }
-
- for (DataRestor restorer : dataRestorer)
- {
- restorer.restore();
- }
-
- for (DataRestor restorer : dataRestorer)
- {
- restorer.commit();
- }
-
- // resume components
- for (int i = 0; i < resumeComponents.size(); i++)
- {
- try
- {
- resumeComponents.remove(i).resume();
- }
- catch (ResumeException e)
- {
- log.error("Can't resume component", e);
- }
- }
-
- // incremental restore
- for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
- {
- repositoryService.getRepository(this.repositoryEntry.getName()).getWorkspaceContainer(wEntry.getName())
- .getComponentInstancesOfType(Backupable.class);
-
- DataManager dataManager =
- (WorkspacePersistentDataManager)repositoryService.getRepository(this.repositoryEntry.getName())
- .getWorkspaceContainer(wEntry.getName()).getComponent(WorkspacePersistentDataManager.class);
-
- FileCleanerHolder fileCleanHolder =
- (FileCleanerHolder)repositoryService.getRepository(this.repositoryEntry.getName())
- .getWorkspaceContainer(wEntry.getName()).getComponent(FileCleanerHolder.class);
-
- File storageDir =
- JCRRestor.getFullBackupFile(workspacesMapping.get(wEntry.getName()).getBackupConfig().getBackupDir());
-
- JCRRestor restorer = new JCRRestor(dataManager, fileCleanHolder.getFileCleaner());
- for (File incrBackupFile : JCRRestor.getIncrementalFiles(storageDir))
- {
- restorer.incrementalRestore(incrBackupFile);
- }
- }
- }
- catch (Throwable t)
- {
- // rollback
- for (DataRestor restorer : dataRestorer)
- {
- try
- {
- restorer.rollback();
- }
- catch (BackupException e)
- {
- log.error("Can't rollback changes", e);
- }
- }
-
- throw new RepositoryRestoreExeption("Repository " + repositoryEntry.getName() + " was not restored", t);
- }
- finally
- {
- // close
- for (DataRestor restorer : dataRestorer)
- {
- try
- {
- restorer.close();
- }
- catch (BackupException e)
- {
- log.error("Can't close restorer", e);
- }
- }
-
- for (Suspendable component : resumeComponents)
- {
- try
- {
- component.resume();
- }
- catch (ResumeException e)
- {
- log.error("Can't resume component " + component.getClass(), e);
- }
- }
- }
- }
-}
Copied: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRDBMSRestore.java (from rev 4156, jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRestoreSameConfig.java)
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRDBMSRestore.java (rev 0)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRDBMSRestore.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2003-2010 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.services.jcr.ext.backup.impl;
+
+import org.exoplatform.services.jcr.RepositoryService;
+import org.exoplatform.services.jcr.config.WorkspaceEntry;
+import org.exoplatform.services.jcr.dataflow.DataManager;
+import org.exoplatform.services.jcr.ext.backup.BackupChainLog;
+import org.exoplatform.services.jcr.ext.backup.BackupManager;
+import org.exoplatform.services.jcr.ext.backup.WorkspaceRestoreException;
+import org.exoplatform.services.jcr.impl.backup.BackupException;
+import org.exoplatform.services.jcr.impl.backup.Backupable;
+import org.exoplatform.services.jcr.impl.backup.DataRestor;
+import org.exoplatform.services.jcr.impl.backup.JCRRestor;
+import org.exoplatform.services.jcr.impl.backup.ResumeException;
+import org.exoplatform.services.jcr.impl.backup.Suspendable;
+import org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
+import org.exoplatform.services.jcr.impl.util.io.FileCleanerHolder;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by The eXo Platform SAS.
+ *
+ * Date: 24 01 2011
+ *
+ * @author <a href="mailto:anatoliy.bazko at exoplatform.com.ua">Anatoliy Bazko</a>
+ * @version $Id: JobExistedWorkspaceRestoreSameConfig.java 34360 2010-11-11 11:11:11Z tolusha $
+ */
+public class JobExistedWorkspaceRDBMSRestore extends JobWorkspaceRestore
+{
+ /**
+ * The logger.
+ */
+ private static Log log = ExoLogger.getLogger("exo.jcr.component.ext.JobExistedWorkspaceRDBMSRestore");
+
+ /**
+ * JobExistedWorkspaceRestore JobExistedWorkspaceRDBMSRestore.
+ */
+ public JobExistedWorkspaceRDBMSRestore(RepositoryService repositoryService, BackupManager backupManager,
+ String repositoryName, BackupChainLog log, WorkspaceEntry wEntry)
+ {
+ super(repositoryService, backupManager, repositoryName, log, wEntry);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void restore() throws WorkspaceRestoreException
+ {
+ // list of data restorers
+ List<DataRestor> dataRestorer = new ArrayList<DataRestor>();
+
+ // the list of components to resume
+ List<Suspendable> resumeComponents = new ArrayList<Suspendable>();
+
+ try
+ {
+ // suspend all components
+ List<Suspendable> suspendableComponents =
+ repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
+ .getComponentInstancesOfType(Suspendable.class);
+
+ for (Suspendable component : suspendableComponents)
+ {
+ component.suspend();
+ resumeComponents.add(component);
+ }
+
+ // get all restorers
+ List<Backupable> backupable =
+ repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
+ .getComponentInstancesOfType(Backupable.class);
+
+ File storageDir = backupChainLog.getBackupConfig().getBackupDir();
+
+ for (Backupable component : backupable)
+ {
+ File fullBackupDir = JCRRestor.getFullBackupFile(storageDir);
+ dataRestorer.add(component.getDataRestorer(fullBackupDir));
+ }
+
+ for (DataRestor restorer : dataRestorer)
+ {
+ restorer.clean();
+ }
+
+ for (DataRestor restorer : dataRestorer)
+ {
+ restorer.restore();
+ }
+
+ for (DataRestor restorer : dataRestorer)
+ {
+ restorer.commit();
+ }
+
+ // resume components
+ for (int i = 0; i < resumeComponents.size(); i++)
+ {
+ try
+ {
+ resumeComponents.remove(i).resume();
+ }
+ catch (ResumeException e)
+ {
+ log.error("Can't resume component", e);
+ }
+ }
+
+ // incremental restore
+ DataManager dataManager =
+ (WorkspacePersistentDataManager)repositoryService.getRepository(repositoryName)
+ .getWorkspaceContainer(wEntry.getName()).getComponent(WorkspacePersistentDataManager.class);
+
+ FileCleanerHolder fileCleanHolder =
+ (FileCleanerHolder)repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
+ .getComponent(FileCleanerHolder.class);
+
+ JCRRestor restorer = new JCRRestor(dataManager, fileCleanHolder.getFileCleaner());
+ for (File incrBackupFile : JCRRestor.getIncrementalFiles(storageDir))
+ {
+ restorer.incrementalRestore(incrBackupFile);
+ }
+ }
+ catch (Throwable t)
+ {
+ // rollback
+ for (DataRestor restorer : dataRestorer)
+ {
+ try
+ {
+ restorer.rollback();
+ }
+ catch (BackupException e)
+ {
+ log.error("Can't rollback changes", e);
+ }
+ }
+
+ throw new WorkspaceRestoreException("Workspace " + wEntry.getName() + " was not restored", t);
+ }
+ finally
+ {
+ // close
+ for (DataRestor restorer : dataRestorer)
+ {
+ try
+ {
+ restorer.close();
+ }
+ catch (BackupException e)
+ {
+ log.error("Can't close restorer", e);
+ }
+ }
+
+ for (Suspendable component : resumeComponents)
+ {
+ try
+ {
+ component.resume();
+ }
+ catch (ResumeException e)
+ {
+ log.error("Can't resume component", e);
+ }
+ }
+ }
+ }
+}
Deleted: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRestoreSameConfig.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRestoreSameConfig.java 2011-03-22 16:14:38 UTC (rev 4163)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRestoreSameConfig.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -1,190 +0,0 @@
-/*
- * Copyright (C) 2003-2010 eXo Platform SAS.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see<http://www.gnu.org/licenses/>.
- */
-package org.exoplatform.services.jcr.ext.backup.impl;
-
-import org.exoplatform.services.jcr.RepositoryService;
-import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.dataflow.DataManager;
-import org.exoplatform.services.jcr.ext.backup.BackupChainLog;
-import org.exoplatform.services.jcr.ext.backup.BackupManager;
-import org.exoplatform.services.jcr.ext.backup.WorkspaceRestoreException;
-import org.exoplatform.services.jcr.impl.backup.BackupException;
-import org.exoplatform.services.jcr.impl.backup.Backupable;
-import org.exoplatform.services.jcr.impl.backup.DataRestor;
-import org.exoplatform.services.jcr.impl.backup.JCRRestor;
-import org.exoplatform.services.jcr.impl.backup.ResumeException;
-import org.exoplatform.services.jcr.impl.backup.Suspendable;
-import org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
-import org.exoplatform.services.jcr.impl.util.io.FileCleanerHolder;
-import org.exoplatform.services.log.ExoLogger;
-import org.exoplatform.services.log.Log;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by The eXo Platform SAS.
- *
- * Date: 24 01 2011
- *
- * @author <a href="mailto:anatoliy.bazko at exoplatform.com.ua">Anatoliy Bazko</a>
- * @version $Id: JobExistedWorkspaceRestoreSameConfig.java 34360 2010-11-11 11:11:11Z tolusha $
- */
-public class JobExistedWorkspaceRestoreSameConfig extends JobWorkspaceRestore
-{
- /**
- * The logger.
- */
- private static Log log = ExoLogger.getLogger("exo.jcr.component.ext.JobExistedWorkspaceRestoreSameConfig");
-
- /**
- * JobExistedWorkspaceRestore constructor.
- */
- public JobExistedWorkspaceRestoreSameConfig(RepositoryService repositoryService, BackupManager backupManager,
- String repositoryName, BackupChainLog log, WorkspaceEntry wEntry)
- {
- super(repositoryService, backupManager, repositoryName, log, wEntry);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected void restore() throws WorkspaceRestoreException
- {
- // list of data restorers
- List<DataRestor> dataRestorer = new ArrayList<DataRestor>();
-
- // the list of components to resume
- List<Suspendable> resumeComponents = new ArrayList<Suspendable>();
-
- try
- {
- // suspend all components
- List<Suspendable> suspendableComponents =
- repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
- .getComponentInstancesOfType(Suspendable.class);
-
- for (Suspendable component : suspendableComponents)
- {
- component.suspend();
- resumeComponents.add(component);
- }
-
- // get all restorers
- List<Backupable> backupable =
- repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
- .getComponentInstancesOfType(Backupable.class);
-
- File storageDir = backupChainLog.getBackupConfig().getBackupDir();
-
- for (Backupable component : backupable)
- {
- File fullBackupDir = JCRRestor.getFullBackupFile(storageDir);
- dataRestorer.add(component.getDataRestorer(fullBackupDir));
- }
-
- for (DataRestor restorer : dataRestorer)
- {
- restorer.clean();
- }
-
- for (DataRestor restorer : dataRestorer)
- {
- restorer.restore();
- }
-
- for (DataRestor restorer : dataRestorer)
- {
- restorer.commit();
- }
-
- // resume components
- for (int i = 0; i < resumeComponents.size(); i++)
- {
- try
- {
- resumeComponents.remove(i).resume();
- }
- catch (ResumeException e)
- {
- log.error("Can't resume component", e);
- }
- }
-
- // incremental restore
- DataManager dataManager =
- (WorkspacePersistentDataManager)repositoryService.getRepository(repositoryName)
- .getWorkspaceContainer(wEntry.getName()).getComponent(WorkspacePersistentDataManager.class);
-
- FileCleanerHolder fileCleanHolder =
- (FileCleanerHolder)repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
- .getComponent(FileCleanerHolder.class);
-
- JCRRestor restorer = new JCRRestor(dataManager, fileCleanHolder.getFileCleaner());
- for (File incrBackupFile : JCRRestor.getIncrementalFiles(storageDir))
- {
- restorer.incrementalRestore(incrBackupFile);
- }
- }
- catch (Throwable t)
- {
- // rollback
- for (DataRestor restorer : dataRestorer)
- {
- try
- {
- restorer.rollback();
- }
- catch (BackupException e)
- {
- log.error("Can't rollback changes", e);
- }
- }
-
- throw new WorkspaceRestoreException("Workspace " + wEntry.getName() + " was not restored", t);
- }
- finally
- {
- // close
- for (DataRestor restorer : dataRestorer)
- {
- try
- {
- restorer.close();
- }
- catch (BackupException e)
- {
- log.error("Can't close restorer", e);
- }
- }
-
- for (Suspendable component : resumeComponents)
- {
- try
- {
- component.resume();
- }
- catch (ResumeException e)
- {
- log.error("Can't resume component", e);
- }
- }
- }
- }
-}
More information about the exo-jcr-commits
mailing list