[exo-jcr-commits] exo-jcr SVN: r4591 - in jcr/trunk: exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl and 4 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Jul 5 03:42:37 EDT 2011


Author: tolusha
Date: 2011-07-05 03:42:37 -0400 (Tue, 05 Jul 2011)
New Revision: 4591

Modified:
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryServiceImpl.java
   jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositoryRestore.java
   jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/RestRepositoryService.java
   jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/creation/RepositoryCreationService.java
   jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/creation/RepositoryCreationServiceImpl.java
   jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupTestCase.java
   jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/repository/creation/TestRepositoryCreationService.java
Log:
EXOJCR-1420: Remove repository in Standalone mode

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryServiceImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryServiceImpl.java	2011-07-05 06:23:08 UTC (rev 4590)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryServiceImpl.java	2011-07-05 07:42:37 UTC (rev 4591)
@@ -46,8 +46,8 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.StringTokenizer;
 import java.util.Map.Entry;
+import java.util.StringTokenizer;
 
 import javax.jcr.RepositoryException;
 
@@ -119,14 +119,6 @@
    }
 
    /**
-    * {@inheritDoc}
-    */
-   public boolean canRemoveRepository(String name) throws RepositoryException
-   {
-      return canRemoveRepository(name, false);
-   }
-
-   /**
     * Create repository. <br>
     * Init worksapces for initial start or them load from persistence. <br>
     * Add namespaces and nodetypes from service plugins.
@@ -232,14 +224,6 @@
       return (ManageableRepository)repositoryContainer.getComponentInstanceOfType(ManageableRepository.class);
    }
 
-   /**
-    * {@inheritDoc}
-    */
-   public void removeRepository(String name) throws RepositoryException
-   {
-      removeRepository(name, false);
-   }
-
    public void setCurrentRepositoryName(String repositoryName) throws RepositoryConfigurationException
    {
       // Need privileges to manage repository.
@@ -312,17 +296,6 @@
       managerStartChanges.cleanup();
    }
 
-   /**
-    * Remove default repository.
-    * 
-    * @throws RepositoryException
-    *          if any Exception occurred during removing
-    */
-   public void removeDefaultRepository() throws RepositoryException
-   {
-      removeRepository(config.getDefaultRepositoryName(), true);
-   }
-
    private void init(ExoContainer container) throws RepositoryConfigurationException, RepositoryException
    {
       this.parentContainer = container;
@@ -396,16 +369,9 @@
    }
 
    /**
-    * Remove repository with specific name.
-    * 
-    * @param name
-    *          repository name
-    * @param allowRemoveDefaultRepository
-    *          allow to remove default repository
-    * @throws RepositoryException
-    *          if any Exception occurred
+    * {@inheritDoc}
     */
-   private void removeRepository(String name, boolean allowRemoveDefaultRepository) throws RepositoryException
+   public void removeRepository(String name) throws RepositoryException
    {
       // Need privileges to manage repository.
       SecurityManager security = System.getSecurityManager();
@@ -414,7 +380,7 @@
          security.checkPermission(JCRRuntimePermissions.MANAGE_REPOSITORY_PERMISSION);
       }
 
-      if (!canRemoveRepository(name, allowRemoveDefaultRepository))
+      if (!canRemoveRepository(name))
          throw new RepositoryException("Repository " + name + " in use. If you want to "
             + " remove repository close all open sessions");
 
@@ -458,24 +424,10 @@
    }
 
    /**
-    * Indicates if repository with specific name can be removed.
-    * 
-    * @param name
-    *          repository name
-    * @param allowRemoveDefaultRepository
-    *          allow to remove default repository 
-    * @return
-    *          true if repository can be removed or false in other case
-    * @throws RepositoryException
-    *          if any Exception occurred
+    * {@inheritDoc}
     */
-   private boolean canRemoveRepository(String name, boolean allowRemoveDefaultRepository) throws RepositoryException
+   public boolean canRemoveRepository(String name) throws RepositoryException
    {
-      if (!allowRemoveDefaultRepository && name.equals(config.getDefaultRepositoryName()))
-      {
-         return false;
-      }
-
       RepositoryImpl repo = (RepositoryImpl)getRepository(name);
       try
       {

Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositoryRestore.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositoryRestore.java	2011-07-05 06:23:08 UTC (rev 4590)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositoryRestore.java	2011-07-05 07:42:37 UTC (rev 4591)
@@ -25,7 +25,6 @@
 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.RepositoryServiceImpl;
 import org.exoplatform.services.jcr.impl.backup.Backupable;
 import org.exoplatform.services.jcr.impl.core.SessionRegistry;
 
@@ -101,14 +100,7 @@
          }
 
          //remove repository
-         if (isDefault)
-         {
-            ((RepositoryServiceImpl)repositoryService).removeDefaultRepository();
-         }
-         else
-         {
-            repositoryService.removeRepository(repositoryEntry.getName());
-         }
+         repositoryService.removeRepository(repositoryEntry.getName());
 
          // clean
          for (Backupable component : backupable)

Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/RestRepositoryService.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/RestRepositoryService.java	2011-07-05 06:23:08 UTC (rev 4590)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/RestRepositoryService.java	2011-07-05 07:42:37 UTC (rev 4591)
@@ -18,6 +18,19 @@
  */
 package org.exoplatform.services.jcr.ext.repository;
 
+import org.exoplatform.services.jcr.RepositoryService;
+import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
+import org.exoplatform.services.jcr.config.RepositoryEntry;
+import org.exoplatform.services.jcr.config.RepositoryServiceConfiguration;
+import org.exoplatform.services.jcr.config.WorkspaceEntry;
+import org.exoplatform.services.jcr.core.ManageableRepository;
+import org.exoplatform.services.jcr.core.WorkspaceContainerFacade;
+import org.exoplatform.services.jcr.impl.core.RepositoryImpl;
+import org.exoplatform.services.jcr.impl.core.SessionRegistry;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+import org.exoplatform.services.rest.resource.ResourceContainer;
+
 import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
@@ -34,23 +47,9 @@
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriInfo;
 import javax.ws.rs.core.Response.Status;
+import javax.ws.rs.core.UriInfo;
 
-import org.exoplatform.services.jcr.RepositoryService;
-import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
-import org.exoplatform.services.jcr.config.RepositoryEntry;
-import org.exoplatform.services.jcr.config.RepositoryServiceConfiguration;
-import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.core.ManageableRepository;
-import org.exoplatform.services.jcr.core.WorkspaceContainerFacade;
-import org.exoplatform.services.jcr.impl.RepositoryServiceImpl;
-import org.exoplatform.services.jcr.impl.core.RepositoryImpl;
-import org.exoplatform.services.jcr.impl.core.SessionRegistry;
-import org.exoplatform.services.log.ExoLogger;
-import org.exoplatform.services.log.Log;
-import org.exoplatform.services.rest.resource.ResourceContainer;
-
 /**
  * Created by The eXo Platform SAS.
  * 
@@ -390,14 +389,7 @@
             }
          }
 
-         if (repositoryService.getDefaultRepository().getConfiguration().getName().equals(repositoryName))
-         {
-            ((RepositoryServiceImpl) repositoryService).removeDefaultRepository();
-         }
-         else
-         {
-            repositoryService.removeRepository(repositoryName);
-         }
+         repositoryService.removeRepository(repositoryName);
          repositoryService.getConfig().retain(); // save configuration to persistence (file or persister) 
          return Response.ok().build();
       }

Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/creation/RepositoryCreationService.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/creation/RepositoryCreationService.java	2011-07-05 06:23:08 UTC (rev 4590)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/creation/RepositoryCreationService.java	2011-07-05 07:42:37 UTC (rev 4591)
@@ -96,4 +96,13 @@
     */
    void createRepository(String backupId, RepositoryEntry rEntry, String rToken)
       throws RepositoryConfigurationException, RepositoryCreationException;
+
+   /**
+    * Remove previously created repository. 
+    * 
+    * @param repositoryName - the repository name to delete
+    * @throws RepositoryCreationServiceException
+    *          if some exception occurred during repository removing occurred
+    */
+   void removeRepository(String repositoryName) throws RepositoryCreationException;
 }

Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/creation/RepositoryCreationServiceImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/creation/RepositoryCreationServiceImpl.java	2011-07-05 06:23:08 UTC (rev 4590)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/creation/RepositoryCreationServiceImpl.java	2011-07-05 07:42:37 UTC (rev 4591)
@@ -27,11 +27,14 @@
 import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
 import org.exoplatform.services.jcr.config.RepositoryEntry;
 import org.exoplatform.services.jcr.config.WorkspaceEntry;
+import org.exoplatform.services.jcr.core.ManageableRepository;
+import org.exoplatform.services.jcr.core.WorkspaceContainerFacade;
 import org.exoplatform.services.jcr.ext.backup.BackupConfigurationException;
 import org.exoplatform.services.jcr.ext.backup.BackupManager;
 import org.exoplatform.services.jcr.ext.backup.BackupOperationException;
 import org.exoplatform.services.jcr.ext.backup.RepositoryBackupChainLog;
 import org.exoplatform.services.jcr.impl.Constants;
+import org.exoplatform.services.jcr.impl.core.SessionRegistry;
 import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer;
 import org.exoplatform.services.jcr.util.IdGenerator;
 import org.exoplatform.services.log.ExoLogger;
@@ -377,24 +380,6 @@
    {
       if (rpcService != null)
       {
-         // check does repository already created
-         try
-         {
-            if (repositoryService.getRepository(repositoryName) != null)
-            {
-               throw new RepositoryCreationException("Repository " + repositoryName + " already exists.");
-            }
-         }
-         catch (RepositoryConfigurationException e)
-         {
-            throw new RepositoryCreationException("Can not check does repository " + repositoryName + " exists: "
-               + e.getMessage(), e);
-         }
-         catch (RepositoryException e)
-         {
-            //ok - repository does not exists
-         }
-
          // reserve RepositoryName at coordinator-node
          try
          {
@@ -718,6 +703,49 @@
       }
    }
 
+   /**
+    * {@inheritDoc}
+    */
+   public void removeRepository(String repositoryName) throws RepositoryCreationException
+   {
+      removeRepositoryLocally(repositoryName);
+   }
+
+   /**
+    * Remove repository locally.
+    * 
+    * @param repositoryName
+    *          the repository name
+    * @throws RepositoryCreationException
+    */
+   protected void removeRepositoryLocally(String repositoryName) throws RepositoryCreationException
+   {
+      try
+      {
+         // close all opened sessions
+         ManageableRepository repositorty = repositoryService.getRepository(repositoryName);
+         for (String workspaceName : repositorty.getWorkspaceNames())
+         {
+            WorkspaceContainerFacade wc = repositorty.getWorkspaceContainer(workspaceName);
+            SessionRegistry sessionRegistry = (SessionRegistry)wc.getComponent(SessionRegistry.class);
+
+            sessionRegistry.closeSessions(workspaceName);
+         }
+
+         // remove repository from configuration
+         repositoryService.removeRepository(repositoryName);
+         repositoryService.getConfig().retain();
+      }
+      catch (RepositoryException e)
+      {
+         throw new RepositoryCreationException("Can't remove repository", e);
+      }
+      catch (RepositoryConfigurationException e)
+      {
+         throw new RepositoryCreationException("Can't remove repository", e);
+      }
+   }
+
    private DBCreator getDBCreator(DBCreationProperties creationProps) throws ConfigurationException
    {
       if (creationProps == null)

Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupTestCase.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupTestCase.java	2011-07-05 06:23:08 UTC (rev 4590)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupTestCase.java	2011-07-05 07:42:37 UTC (rev 4591)
@@ -35,7 +35,6 @@
 import org.exoplatform.services.jcr.ext.backup.impl.BackupManagerImpl;
 import org.exoplatform.services.jcr.ext.backup.impl.JobRepositoryRestore;
 import org.exoplatform.services.jcr.ext.backup.impl.JobWorkspaceRestore;
-import org.exoplatform.services.jcr.impl.RepositoryServiceImpl;
 import org.exoplatform.services.jcr.impl.clean.rdbms.DBCleanService;
 import org.exoplatform.services.jcr.impl.core.RepositoryImpl;
 import org.exoplatform.services.jcr.impl.core.SessionImpl;
@@ -557,9 +556,6 @@
          throw new RepositoryRestoreExeption("Current repository configuration " + repositoryName + " did not found");
       }
 
-      boolean isDefault =
-               repositoryService.getDefaultRepository().getConfiguration().getName().equals(repositoryEntry.getName());
-
       //Create local copy of WorkspaceEntry for all workspaces
       ArrayList<WorkspaceEntry> workspaceList = new ArrayList<WorkspaceEntry>();
       workspaceList.addAll(repositoryEntry.getWorkspaceEntries());
@@ -574,14 +570,7 @@
          repositoryService.getRepository(repositoryName).getConfiguration().getSystemWorkspaceName();
 
       //remove repository
-      if (isDefault)
-      {
-         ((RepositoryServiceImpl)repositoryService).removeDefaultRepository();
-      }
-      else
-      {
-         repositoryService.removeRepository(repositoryEntry.getName());
-      }
+      repositoryService.removeRepository(repositoryEntry.getName());
 
       // clean data
       for (WorkspaceEntry wEntry : workspaceList)

Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/repository/creation/TestRepositoryCreationService.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/repository/creation/TestRepositoryCreationService.java	2011-07-05 06:23:08 UTC (rev 4590)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/repository/creation/TestRepositoryCreationService.java	2011-07-05 07:42:37 UTC (rev 4591)
@@ -32,6 +32,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.jcr.RepositoryException;
+
 /**
  * Created by The eXo Platform SAS.
  * 
@@ -93,6 +95,19 @@
       //check repositoryConfiguration
       RepositoryService repoService = (RepositoryService)this.container.getComponentInstance(RepositoryService.class);
       assertNotNull(repoService.getConfig().getRepositoryConfiguration(tenantName));
+
+      // remove repository
+      creatorService.removeRepository(tenantName);
+
+      try
+      {
+         repoService.getRepository(tenantName);
+         fail("Exception should be thrown");
+      }
+      catch (RepositoryException e)
+      {
+         // expected behavior, repository should be missing 
+      }
    }
 
    public void testCreateRepositorySingleDB() throws Exception
@@ -147,6 +162,19 @@
       //check repositoryConfiguration
       RepositoryService repoService = (RepositoryService)this.container.getComponentInstance(RepositoryService.class);
       assertNotNull(repoService.getConfig().getRepositoryConfiguration(tenantName));
+
+      // remove repository 
+      creatorService.removeRepository(tenantName);
+
+      try
+      {
+         repoService.getRepository(tenantName);
+         fail("Exception should be thrown");
+      }
+      catch (RepositoryException e)
+      {
+         // expected behavior, repository should be missing 
+      }
    }
 
    public void testCreateRepositorySingleDBWithSpecificCreationProps() throws Exception
@@ -210,6 +238,19 @@
       //check repositoryConfiguration
       RepositoryService repoService = (RepositoryService)this.container.getComponentInstance(RepositoryService.class);
       assertNotNull(repoService.getConfig().getRepositoryConfiguration(tenantName));
+
+      // remove repository
+      creatorService.removeRepository(tenantName);
+
+      try
+      {
+         repoService.getRepository(tenantName);
+         fail("Exception should be thrown");
+      }
+      catch (RepositoryException e)
+      {
+         // expected behavior, repository should be missing 
+      }
    }
 
    public void testReserveRepositoryNameException() throws Exception



More information about the exo-jcr-commits mailing list