[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