[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