[exo-jcr-commits] exo-jcr SVN: r4599 - in jcr/trunk: exo.jcr.docs/exo.jcr.docs.developer/en/src/main/docbook/en-US/modules/jcr and 1 other directory.
do-not-reply at jboss.org
do-not-reply at jboss.org
Tue Jul 5 09:49:29 EDT 2011
Author: tolusha
Date: 2011-07-05 09:49:29 -0400 (Tue, 05 Jul 2011)
New Revision: 4599
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/RepositoryCreationServiceImpl.java
jcr/trunk/exo.jcr.docs/exo.jcr.docs.developer/en/src/main/docbook/en-US/modules/jcr/repository-creation-service.xml
Log:
EXOJCR-1396: check is repository in use on all cluster nodes before removing
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 12:42:16 UTC (rev 4598)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/creation/RepositoryCreationService.java 2011-07-05 13:49:29 UTC (rev 4599)
@@ -101,10 +101,9 @@
* Remove previously created repository.
*
* @param repositoryName - the repository name to delete
- * @param forceCloseSessions - indicates if need to close sessions before repository removing, if
- * sessions are opened is it not possbile to remove repository and exception will be thrown
+ * @param forceRemove - force close all opened sessions
* @throws RepositoryCreationServiceException
* if some exception occurred during repository removing occurred
*/
- void removeRepository(String repositoryName, boolean forceCloseSessions) throws RepositoryCreationException;
+ void removeRepository(String repositoryName, boolean forceRemove) 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 12:42:16 UTC (rev 4598)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/repository/creation/RepositoryCreationServiceImpl.java 2011-07-05 13:49:29 UTC (rev 4599)
@@ -124,6 +124,8 @@
private RemoteCommand removeRepository;
+ private RemoteCommand canRemoveRepository;
+
/**
* Constructor RepositoryCreationServiceImpl.
*/
@@ -136,7 +138,7 @@
/**
* Constructor RepositoryCreationServiceImpl.
*/
- public RepositoryCreationServiceImpl(RepositoryService repositoryService, BackupManager backupManager,
+ public RepositoryCreationServiceImpl(final RepositoryService repositoryService, BackupManager backupManager,
ExoContainerContext context, InitialContextInitializer initialContextInitializer, final RPCService rpcService)
{
this.repositoryService = repositoryService;
@@ -231,13 +233,27 @@
public Serializable execute(Serializable[] args) throws Throwable
{
String repositoryName = (String)args[0];
- boolean forceCloseSessions = (Boolean)args[1];
- removeRepositoryLocally(repositoryName, forceCloseSessions);
+ removeRepositoryLocally(repositoryName);
return null;
}
});
+
+ canRemoveRepository = rpcService.registerCommand(new RemoteCommand()
+ {
+ public String getId()
+ {
+ return "org.exoplatform.services.jcr.ext.repository.creation.RepositoryCreationServiceImpl-checkRepositoryInUse";
+ }
+
+ public Serializable execute(Serializable[] args) throws Throwable
+ {
+ String repositoryName = (String)args[0];
+
+ return new Boolean(repositoryService.canRemoveRepository(repositoryName));
+ }
+ });
}
else
{
@@ -729,21 +745,49 @@
this.rpcService.unregisterCommand(createRepository);
this.rpcService.unregisterCommand(startRepository);
this.rpcService.unregisterCommand(removeRepository);
+ this.rpcService.unregisterCommand(canRemoveRepository);
}
}
/**
* {@inheritDoc}
*/
- public void removeRepository(String repositoryName, boolean forceCloseSessions) throws RepositoryCreationException
+ public void removeRepository(String repositoryName, boolean forceRemove) throws RepositoryCreationException
{
if (rpcService != null)
{
try
{
- List<Object> results =
- rpcService.executeCommandOnAllNodes(removeRepository, true, repositoryName, forceCloseSessions);
+ if (!forceRemove)
+ {
+ List<Object> results = rpcService.executeCommandOnAllNodes(canRemoveRepository, true, repositoryName);
+ for (Object result : results)
+ {
+ if (result != null)
+ {
+ if (result instanceof Throwable)
+ {
+ throw new RepositoryCreationException("It is not possible to check is repository "
+ + repositoryName + " in usage or not", (Throwable)result);
+ }
+ else if (result instanceof Boolean)
+ {
+ if (!(Boolean)result)
+ {
+ throw new RepositoryCreationException("Can't remove repository " + repositoryName
+ + ". The repository in use.");
+ }
+ }
+ else
+ {
+ throw new RepositoryCreationException(
+ "checkRepositoryInUse command returned uknown result type");
+ }
+ }
+ }
+ }
+ List<Object> results = rpcService.executeCommandOnAllNodes(removeRepository, true, repositoryName);
for (Object result : results)
{
if (result != null)
@@ -767,7 +811,23 @@
}
else
{
- removeRepositoryLocally(repositoryName, forceCloseSessions);
+ if (!forceRemove)
+ {
+ try
+ {
+ if (!repositoryService.canRemoveRepository(repositoryName))
+ {
+ throw new RepositoryCreationException("Can't remove repository " + repositoryName
+ + ". The repository in use.");
+ }
+ }
+ catch (RepositoryException e)
+ {
+ throw new RepositoryCreationException("It is not possible to check is repository " + repositoryName + " in usage or not", e);
+ }
+ }
+
+ removeRepositoryLocally(repositoryName);
}
}
@@ -776,11 +836,9 @@
*
* @param repositoryName
* the repository name
- * @param forceCloseSessions - indicates if need to close session before repository removing, if
- * sessions are opened is it not possbile to remove repository and exception will be throw
* @throws RepositoryCreationException
*/
- protected void removeRepositoryLocally(String repositoryName, boolean forceCloseSessions)
+ protected void removeRepositoryLocally(String repositoryName)
throws RepositoryCreationException
{
try
@@ -789,16 +847,13 @@
ManageableRepository repositorty = repositoryService.getRepository(repositoryName);
Set<String> datasources = extractDataSourceNames(repositorty.getConfiguration(), false);
- if (forceCloseSessions)
+ // close all opened sessions
+ for (String workspaceName : repositorty.getWorkspaceNames())
{
- // close all opened sessions
- for (String workspaceName : repositorty.getWorkspaceNames())
- {
- WorkspaceContainerFacade wc = repositorty.getWorkspaceContainer(workspaceName);
- SessionRegistry sessionRegistry = (SessionRegistry)wc.getComponent(SessionRegistry.class);
+ WorkspaceContainerFacade wc = repositorty.getWorkspaceContainer(workspaceName);
+ SessionRegistry sessionRegistry = (SessionRegistry)wc.getComponent(SessionRegistry.class);
- sessionRegistry.closeSessions(workspaceName);
- }
+ sessionRegistry.closeSessions(workspaceName);
}
// remove repository from configuration
Modified: jcr/trunk/exo.jcr.docs/exo.jcr.docs.developer/en/src/main/docbook/en-US/modules/jcr/repository-creation-service.xml
===================================================================
--- jcr/trunk/exo.jcr.docs/exo.jcr.docs.developer/en/src/main/docbook/en-US/modules/jcr/repository-creation-service.xml 2011-07-05 12:42:16 UTC (rev 4598)
+++ jcr/trunk/exo.jcr.docs/exo.jcr.docs.developer/en/src/main/docbook/en-US/modules/jcr/repository-creation-service.xml 2011-07-05 13:49:29 UTC (rev 4599)
@@ -220,12 +220,12 @@
* Remove previously created repository.
*
* @param repositoryName - the repository name to delete
- * @param forceCloseSessions - indicates if need to close session before repository removing, if
- * sessions are opened is it not possbile to remove repository and exception will be thrown
+ * @param forceRemove - force close all opened sessions
* @throws RepositoryCreationServiceException
* if some exception occurred during repository removing occurred
*/
- void removeRepository(String repositoryName, boolean forceCloseSessions) throws RepositoryCreationException;
+ void removeRepository(String repositoryName, boolean forceRemove) throws RepositoryCreationException;
+
}</programlisting>
</section>
More information about the exo-jcr-commits
mailing list