[exo-jcr-commits] exo-jcr SVN: r5815 - in jcr/branches/1.15.x: exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache and 8 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Mar 6 08:13:38 EST 2012


Author: areshetnyak
Date: 2012-03-06 08:13:36 -0500 (Tue, 06 Mar 2012)
New Revision: 5815

Modified:
   jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java
   jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/core/query/ispn/ISPNIndexChangesFilter.java
   jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/BufferedISPNCache.java
   jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java
   jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java
   jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JBossCacheIndexChangesFilter.java
   jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/BufferedJBossCache.java
   jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java
   jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/BaseStandaloneTest.java
   jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java
   jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestRepositoryManagement.java
   jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestWorkspaceManagement.java
   jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestWorkspaceRestore.java
   jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java
Log:
EXOJCR-1758 : The problem with eviction and stoping cache on repository stop was fixed.

Modified: jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -33,8 +33,8 @@
 import org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
 import org.exoplatform.services.jcr.impl.storage.jdbc.DBConstants;
 import org.exoplatform.services.jcr.jbosscache.ExoJBossCacheFactory;
+import org.exoplatform.services.jcr.jbosscache.PrivilegedJBossCacheHelper;
 import org.exoplatform.services.jcr.jbosscache.ExoJBossCacheFactory.CacheType;
-import org.exoplatform.services.jcr.jbosscache.PrivilegedJBossCacheHelper;
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
 import org.exoplatform.services.naming.InitialContextInitializer;
@@ -509,7 +509,9 @@
       if (shareable)
       {
          // The cache cannot be stopped since it can be shared so we evict the root node instead
-         cache.evict(lockRoot);
+         cache.getNode(lockRoot).setResident(false);
+         cache.evict(lockRoot, true);
+         cache.getRegion(lockRoot, false).processEvictionQueues();
       }
       else
       {

Modified: jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JBossCacheIndexChangesFilter.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JBossCacheIndexChangesFilter.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JBossCacheIndexChangesFilter.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -32,8 +32,8 @@
 import org.exoplatform.services.jcr.impl.core.query.lucene.IndexInfos;
 import org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex;
 import org.exoplatform.services.jcr.jbosscache.ExoJBossCacheFactory;
+import org.exoplatform.services.jcr.jbosscache.PrivilegedJBossCacheHelper;
 import org.exoplatform.services.jcr.jbosscache.ExoJBossCacheFactory.CacheType;
-import org.exoplatform.services.jcr.jbosscache.PrivilegedJBossCacheHelper;
 import org.exoplatform.services.jcr.util.IdGenerator;
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
@@ -281,5 +281,7 @@
       {
          LOG.warn("Not all JBoss Cache MBeans were unregistered.");
       }
+
+      PrivilegedJBossCacheHelper.stop(cache);
    }
 }

Modified: jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/BufferedJBossCache.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/BufferedJBossCache.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/BufferedJBossCache.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -21,6 +21,7 @@
 import org.exoplatform.commons.utils.SecurityHelper;
 import org.exoplatform.services.jcr.datamodel.ItemData;
 import org.exoplatform.services.jcr.impl.core.itemfilters.QPathEntryFilter;
+import org.exoplatform.services.jcr.jbosscache.PrivilegedJBossCacheHelper;
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
 import org.jboss.cache.Cache;
@@ -724,15 +725,7 @@
     */
    public void start() throws CacheException
    {
-      PrivilegedAction<Object> action = new PrivilegedAction<Object>()
-      {
-         public Object run()
-         {
-            parentCache.start();
-            return null;
-         }
-      };
-      SecurityHelper.doPrivilegedAction(action);
+      PrivilegedJBossCacheHelper.start(parentCache);
    }
 
    /* (non-Javadoc)
@@ -748,15 +741,7 @@
     */
    public void stop()
    {
-      PrivilegedAction<Object> action = new PrivilegedAction<Object>()
-      {
-         public Object run()
-         {
-            parentCache.stop();
-            return null;
-         }
-      };
-      SecurityHelper.doPrivilegedAction(action);
+      PrivilegedJBossCacheHelper.stop(parentCache);
    }
 
    public TransactionManager getTransactionManager()

Modified: jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -51,6 +51,7 @@
 import org.exoplatform.services.jcr.impl.dataflow.TransientNodeData;
 import org.exoplatform.services.jcr.impl.dataflow.TransientPropertyData;
 import org.exoplatform.services.jcr.jbosscache.ExoJBossCacheFactory;
+import org.exoplatform.services.jcr.jbosscache.PrivilegedJBossCacheHelper;
 import org.exoplatform.services.jcr.jbosscache.ExoJBossCacheFactory.CacheType;
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
@@ -60,8 +61,8 @@
 import org.jboss.cache.CacheStatus;
 import org.jboss.cache.Fqn;
 import org.jboss.cache.Node;
+import org.jboss.cache.config.EvictionRegionConfig;
 import org.jboss.cache.config.Configuration.CacheMode;
-import org.jboss.cache.config.EvictionRegionConfig;
 import org.jboss.cache.eviction.ExpirationAlgorithmConfig;
 import org.jboss.cache.jmx.JmxRegistrationManager;
 import org.picocontainer.Startable;
@@ -124,6 +125,8 @@
 
    private final boolean enabled;
 
+   private final boolean shareable;
+
    public static final String JBOSSCACHE_CONFIG = "jbosscache-configuration";
 
    public static final String JBOSSCACHE_EXPIRATION = "jbosscache-expiration-time";
@@ -568,6 +571,9 @@
 
       enabled = wsConfig.getCache().isEnabled();
 
+      shareable =
+         wsConfig.getCache().getParameterBoolean(JBOSSCACHE_SHAREABLE, JBOSSCACHE_SHAREABLE_DEFAULT).booleanValue();
+
       // create cache using custom factory
       ExoJBossCacheFactory<Serializable, Object> factory;
 
@@ -729,6 +735,51 @@
             }
          });
       }      
+
+      if (shareable)
+      {
+         // The cache cannot be stopped since it can be shared so we evict the root node instead
+         cache.getNode(itemsRoot).setResident(false);
+         cache.evict(itemsRoot, true);
+         cache.getRegion(itemsRoot, false).processEvictionQueues();
+
+         cache.getNode(refRoot).setResident(false);;
+         cache.evict(refRoot, true);
+         cache.getRegion(refRoot, false).processEvictionQueues();
+
+         cache.getNode(childNodes).setResident(false);;
+         cache.evict(childNodes, true);
+         cache.getRegion(childNodes, false).processEvictionQueues();
+
+         cache.getNode(childProps).setResident(false);;
+         cache.evict(childProps, true);
+         cache.getRegion(childProps, false).processEvictionQueues();
+
+         cache.getNode(childNodesList).setResident(false);
+         cache.evict(childNodesList, true);
+         cache.getRegion(childNodesList, false).processEvictionQueues();
+
+         cache.getNode(childPropsList).setResident(false);
+         cache.evict(childPropsList, true);
+         cache.getRegion(childPropsList, false).processEvictionQueues();
+
+         cache.getNode(childNodesByPageList).setResident(false);
+         cache.evict(childNodesByPageList, true);
+         cache.getRegion(childNodesByPageList, false).processEvictionQueues();
+
+         cache.getNode(childNodesByPatternList).setResident(false);
+         cache.evict(childNodesByPatternList, true);
+         cache.getRegion(childNodesByPatternList, false).processEvictionQueues();
+
+         cache.getNode(childPropsByPatternList).setResident(false);
+         cache.evict(childPropsByPatternList, true);
+         cache.getRegion(childPropsByPatternList, false).processEvictionQueues();
+
+      }
+      else
+      {
+         PrivilegedJBossCacheHelper.stop(cache);
+      }
    }
 
    /**

Modified: jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/BaseStandaloneTest.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/BaseStandaloneTest.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/BaseStandaloneTest.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -142,7 +142,7 @@
 
       String loginConf = BaseStandaloneTest.class.getResource("/login.conf").toString();
 
-      container = StandaloneContainer.getInstance();
+       container = StandaloneContainer.getInstance();
 
       if (System.getProperty("java.security.auth.login.config") == null)
       {

Modified: jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -128,34 +128,54 @@
 
    private void checkConsistentLocksInDataBase(ManageableRepository repository) throws Exception
    {
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+      try
+      {
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      Node node = addTestNode(repository);
-      lockNode(node);
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         Node node = addTestNode(repository);
+         lockNode(node);
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      removePropertyInDB(repository, (PropertyImpl)node.getProperty("jcr:lockIsDeep"));
-      removePropertyInDB(repository, (PropertyImpl)node.getProperty("jcr:lockOwner"));
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         removePropertyInDB(repository, (PropertyImpl)node.getProperty("jcr:lockIsDeep"));
+         removePropertyInDB(repository, (PropertyImpl)node.getProperty("jcr:lockOwner"));
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
 
-      checkController.repairDataBase("yes");
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         checkController.repairDataBase("yes");
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    private void checkInconsistentLocksInLockTable(ManageableRepository repository) throws Exception
    {
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+      try
+      {
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      Node node = addTestNode(repository);
-      lockNode(node);
+         Node node = addTestNode(repository);
+         lockNode(node);
 
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      clearLockTable(repository);
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         clearLockTable(repository);
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
 
-      checkController.repairDataBase("yes");
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         checkController.repairDataBase("yes");
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    public void testCheckValueStorage() throws Exception
@@ -187,14 +207,25 @@
     */
    public void testIndexUsecaseWrongDocumentId() throws Exception
    {
-      ManageableRepository repository = helper.createRepository(container, SINGLE_DB, CACHE_DISABLED);
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
-      
-      Node node = addTestNode(repository);
-      assertTrue(checkController.checkIndex().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      ManageableRepository repository = null;
+      try
+      {
+         repository = helper.createRepository(container, SINGLE_DB, CACHE_DISABLED);
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      removeNodeInDB(repository, node);
-      assertTrue(checkController.checkIndex().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         Node node = addTestNode(repository);
+         assertTrue(checkController.checkIndex().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+
+         removeNodeInDB(repository, node);
+         assertTrue(checkController.checkIndex().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    /**
@@ -202,14 +233,25 @@
     */
    public void testIndexUsecaseMultipleDocuments() throws Exception
    {
-      ManageableRepository repository = helper.createRepository(container, SINGLE_DB, CACHE_DISABLED);
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+      ManageableRepository repository = null;
+      try
+      {
+         repository = helper.createRepository(container, SINGLE_DB, CACHE_DISABLED);
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      Node node = addTestNode(repository);
-      assertTrue(checkController.checkIndex().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         Node node = addTestNode(repository);
+         assertTrue(checkController.checkIndex().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      indexNode(repository, node, ItemState.ADDED);
-      assertTrue(checkController.checkIndex().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         indexNode(repository, node, ItemState.ADDED);
+         assertTrue(checkController.checkIndex().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    /**
@@ -217,14 +259,25 @@
     */
    public void testIndexUsecaseDocumentNotExists() throws Exception
    {
-      ManageableRepository repository = helper.createRepository(container, SINGLE_DB, CACHE_DISABLED);
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+      ManageableRepository repository = null;
+      try
+      {
+         repository = helper.createRepository(container, SINGLE_DB, CACHE_DISABLED);
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      Node node = addTestNode(repository);
-      assertTrue(checkController.checkIndex().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         Node node = addTestNode(repository);
+         assertTrue(checkController.checkIndex().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      indexNode(repository, node, ItemState.DELETED);
-      assertTrue(checkController.checkIndex().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         indexNode(repository, node, ItemState.DELETED);
+         assertTrue(checkController.checkIndex().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    /**
@@ -241,33 +294,52 @@
 
    private void checkDBUsecasesTheParentIdIsIdOfThisNode(ManageableRepository repository) throws Exception
    {
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+      try
+      {
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      Node node = addTestNode(repository);
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         Node node = addTestNode(repository);
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      assingItsOwnParent(repository, (ItemImpl)node);
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         assingItsOwnParent(repository, (ItemImpl)node);
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
 
-      checkController.repairDataBase("yes");
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
-
+         checkController.repairDataBase("yes");
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    private void checkDBUsecasesTheParentIdIsIdOfThisNode2(ManageableRepository repository) throws Exception
    {
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+      try
+      {
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      Node node = addTestNode(repository);
-      Property prop = addTestProperty(repository, node);
+         Node node = addTestNode(repository);
+         Property prop = addTestProperty(repository, node);
 
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      assingItsOwnParent(repository, (ItemImpl)prop);
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         assingItsOwnParent(repository, (ItemImpl)prop);
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
 
-      checkController.repairDataBase("yes");
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         checkController.repairDataBase("yes");
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    /**
@@ -281,18 +353,28 @@
 
    private void checkSeveralVersionsOfSameItem(ManageableRepository repository) throws Exception
    {
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+      try
+      {
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      Node node = addTestNode(repository);
-      PropertyImpl prop = (PropertyImpl)addTestProperty(repository, node);
+         Node node = addTestNode(repository);
+         PropertyImpl prop = (PropertyImpl)addTestProperty(repository, node);
 
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      insertPropertyRecord(repository, prop.getInternalIdentifier(), prop.getParentIdentifier(), prop.getName());
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         insertPropertyRecord(repository, prop.getInternalIdentifier(), prop.getParentIdentifier(), prop.getName());
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
 
-      checkController.repairDataBase("yes");
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         checkController.repairDataBase("yes");
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    /**
@@ -306,14 +388,24 @@
 
    private void checkDBUsecasesPropertyWithoutParent(ManageableRepository repository) throws Exception
    {
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      try
+      {
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      insertPropertyRecord(repository, IdGenerator.generate(), IdGenerator.generate(), "testName");
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         insertPropertyRecord(repository, IdGenerator.generate(), IdGenerator.generate(), "testName");
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
 
-      checkController.repairDataBase("yes");
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         checkController.repairDataBase("yes");
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    /**
@@ -327,18 +419,28 @@
 
    private void checkDBUsecasesIncorrectValueRecords(ManageableRepository repository) throws Exception
    {
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+      try
+      {
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      Node node = addTestNode(repository);
-      PropertyImpl prop = (PropertyImpl)addTestProperty(repository, node);
+         Node node = addTestNode(repository);
+         PropertyImpl prop = (PropertyImpl)addTestProperty(repository, node);
 
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      updateValueRecord(repository, prop.getInternalIdentifier());
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         updateValueRecord(repository, prop.getInternalIdentifier());
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
 
-      checkController.repairDataBase("yes");
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         checkController.repairDataBase("yes");
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    /**
@@ -352,18 +454,28 @@
 
    private void checkDBUsecasesValueRecordHasNoItemRecord(ManageableRepository repository) throws Exception
    {
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+      try
+      {
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      Node node = addTestNode(repository);
-      PropertyImpl prop = (PropertyImpl)addTestProperty(repository, node);
+         Node node = addTestNode(repository);
+         PropertyImpl prop = (PropertyImpl)addTestProperty(repository, node);
 
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      removeItemRecord(repository, prop.getInternalIdentifier());
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         removeItemRecord(repository, prop.getInternalIdentifier());
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
 
-      checkController.repairDataBase("yes");
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         checkController.repairDataBase("yes");
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    /**
@@ -380,30 +492,50 @@
 
    private void checkDBUsecasesPropertiesHasNoSingleValueRecord(ManageableRepository repository) throws Exception
    {
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+      try
+      {
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      Node node = addTestNode(repository);
-      PropertyImpl prop = (PropertyImpl)addTestProperty(repository, node);
+         Node node = addTestNode(repository);
+         PropertyImpl prop = (PropertyImpl)addTestProperty(repository, node);
 
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      removeValueRecord(repository, prop.getInternalIdentifier());
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         removeValueRecord(repository, prop.getInternalIdentifier());
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
 
-      checkController.repairDataBase("yes");
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         checkController.repairDataBase("yes");
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
 
    }
 
    private void checkDBUsecasesPropertiesHasEmptyMultiValueRecord(ManageableRepository repository) throws Exception
    {
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+      try
+      {
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      Node node = addTestNode(repository);
-      node.setProperty("prop", new String[]{});
-      node.save();
+         Node node = addTestNode(repository);
+         node.setProperty("prop", new String[]{});
+         node.save();
 
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    /**
@@ -420,20 +552,30 @@
    private void checkDBUsecasesReferencePropertyWithoutReferenceRecord(ManageableRepository repository)
       throws Exception
    {
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+      try
+      {
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      Node node = addTestNode(repository);
-      Node node2 = addTestNode(repository);
-      PropertyImpl prop = (PropertyImpl)node2.setProperty("prop", node);
-      node2.save();
+         Node node = addTestNode(repository);
+         Node node2 = addTestNode(repository);
+         PropertyImpl prop = (PropertyImpl)node2.setProperty("prop", node);
+         node2.save();
 
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      removeReferenceRecord(repository, prop.getInternalIdentifier());
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         removeReferenceRecord(repository, prop.getInternalIdentifier());
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
 
-      checkController.repairDataBase("yes");
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         checkController.repairDataBase("yes");
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    /**
@@ -447,16 +589,26 @@
 
    private void checkDBUsecasesNodeHasNotPrimaryTypeProperties(ManageableRepository repository) throws Exception
    {
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
-      Node node = addTestNode(repository);
+      try
+      {
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+         Node node = addTestNode(repository);
 
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      removePropertyInDB(repository, (PropertyImpl)node.getProperty("jcr:primaryType"));
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         removePropertyInDB(repository, (PropertyImpl)node.getProperty("jcr:primaryType"));
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
 
-      checkController.repairDataBase("yes");
-      assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         checkController.repairDataBase("yes");
+         assertTrue(checkController.checkDataBase().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    /**
@@ -470,20 +622,30 @@
 
    private void checkValueStorageUsecases(ManageableRepository repository) throws Exception
    {
-      TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
+      try
+      {
+         TesterRepositoryCheckController checkController = new TesterRepositoryCheckController(repository);
 
-      Node node = addTestNode(repository);
-      PropertyImpl prop = (PropertyImpl)node.setProperty("prop", new FileInputStream(createBLOBTempFile(300)));
-      node.save();
+         Node node = addTestNode(repository);
+         PropertyImpl prop = (PropertyImpl)node.setProperty("prop", new FileInputStream(createBLOBTempFile(300)));
+         node.save();
 
-      assertTrue(checkController.checkValueStorage().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         assertTrue(checkController.checkValueStorage().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
 
-      removeFileFromVS(repository, prop.getInternalIdentifier());
-      assertTrue(checkController.checkValueStorage()
-         .startsWith(RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
+         removeFileFromVS(repository, prop.getInternalIdentifier());
+         assertTrue(checkController.checkValueStorage().startsWith(
+            RepositoryCheckController.REPORT_NOT_CONSISTENT_MESSAGE));
 
-      checkController.repairValueStorage("yes");
-      assertTrue(checkController.checkValueStorage().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+         checkController.repairValueStorage("yes");
+         assertTrue(checkController.checkValueStorage().startsWith(RepositoryCheckController.REPORT_CONSISTENT_MESSAGE));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    private Node addTestNode(ManageableRepository repository) throws LoginException, NoSuchWorkspaceException,

Modified: jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestRepositoryManagement.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestRepositoryManagement.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestRepositoryManagement.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -22,9 +22,12 @@
 import org.exoplatform.container.xml.PropertiesParam;
 import org.exoplatform.services.jcr.JcrImplBaseTest;
 import org.exoplatform.services.jcr.RepositoryService;
+import org.exoplatform.services.jcr.config.CacheEntry;
 import org.exoplatform.services.jcr.config.RepositoryEntry;
 import org.exoplatform.services.jcr.config.RepositoryServiceConfiguration;
+import org.exoplatform.services.jcr.config.SimpleParameterEntry;
 import org.exoplatform.services.jcr.config.WorkspaceEntry;
+import org.exoplatform.services.jcr.core.CredentialsImpl;
 import org.exoplatform.services.jcr.core.ManageableRepository;
 import org.exoplatform.services.jcr.impl.config.JDBCConfigurationPersister;
 import org.exoplatform.services.jcr.util.TesterConfigurationHelper;
@@ -36,8 +39,12 @@
 import java.io.File;
 import java.io.FileOutputStream;
 import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.CountDownLatch;
 
+import javax.jcr.PathNotFoundException;
+import javax.jcr.Session;
+
 /**
  * @author <a href="mailto:Sergey.Kabashnyuk at gmail.com">Sergey Kabashnyuk</a>
  * @version $Id: TestRepositoryManagement.java 11907 2008-03-13 15:36:21Z ksm $
@@ -57,6 +64,7 @@
 
    private final TesterConfigurationHelper helper;
 
+
    public TestRepositoryManagement()
    {
       super();
@@ -65,119 +73,231 @@
 
    public void testAddNewRepository() throws Exception
    {
-      ManageableRepository repository = helper.createRepository(container, false, null);
-      assertNotNull(repository.login(credentials, repository.getConfiguration().getSystemWorkspaceName()).getRootNode());
+      ManageableRepository repository = null;
+      try
+      {
+         repository = helper.createRepository(container, false, null);
+
+         Session session = null;
+         try
+         {
+            session = repository.login(credentials, repository.getConfiguration().getSystemWorkspaceName());
+            assertNotNull(session.getRootNode());
+         }
+         finally
+         {
+            if (session != null)
+            {
+               session.logout();
+            }
+         }
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    public void testMarshalUnmarshalRepositoryConfiguration() throws Exception
    {
-      ManageableRepository newRepository = helper.createRepository(container, false, null);
 
-      // 1st marshal configuration
-      File tempFile = PrivilegedFileHelper.createTempFile("test-config", "xml");
-      PrivilegedFileHelper.deleteOnExit(tempFile);
+      ManageableRepository repository = null;
+      try
+      {
+         repository = helper.createRepository(container, false, null);
 
-      IBindingFactory factory = BindingDirectory.getFactory(RepositoryServiceConfiguration.class);
-      IMarshallingContext mctx = factory.createMarshallingContext();
+         final long lockManagerTimeOut =
+            repository.getConfiguration().getWorkspaceEntries().get(0).getLockManager().getParameterLong("time-out");
 
-      FileOutputStream saveStream = new FileOutputStream(tempFile);
-      ArrayList<RepositoryEntry> repositoryEntries = new ArrayList<RepositoryEntry>();
-      repositoryEntries.add(newRepository.getConfiguration());
+         // 1st marshal configuration
+         File tempFile = PrivilegedFileHelper.createTempFile("test-config", "xml");
+         PrivilegedFileHelper.deleteOnExit(tempFile);
 
-      RepositoryServiceConfiguration newRepositoryServiceConfiguration =
-         new RepositoryServiceConfiguration(repositoryService.getConfig().getDefaultRepositoryName(), repositoryEntries);
-      mctx.marshalDocument(newRepositoryServiceConfiguration, "ISO-8859-1", null, saveStream);
-      saveStream.close();
+         IBindingFactory factory = BindingDirectory.getFactory(RepositoryServiceConfiguration.class);
+         IMarshallingContext mctx = factory.createMarshallingContext();
 
-      // 1st unmarshal
-      factory = BindingDirectory.getFactory(RepositoryServiceConfiguration.class);
-      IUnmarshallingContext uctx = factory.createUnmarshallingContext();
-      RepositoryServiceConfiguration conf =
-         (RepositoryServiceConfiguration)uctx.unmarshalDocument(PrivilegedFileHelper.fileInputStream(tempFile), null);
+         FileOutputStream saveStream = new FileOutputStream(tempFile);
+         ArrayList<RepositoryEntry> repositoryEntries = new ArrayList<RepositoryEntry>();
+         repositoryEntries.add(repository.getConfiguration());
 
-      // 1st check
-      RepositoryEntry unmarshledRepositoryEntry =
-         conf.getRepositoryConfiguration(newRepository.getConfiguration().getName());
+         RepositoryServiceConfiguration newRepositoryServiceConfiguration =
+            new RepositoryServiceConfiguration(repositoryService.getConfig().getDefaultRepositoryName(),
+               repositoryEntries);
+         mctx.marshalDocument(newRepositoryServiceConfiguration, "ISO-8859-1", null, saveStream);
+         saveStream.close();
 
-      
-      // 2nd marshal configuration
-      tempFile = PrivilegedFileHelper.createTempFile("test-config", "xml");
-      PrivilegedFileHelper.deleteOnExit(tempFile);
+         // 1st unmarshal
+         factory = BindingDirectory.getFactory(RepositoryServiceConfiguration.class);
+         IUnmarshallingContext uctx = factory.createUnmarshallingContext();
+         RepositoryServiceConfiguration conf =
+            (RepositoryServiceConfiguration)uctx
+               .unmarshalDocument(PrivilegedFileHelper.fileInputStream(tempFile), null);
 
-      factory = BindingDirectory.getFactory(RepositoryServiceConfiguration.class);
-      mctx = factory.createMarshallingContext();
-      saveStream = new FileOutputStream(tempFile);
-      repositoryEntries = new ArrayList<RepositoryEntry>();
-      repositoryEntries.add(newRepository.getConfiguration());
+         // 1st check
+         RepositoryEntry unmarshledRepositoryEntry =
+            conf.getRepositoryConfiguration(repository.getConfiguration().getName());
+         assertEquals(lockManagerTimeOut, unmarshledRepositoryEntry.getWorkspaceEntries().get(0).getLockManager()
+            .getParameterLong("time-out").longValue());
 
-      newRepositoryServiceConfiguration =
-         new RepositoryServiceConfiguration(repositoryService.getConfig().getDefaultRepositoryName(), repositoryEntries);
-      mctx.marshalDocument(newRepositoryServiceConfiguration, "ISO-8859-1", null, saveStream);
-      saveStream.close();
-      
-      // 2nd unmarshal
-      factory = BindingDirectory.getFactory(RepositoryServiceConfiguration.class);
-      uctx = factory.createUnmarshallingContext();
-      conf = (RepositoryServiceConfiguration)uctx.unmarshalDocument(PrivilegedFileHelper.fileInputStream(tempFile), null);
+         // 2nd marshal configuration
+         tempFile = PrivilegedFileHelper.createTempFile("test-config", "xml");
+         PrivilegedFileHelper.deleteOnExit(tempFile);
 
-      // 2nd check
-      unmarshledRepositoryEntry =
-         conf.getRepositoryConfiguration(newRepository.getConfiguration().getName());
+         factory = BindingDirectory.getFactory(RepositoryServiceConfiguration.class);
+         mctx = factory.createMarshallingContext();
+         saveStream = new FileOutputStream(tempFile);
+         repositoryEntries = new ArrayList<RepositoryEntry>();
+         repositoryEntries.add(repository.getConfiguration());
+
+         newRepositoryServiceConfiguration =
+            new RepositoryServiceConfiguration(repositoryService.getConfig().getDefaultRepositoryName(),
+               repositoryEntries);
+         mctx.marshalDocument(newRepositoryServiceConfiguration, "ISO-8859-1", null, saveStream);
+         saveStream.close();
+
+         // 2nd unmarshal
+         factory = BindingDirectory.getFactory(RepositoryServiceConfiguration.class);
+         uctx = factory.createUnmarshallingContext();
+         conf =
+            (RepositoryServiceConfiguration)uctx
+               .unmarshalDocument(PrivilegedFileHelper.fileInputStream(tempFile), null);
+
+         // 2nd check
+         unmarshledRepositoryEntry = conf.getRepositoryConfiguration(repository.getConfiguration().getName());
+         assertEquals(lockManagerTimeOut, unmarshledRepositoryEntry.getWorkspaceEntries().get(0).getLockManager()
+            .getParameterLong("time-out").longValue());
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    public void testAddNewRepositoryWithSameName() throws Exception
    {
-      ManageableRepository repository = helper.createRepository(container, false, null);
-
+      ManageableRepository repository = null;
       try
       {
-         RepositoryEntry rEntry = helper.createRepositoryEntry(false, null, null, true);
-         rEntry.setName(repository.getConfiguration().getName());
+         repository = helper.createRepository(container, false, null);
 
-         helper.createRepository(container, rEntry);
-         fail();
+         try
+         {
+            RepositoryEntry rEntry = helper.createRepositoryEntry(false, null, null, true);
+            rEntry.setName(repository.getConfiguration().getName());
+
+            helper.createRepository(container, rEntry);
+            fail();
+         }
+         catch (Exception e)
+         {
+            // ok
+         }
       }
-      catch (Exception e)
+      finally
       {
-         // ok
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
       }
    }
 
    public void testCanRemove() throws Exception
    {
-      ManageableRepository repository = helper.createRepository(container, false, null);
+      ManageableRepository repository = null;
+      try
+      {
+         repository = helper.createRepository(container, false, null);
 
-      RepositoryService service = (RepositoryService)container.getComponentInstanceOfType(RepositoryService.class);
+         RepositoryService service = (RepositoryService)container.getComponentInstanceOfType(RepositoryService.class);
 
-      SessionImpl session =
-         (SessionImpl)repository.login(credentials, repository.getConfiguration().getSystemWorkspaceName());
+         SessionImpl session =
+            (SessionImpl)repository.login(credentials, repository.getConfiguration().getSystemWorkspaceName());
 
-      assertFalse(service.canRemoveRepository(repository.getConfiguration().getName()));
-      session.logout();
-      assertTrue(service.canRemoveRepository(repository.getConfiguration().getName()));
+         assertFalse(service.canRemoveRepository(repository.getConfiguration().getName()));
+         session.logout();
+         assertTrue(service.canRemoveRepository(repository.getConfiguration().getName()));
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    public void testInitNameSpaces() throws Exception
    {
-      ManageableRepository repository = helper.createRepository(container, false, null);
+      ManageableRepository repository = null;
+      try
+      {
+         repository = helper.createRepository(container, false, null);
 
-      SessionImpl session =
-         (SessionImpl)repository.login(credentials, repository.getConfiguration().getSystemWorkspaceName());
+         SessionImpl session = null;
+         try
+         {
+            session =
+               (SessionImpl)repository.login(credentials, repository.getConfiguration().getSystemWorkspaceName());
 
-      assertEquals("http://www.apache.org/jackrabbit/test", session.getNamespaceURI("test"));
-      assertEquals("http://www.exoplatform.org/jcr/test/1.0", session.getNamespaceURI("exojcrtest"));
+            assertEquals("http://www.apache.org/jackrabbit/test", session.getNamespaceURI("test"));
+            assertEquals("http://www.exoplatform.org/jcr/test/1.0", session.getNamespaceURI("exojcrtest"));
+         }
+         finally
+         {
+            if (session != null)
+            {
+               session.logout();
+            }
+         }
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    public void testInitNodeTypes() throws Exception
    {
-      ManageableRepository repository = helper.createRepository(container, false, null);
+      ManageableRepository repository = null;
+      try
+      {
+         repository = helper.createRepository(container, false, null);
 
-      SessionImpl session =
-         (SessionImpl)repository.login(credentials, repository.getConfiguration().getSystemWorkspaceName());
+         SessionImpl session = null;
+         try
+         {
+            session =
+               (SessionImpl)repository.login(credentials, repository.getConfiguration().getSystemWorkspaceName());
 
-      // check if nt:folder nodetype exists
-      session.getRootNode().addNode("folder", "nt:folder");
-      session.save();
+            // check if nt:folder nodetype exists
+            session.getRootNode().addNode("folder", "nt:folder");
+            session.save();
+         }
+         finally
+         {
+            if (session != null)
+            {
+               session.logout();
+            }
+         }
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    public void testRemove() throws Exception
@@ -202,57 +322,82 @@
       int theadsCount = 10;
 
       RepositoryCreationThread[] threads = new RepositoryCreationThread[theadsCount];
-      CountDownLatch latcher = new CountDownLatch(1);
 
-      for (int i = 0; i < theadsCount; i++)
+      try
       {
-         threads[i] = new RepositoryCreationThread(latcher);
-         threads[i].start();
-      }
+         CountDownLatch latcher = new CountDownLatch(1);
 
-      latcher.countDown();
+         for (int i = 0; i < theadsCount; i++)
+         {
+            threads[i] = new RepositoryCreationThread(latcher);
+            threads[i].start();
+         }
 
-      for (int i = 0; i < theadsCount; i++)
-      {
-         threads[i].join();
-      }
+         latcher.countDown();
 
-      PropertiesParam props = new PropertiesParam();
-      props.setProperty("dialect", "auto");
-      props.setProperty("source-name", "jdbcjcr");
+         for (int i = 0; i < theadsCount; i++)
+         {
+            threads[i].join();
+         }
 
-      JDBCConfigurationPersister persiter = new JDBCConfigurationPersister();
-      persiter.init(props);
+         PropertiesParam props = new PropertiesParam();
+         props.setProperty("dialect", "auto");
+         props.setProperty("source-name", "jdbcjcr");
 
-      IBindingFactory factory = BindingDirectory.getFactory(RepositoryServiceConfiguration.class);
-      IUnmarshallingContext uctx = factory.createUnmarshallingContext();
-      RepositoryServiceConfiguration storedConf =
-         (RepositoryServiceConfiguration)uctx.unmarshalDocument(persiter.read(), null);
+         JDBCConfigurationPersister persiter = new JDBCConfigurationPersister();
+         persiter.init(props);
 
-      for (int i = 0; i < theadsCount; i++)
-      {
-         // test if respository has been created
-         ManageableRepository repository = threads[i].getRepository();
-         assertNotNull(repository);
+         IBindingFactory factory = BindingDirectory.getFactory(RepositoryServiceConfiguration.class);
+         IUnmarshallingContext uctx = factory.createUnmarshallingContext();
+         RepositoryServiceConfiguration storedConf =
+            (RepositoryServiceConfiguration)uctx.unmarshalDocument(persiter.read(), null);
 
-         // check configuration in persiter
-         storedConf.getRepositoryConfiguration(repository.getConfiguration().getName());
-         
-         // check configuration in RepositoryServic
-         assertNotNull(repositoryService.getConfig().getRepositoryConfiguration(repository.getConfiguration().getName()));
-         
-         // login into newly created repository
-         ManageableRepository newRepository = repositoryService.getRepository(repository.getConfiguration().getName());
-         assertNotNull(repository.login(credentials, newRepository.getConfiguration().getSystemWorkspaceName())
-            .getRootNode());
+         for (int i = 0; i < theadsCount; i++)
+         {
+            // test if respository has been created
+            ManageableRepository repository = threads[i].getRepository();
+            assertNotNull(repository);
+
+            // check configuration in persiter
+            storedConf.getRepositoryConfiguration(repository.getConfiguration().getName());
+
+            // check configuration in RepositoryServic
+            assertNotNull(repositoryService.getConfig().getRepositoryConfiguration(
+               repository.getConfiguration().getName()));
+
+            // login into newly created repository
+            ManageableRepository newRepository =
+               repositoryService.getRepository(repository.getConfiguration().getName());
+
+            Session session = null;
+            try
+            {
+               session = repository.login(credentials, newRepository.getConfiguration().getSystemWorkspaceName());
+               assertNotNull(session.getRootNode());
+            }
+            finally
+            {
+               if (session != null)
+               {
+                  session.logout();
+               }
+            }
+         }
       }
+      finally
+      {
+         for (int i = 0; i < theadsCount; i++)
+         {
+            helper.removeRepository(container, threads[i].getRepository().getConfiguration().getName());
+         }
+      }
    }
 
    private class RepositoryCreationThread extends Thread
    {
       private CountDownLatch latcher;
 
-      private ManageableRepository repository;
+      private ManageableRepository tRrepository;
 
       RepositoryCreationThread(CountDownLatch latcher)
       {
@@ -260,14 +405,15 @@
       }
 
       /**
-       * {@inheritDoc}
-       */
+        * {@inheritDoc}
+        */
+
       public void run()
       {
          try
          {
             latcher.await();
-            repository = helper.createRepository(container, false, null);
+            tRrepository = helper.createRepository(container, false, null);
          }
          catch (Exception e)
          {
@@ -277,7 +423,134 @@
 
       public ManageableRepository getRepository()
       {
-         return repository;
+         return tRrepository;
       }
    }
+
+   public void testCreateAterRemoveCheckOldContent() throws Exception
+   {
+      ManageableRepository newRepository = null;
+      try
+      {
+         RepositoryService service = (RepositoryService)container.getComponentInstanceOfType(RepositoryService.class);
+         RepositoryEntry repoEntry = helper.createRepositoryEntry(false, null, null, true);
+
+         try
+         {
+            Class
+               .forName("org.exoplatform.services.jcr.impl.dataflow.persistent.infinispan.ISPNCacheWorkspaceStorageCache");
+
+            ArrayList cacheParams = new ArrayList();
+            cacheParams.add(new SimpleParameterEntry("infinispan-configuration",
+               "conf/standalone/test-infinispan-config.xml"));
+            CacheEntry cacheEntry = new CacheEntry(cacheParams);
+            cacheEntry
+               .setType("org.exoplatform.services.jcr.impl.dataflow.persistent.infinispan.ISPNCacheWorkspaceStorageCache");
+            cacheEntry.setEnabled(true);
+
+            ArrayList<WorkspaceEntry> wsList = repoEntry.getWorkspaceEntries();
+
+            wsList.get(0).setCache(cacheEntry);
+            repoEntry.setWorkspaceEntries(wsList);
+         }
+         catch (ClassNotFoundException e)
+         {
+         }
+
+         service.createRepository(repoEntry);
+         service.getConfig().retain();
+
+         ManageableRepository repository = service.getRepository(repoEntry.getName());
+
+         // add content
+         Session session =
+            repository.login(new CredentialsImpl("admin", "admin".toCharArray()), repository.getConfiguration()
+               .getSystemWorkspaceName());
+         session.getRootNode().addNode("test");
+         session.save();
+         session.logout();
+
+         // copy repository configuration
+         RepositoryEntry repositoryEntry = helper.copyRepositoryEntry(repository.getConfiguration());
+
+         String newDatasourceName = helper.createDatasource();
+
+         for (WorkspaceEntry ws : repositoryEntry.getWorkspaceEntries())
+         {
+            List<SimpleParameterEntry> parameters = ws.getContainer().getParameters();
+            for (int i = 0; i <= parameters.size(); i++)
+            {
+               SimpleParameterEntry spe = parameters.get(i);
+               if (spe.getName().equals("source-name"))
+               {
+                  parameters.add(i, new SimpleParameterEntry(spe.getName(), newDatasourceName));
+                  break;
+               }
+            }
+            ws.getContainer().setParameters(parameters);
+
+            parameters = ws.getLockManager().getParameters();
+            for (int i = 0; i <= parameters.size(); i++)
+            {
+               SimpleParameterEntry spe = parameters.get(i);
+               if (spe.getName().equals("jbosscache-cl-cache.jdbc.datasource")
+                  || spe.getName().equals("infinispan-cl-cache.jdbc.datasource"))
+               {
+                  parameters.add(i, new SimpleParameterEntry(spe.getName(), newDatasourceName));
+                  break;
+               }
+            }
+            ws.getLockManager().setParameters(parameters);
+         }
+
+         service.removeRepository(repository.getConfiguration().getName());
+
+         try
+         {
+            service.getRepository(repository.getConfiguration().getName());
+            fail();
+         }
+         catch (Exception e)
+         {
+         }
+
+         // create new repository 
+         service.createRepository(repositoryEntry);
+         service.getConfig().retain();
+
+         newRepository = service.getRepository(repositoryEntry.getName());
+
+         Session newSession = null;
+         try
+         {
+            newSession =
+               newRepository.login(new CredentialsImpl("admin", "admin".toCharArray()), newRepository
+                  .getConfiguration().getSystemWorkspaceName());
+
+            try
+            {
+               newSession.getRootNode().getNode("test");
+               fail("Node 'test' should not exists after remove repository and recreate new.");
+            }
+            catch (PathNotFoundException e)
+            {
+               //ok
+            }
+         }
+         finally
+         {
+            if (newSession != null)
+            {
+               newSession.logout();
+            }
+         }
+      }
+      finally
+      {
+         if (newRepository != null)
+         {
+            helper.removeRepository(container, newRepository.getConfiguration().getName());
+         }
+      }
+   }
 }

Modified: jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestWorkspaceManagement.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestWorkspaceManagement.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestWorkspaceManagement.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -52,146 +52,239 @@
    // single db test only
    public void testAddWorkspaceWithNewDS() throws Exception
    {
-      ManageableRepository repository = helper.createRepository(container, false, null);
-
+      ManageableRepository repository = null;
       try
       {
-         WorkspaceEntry wsEntry = helper.createWorkspaceEntry(false, "not-existed-ds");
-         helper.addWorkspace(repository, wsEntry);
-         fail();
+         repository = helper.createRepository(container, false, null);
+
+         try
+         {
+            WorkspaceEntry wsEntry = helper.createWorkspaceEntry(false, "not-existed-ds");
+            helper.addWorkspace(repository, wsEntry);
+            fail();
+         }
+         catch (Exception e)
+         {
+            // ok;
+         }
       }
-      catch (Exception e)
+      finally
       {
-         // ok;
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
       }
    }
 
    public void testAddWorkspaceWithExistingName() throws RepositoryConfigurationException, Exception
    {
-      String dsName = helper.createDatasource();
-      ManageableRepository repository = helper.createRepository(container, false, dsName);
-
+      ManageableRepository repository = null;
       try
       {
-         WorkspaceEntry wsEntry = helper.createWorkspaceEntry(false, dsName);
-         wsEntry.setName(repository.getConfiguration().getSystemWorkspaceName());
+         String dsName = helper.createDatasource();
+         repository = helper.createRepository(container, false, dsName);
 
-         helper.addWorkspace(repository, wsEntry);
-         fail();
+         try
+         {
+            WorkspaceEntry wsEntry = helper.createWorkspaceEntry(false, dsName);
+            wsEntry.setName(repository.getConfiguration().getSystemWorkspaceName());
+
+            helper.addWorkspace(repository, wsEntry);
+            fail();
+         }
+         catch (RepositoryConfigurationException e)
+         {
+            // ok;
+         }
       }
-      catch (RepositoryConfigurationException e)
+      finally
       {
-         // ok;
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
       }
    }
 
    public void testAddWorkspaceWithIvalidVs() throws RepositoryConfigurationException, Exception
    {
-      String dsName = helper.createDatasource();
-      ManageableRepository repository = helper.createRepository(container, false, dsName);
-
+      ManageableRepository repository = null;
       try
       {
-         WorkspaceEntry wsEntry = helper.createWorkspaceEntry(false, dsName);
+         String dsName = helper.createDatasource();
+         repository = helper.createRepository(container, false, dsName);
 
-         ValueStorageEntry valueStorageEntry = wsEntry.getContainer().getValueStorages().get(0);
-         
-         ArrayList<SimpleParameterEntry> spe = new ArrayList<SimpleParameterEntry>();
-         spe.add(new SimpleParameterEntry("path", "/unknown/path"));
-         valueStorageEntry.setParameters(spe);
+         try
+         {
+            WorkspaceEntry wsEntry = helper.createWorkspaceEntry(false, dsName);
 
-         wsEntry.getContainer().getValueStorages().set(0, valueStorageEntry);
+            ValueStorageEntry valueStorageEntry = wsEntry.getContainer().getValueStorages().get(0);
 
-         helper.addWorkspace(repository, wsEntry);
+            ArrayList<SimpleParameterEntry> spe = new ArrayList<SimpleParameterEntry>();
+            spe.add(new SimpleParameterEntry("path", "/unknown/path"));
+            valueStorageEntry.setParameters(spe);
+
+            wsEntry.getContainer().getValueStorages().set(0, valueStorageEntry);
+
+            helper.addWorkspace(repository, wsEntry);
+         }
+         catch (RepositoryConfigurationException e)
+         {
+            // ok;
+         }
       }
-      catch (RepositoryConfigurationException e)
+      finally
       {
-         // ok;
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
       }
    }
 
    public void testCreateWsNoConfig() throws RepositoryConfigurationException, Exception
    {
-      String dsName = helper.createDatasource();
-      ManageableRepository repository = helper.createRepository(container, false, dsName);
-
+      ManageableRepository repository = null;
       try
       {
-         WorkspaceEntry wsEntry = helper.createWorkspaceEntry(false, dsName);
-         wsEntry.setContainer(new ContainerEntry(
-            "org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer", new ArrayList()));
+         String dsName = helper.createDatasource();
+         repository = helper.createRepository(container, false, dsName);
 
-         helper.addWorkspace(repository, wsEntry);
-         fail();
+         try
+         {
+            WorkspaceEntry wsEntry = helper.createWorkspaceEntry(false, dsName);
+            wsEntry.setContainer(new ContainerEntry(
+               "org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer", new ArrayList()));
+
+            helper.addWorkspace(repository, wsEntry);
+            fail();
+         }
+         catch (Exception e)
+         {
+            // ok;
+         }
       }
-      catch (Exception e)
+      finally
       {
-         // ok;
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
       }
    }
 
    public void testInitNewWS() throws RepositoryConfigurationException, Exception
    {
-      String dsName = helper.createDatasource();
-      ManageableRepository repository = helper.createRepository(container, false, dsName);
-
+      ManageableRepository repository = null;
       try
       {
-         WorkspaceEntry wsEntry = helper.createWorkspaceEntry(false, dsName);
-         helper.addWorkspace(repository, wsEntry);
+         String dsName = helper.createDatasource();
+         repository = helper.createRepository(container, false, dsName);
 
-         SessionImpl session = (SessionImpl)repository.login(credentials, wsEntry.getName());
-         assertNotNull(session.getRootNode());
+         SessionImpl session = null;
+         try
+         {
+            WorkspaceEntry wsEntry = helper.createWorkspaceEntry(false, dsName);
+            helper.addWorkspace(repository, wsEntry);
+
+            session = (SessionImpl)repository.login(credentials, wsEntry.getName());
+            assertNotNull(session.getRootNode());
+         }
+         catch (RepositoryException e)
+         {
+            e.printStackTrace();
+            fail();
+         }
+         finally
+         {
+            session.logout();
+         }
       }
-      catch (RepositoryException e)
+      finally
       {
-         e.printStackTrace();
-         fail();
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
       }
    }
 
    public void testMixMultiAndSingleDbWs() throws RepositoryConfigurationException, Exception
    {
-      String dsName = helper.createDatasource();
-      ManageableRepository repository = helper.createRepository(container, false, dsName);
-
+      ManageableRepository repository = null;
       try
       {
-         WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, dsName);
-         helper.addWorkspace(repository, wsEntry);
-         fail();
+         String dsName = helper.createDatasource();
+         repository = helper.createRepository(container, false, dsName);
+
+         try
+         {
+            WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, dsName);
+            helper.addWorkspace(repository, wsEntry);
+            fail();
+         }
+         catch (Exception e)
+         {
+            // ok;
+         }
       }
-      catch (Exception e)
+      finally
       {
-         // ok;
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
       }
    }
 
    public void testRemoveSystemWorkspace() throws Exception
    {
-      String dsName = helper.createDatasource();
-      ManageableRepository repository = helper.createRepository(container, false, dsName);
-
+      ManageableRepository repository = null;
       try
       {
-         repository.removeWorkspace(repository.getConfiguration().getSystemWorkspaceName());
-         fail();
+         String dsName = helper.createDatasource();
+         repository = helper.createRepository(container, false, dsName);
+
+         try
+         {
+            repository.removeWorkspace(repository.getConfiguration().getSystemWorkspaceName());
+            fail();
+         }
+         catch (RepositoryException e)
+         {
+         }
       }
-      catch (RepositoryException e)
+      finally
       {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
       }
    }
 
    public void testRemoveWorkspace() throws Exception
    {
-      String dsName = helper.createDatasource();
-      ManageableRepository repository = helper.createRepository(container, false, dsName);
-      WorkspaceEntry wsEntry = helper.createWorkspaceEntry(false, dsName);
+      ManageableRepository repository = null;
+      try
+      {
+         String dsName = helper.createDatasource();
+         repository = helper.createRepository(container, false, dsName);
+         WorkspaceEntry wsEntry = helper.createWorkspaceEntry(false, dsName);
 
-      helper.addWorkspace(repository, wsEntry);
-      assertEquals(2, repository.getWorkspaceNames().length);
+         helper.addWorkspace(repository, wsEntry);
+         assertEquals(2, repository.getWorkspaceNames().length);
 
-      repository.removeWorkspace(wsEntry.getName());
-      assertEquals(1, repository.getWorkspaceNames().length);
+         repository.removeWorkspace(wsEntry.getName());
+         assertEquals(1, repository.getWorkspaceNames().length);
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 }

Modified: jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestWorkspaceRestore.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestWorkspaceRestore.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestWorkspaceRestore.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -62,52 +62,74 @@
 
    public void testRestore() throws RepositoryConfigurationException, Exception
    {
-      String dsName = helper.createDatasource();
-      ManageableRepository repository = helper.createRepository(container, isDefaultWsMultiDb, dsName);
+      ManageableRepository repository = null;
+      try
+      {
+         String dsName = helper.createDatasource();
+         repository = helper.createRepository(container, isDefaultWsMultiDb, dsName);
 
-      WorkspaceEntry workspaceEntry =
-         helper.createWorkspaceEntry(isDefaultWsMultiDb, isDefaultWsMultiDb ? helper.createDatasource() : dsName);
-      helper.addWorkspace(repository, workspaceEntry);
+         WorkspaceEntry workspaceEntry =
+            helper.createWorkspaceEntry(isDefaultWsMultiDb, isDefaultWsMultiDb ? helper.createDatasource() : dsName);
+         helper.addWorkspace(repository, workspaceEntry);
 
-      InputStream is = TestWorkspaceManagement.class.getResourceAsStream("/import-export/db1_ws1-20071220_0430.xml");
-      repository.importWorkspace(workspaceEntry.getName(), is);
+         InputStream is = TestWorkspaceManagement.class.getResourceAsStream("/import-export/db1_ws1-20071220_0430.xml");
+         repository.importWorkspace(workspaceEntry.getName(), is);
+      }
+      finally
+      {
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
+      }
    }
 
    public void testRestoreBadXml() throws Exception
    {
-      String dsName = helper.createDatasource();
-      ManageableRepository repository = helper.createRepository(container, isDefaultWsMultiDb, dsName);
+      ManageableRepository repository = null;
+      try
+      {
+         String dsName = helper.createDatasource();
+         repository = helper.createRepository(container, isDefaultWsMultiDb, dsName);
 
-      WorkspaceEntry workspaceEntry =
-         helper.createWorkspaceEntry(isDefaultWsMultiDb, isDefaultWsMultiDb ? helper.createDatasource() : dsName);
-      helper.addWorkspace(repository, workspaceEntry);
+         WorkspaceEntry workspaceEntry =
+            helper.createWorkspaceEntry(isDefaultWsMultiDb, isDefaultWsMultiDb ? helper.createDatasource() : dsName);
+         helper.addWorkspace(repository, workspaceEntry);
 
-      Session defSession = repository.login(this.credentials, workspaceEntry.getName());
-      Node defRoot = defSession.getRootNode();
+         Session defSession = repository.login(this.credentials, workspaceEntry.getName());
+         Node defRoot = defSession.getRootNode();
 
-      Node node1 = defRoot.addNode("node1");
-      node1.setProperty("p1", 2);
-      defSession.save();
+         Node node1 = defRoot.addNode("node1");
+         node1.setProperty("p1", 2);
+         defSession.save();
 
-      File content = File.createTempFile("data", ".xml");
-      content.deleteOnExit();
-      OutputStream os = new BufferedOutputStream(new FileOutputStream(content));
-      defSession.exportSystemView(node1.getPath(), os, false, false);
-      os.close();
-      defSession.logout();
-      
-      try
-      {
-         InputStream is = TestWorkspaceManagement.class.getResourceAsStream("/import-export/db1_ws1-20071220_0430.xml");
-         repository.importWorkspace(workspaceEntry.getName(), new BufferedInputStream(new FileInputStream(content)));
+         File content = File.createTempFile("data", ".xml");
+         content.deleteOnExit();
+         OutputStream os = new BufferedOutputStream(new FileOutputStream(content));
+         defSession.exportSystemView(node1.getPath(), os, false, false);
+         os.close();
+         defSession.logout();
 
-         fail();
+         try
+         {
+            InputStream is =
+               TestWorkspaceManagement.class.getResourceAsStream("/import-export/db1_ws1-20071220_0430.xml");
+            repository.importWorkspace(workspaceEntry.getName(), new BufferedInputStream(new FileInputStream(content)));
+
+            fail();
+         }
+         catch (RepositoryException e)
+         {
+            // ok
+         }
       }
-      catch (RepositoryException e)
+      finally
       {
-         // ok
+         if (repository != null)
+         {
+            helper.removeRepository(container, repository.getConfiguration().getName());
+         }
       }
-
    }
 
    private void doTestOnWorkspace(String wsName) throws RepositoryException, RepositoryConfigurationException

Modified: jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -32,6 +32,8 @@
 import org.exoplatform.services.jcr.config.ValueStorageFilterEntry;
 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.SessionRegistry;
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
 
@@ -62,6 +64,26 @@
    }
 
    /**
+    * Remove repository.
+    * @throws RepositoryConfigurationException 
+    */
+   public void removeRepository(ExoContainer container, String repositoryName) throws RepositoryException,
+      RepositoryConfigurationException
+   {
+      RepositoryService service = (RepositoryService)container.getComponentInstanceOfType(RepositoryService.class);
+
+      ManageableRepository mr = service.getRepository(repositoryName);
+      for (String wsName : mr.getWorkspaceNames())
+      {
+         WorkspaceContainerFacade wc = mr.getWorkspaceContainer(wsName);
+         SessionRegistry sessionRegistry = (SessionRegistry)wc.getComponent(SessionRegistry.class);
+         sessionRegistry.closeSessions(wsName);
+      }
+
+      service.removeRepository(repositoryName);
+   }
+
+   /**
     * Add new workspace to repository.
     */
    public void addWorkspace(ManageableRepository repository, WorkspaceEntry workspaceEntry)
@@ -249,13 +271,33 @@
          new QueryHandlerEntry("org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex", params);
 
       // Cache
-      ArrayList cacheParams = new ArrayList();
-      cacheParams.add(new SimpleParameterEntry("maxSize", "2000"));
-      cacheParams.add(new SimpleParameterEntry("liveTime", "20m"));
-      CacheEntry cacheEntry = new CacheEntry(cacheParams);
-      cacheEntry.setEnabled(cacheEnabled);
-      cacheEntry.setType("org.exoplatform.services.jcr.impl.dataflow.persistent.LinkedWorkspaceStorageCacheImpl");
+      CacheEntry cacheEntry = null;
 
+      try
+      {
+         Class
+            .forName("org.exoplatform.services.jcr.impl.dataflow.persistent.infinispan.ISPNCacheWorkspaceStorageCache");
+
+         //TODO EXOJCR-1784
+         ArrayList cacheParams = new ArrayList();
+         cacheParams.add(new SimpleParameterEntry("maxSize", "2000"));
+         cacheParams.add(new SimpleParameterEntry("liveTime", "20m"));
+         cacheEntry = new CacheEntry(cacheParams);
+         cacheEntry.setEnabled(cacheEnabled);
+         cacheEntry.setType("org.exoplatform.services.jcr.impl.dataflow.persistent.LinkedWorkspaceStorageCacheImpl");
+      }
+      catch (ClassNotFoundException e)
+      {
+         ArrayList cacheParams = new ArrayList();
+         cacheParams.add(new SimpleParameterEntry("jbosscache-configuration",
+            "conf/standalone/test-jbosscache-config.xml"));
+         cacheParams.add(new SimpleParameterEntry("jbosscache-shareable", Boolean.toString(cacheShared)));
+         cacheEntry = new CacheEntry(cacheParams);
+         cacheEntry
+            .setType("org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache");
+         cacheEntry.setEnabled(cacheEnabled);
+      }
+
       LockManagerEntry lockManagerEntry = new LockManagerEntry();
       lockManagerEntry.putParameterValue("time-out", "15m");
 
@@ -305,6 +347,103 @@
       return workspaceEntry;
    }
 
+   public RepositoryEntry copyRepositoryEntry(RepositoryEntry configuration)
+   {
+      ArrayList<WorkspaceEntry> workspases = new ArrayList<WorkspaceEntry>();
+
+      for (WorkspaceEntry ws : configuration.getWorkspaceEntries())
+      {
+         workspases.add(copyWorkspaceEntry(ws));
+      }
+
+      RepositoryEntry repository = new RepositoryEntry();
+      repository.setSystemWorkspaceName(configuration.getSystemWorkspaceName());
+      repository.setDefaultWorkspaceName(configuration.getDefaultWorkspaceName());
+      repository.setName(configuration.getName());
+      repository.setSessionTimeOut(configuration.getSessionTimeOut());
+      repository.setAuthenticationPolicy(configuration.getAuthenticationPolicy());
+      repository.setSecurityDomain(configuration.getSecurityDomain());
+
+      for (WorkspaceEntry ws : workspases)
+      {
+         repository.addWorkspace(ws);
+      }
+
+      return repository;
+   }
+
+   private WorkspaceEntry copyWorkspaceEntry(WorkspaceEntry wsEntry)
+   {
+      // container entry
+      ArrayList<SimpleParameterEntry> params = new ArrayList();
+      params.addAll(wsEntry.getContainer().getParameters());
+
+      ContainerEntry containerEntry = new ContainerEntry(wsEntry.getContainer().getType(), (ArrayList)params);
+      containerEntry.setParameters(params);
+
+      // value storage
+      ArrayList<ValueStorageEntry> list = new ArrayList<ValueStorageEntry>();
+      if (wsEntry.getContainer().getValueStorages() != null)
+      {
+         for (ValueStorageEntry vse : wsEntry.getContainer().getValueStorages())
+         {
+            ArrayList<ValueStorageFilterEntry> vsparams = new ArrayList<ValueStorageFilterEntry>();
+
+            for (ValueStorageFilterEntry vsfe : vse.getFilters())
+            {
+               ValueStorageFilterEntry filterEntry = new ValueStorageFilterEntry();
+               filterEntry.setPropertyType(vsfe.getPropertyType());
+               filterEntry.setPropertyName(vsfe.getPropertyName());
+               filterEntry.setMinValueSize(vsfe.getMinValueSize());
+               filterEntry.setAncestorPath(vsfe.getAncestorPath());
+               vsparams.add(filterEntry);
+            }
+
+            ValueStorageEntry valueStorageEntry = new ValueStorageEntry(vse.getType(), vsparams);
+            ArrayList<SimpleParameterEntry> spe = new ArrayList<SimpleParameterEntry>();
+            spe.addAll(vse.getParameters());
+            valueStorageEntry.setId(vse.getId());
+            valueStorageEntry.setParameters(spe);
+            valueStorageEntry.setFilters(vsparams);
+
+            // containerEntry.setValueStorages();
+            containerEntry.setParameters(params);
+            list.add(valueStorageEntry);
+         }
+      }
+
+      containerEntry.setValueStorages(list);
+
+      // Indexer
+      params = new ArrayList();
+      params.addAll(wsEntry.getQueryHandler().getParameters());
+      QueryHandlerEntry qEntry = new QueryHandlerEntry(wsEntry.getQueryHandler().getType(), params);
+
+      // Cache
+      ArrayList cacheParams = new ArrayList();
+      cacheParams.addAll(wsEntry.getCache().getParameters());
+      CacheEntry cacheEntry = new CacheEntry(cacheParams);
+      cacheEntry.setEnabled(wsEntry.getCache().getEnabled());
+      cacheEntry.setType(wsEntry.getCache().getType());
+
+      // Lock
+      LockManagerEntry lockManagerEntry = new LockManagerEntry();
+      lockManagerEntry.setType(wsEntry.getLockManager().getType());
+      ArrayList lockParams = new ArrayList();
+      lockParams.addAll(wsEntry.getLockManager().getParameters());
+      lockManagerEntry.setParameters(lockParams);
+      
+      WorkspaceEntry workspaceEntry = new WorkspaceEntry();
+      workspaceEntry.setContainer(containerEntry);
+      workspaceEntry.setCache(cacheEntry);
+      workspaceEntry.setQueryHandler(qEntry);
+      workspaceEntry.setLockManager(lockManagerEntry);
+      workspaceEntry.setName(wsEntry.getName());
+      workspaceEntry.setUniqueName(wsEntry.getUniqueName());
+
+      return workspaceEntry;
+   }
+
    public boolean ispnCacheEnabled()
    {
       try

Modified: jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -120,6 +120,7 @@
          configureJDBCCacheLoader(config.getLockManager());
 
          cache = factory.createCache("L" + config.getUniqueName().replace("_", ""), config.getLockManager());
+         PrivilegedISPNCacheHelper.start(cache);
       }
       else
       {

Modified: jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/core/query/ispn/ISPNIndexChangesFilter.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/core/query/ispn/ISPNIndexChangesFilter.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/core/query/ispn/ISPNIndexChangesFilter.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -30,6 +30,7 @@
 import org.exoplatform.services.jcr.impl.core.query.lucene.IndexInfos;
 import org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex;
 import org.exoplatform.services.jcr.infinispan.ISPNCacheFactory;
+import org.exoplatform.services.jcr.infinispan.PrivilegedISPNCacheHelper;
 import org.exoplatform.services.jcr.util.IdGenerator;
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
@@ -98,6 +99,7 @@
       ISPNCacheFactory<Serializable, Object> factory = new ISPNCacheFactory<Serializable, Object>(cfm);
       config.putParameterValue(PARAM_INFINISPAN_CACHESTORE_CLASS, IndexerCacheStore.class.getName());
       this.cache = factory.createCache("Indexer_" + searchManager.getWsId(), config);
+      PrivilegedISPNCacheHelper.start(this.cache);
 
       CacheLoaderManager cacheLoaderManager =
          cache.getAdvancedCache().getComponentRegistry().getComponent(CacheLoaderManager.class);
@@ -176,4 +178,12 @@
    {
       return true;
    }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void close()
+   {
+      PrivilegedISPNCacheHelper.stop(cache);
+   }
 }

Modified: jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/BufferedISPNCache.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/BufferedISPNCache.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/BufferedISPNCache.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -18,9 +18,9 @@
  */
 package org.exoplatform.services.jcr.impl.dataflow.persistent.infinispan;
 
-import org.exoplatform.commons.utils.SecurityHelper;
 import org.exoplatform.services.jcr.datamodel.ItemData;
 import org.exoplatform.services.jcr.impl.core.itemfilters.QPathEntryFilter;
+import org.exoplatform.services.jcr.infinispan.PrivilegedISPNCacheHelper;
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
 import org.infinispan.AdvancedCache;
@@ -33,7 +33,6 @@
 import org.infinispan.util.concurrent.NotifyingFuture;
 import org.infinispan.util.concurrent.locks.LockManager;
 
-import java.security.PrivilegedAction;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -953,15 +952,7 @@
     */
    public void start()
    {
-      PrivilegedAction<Object> action = new PrivilegedAction<Object>()
-      {
-         public Object run()
-         {
-            parentCache.start();
-            return null;
-         }
-      };
-      SecurityHelper.doPrivilegedAction(action);
+      PrivilegedISPNCacheHelper.start((Cache)parentCache);
    }
 
    /**
@@ -969,15 +960,7 @@
     */
    public void stop()
    {
-      PrivilegedAction<Object> action = new PrivilegedAction<Object>()
-      {
-         public Object run()
-         {
-            parentCache.stop();
-            return null;
-         }
-      };
-      SecurityHelper.doPrivilegedAction(action);
+      PrivilegedISPNCacheHelper.stop((Cache)parentCache);
    }
 
    /**

Modified: jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java
===================================================================
--- jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java	2012-03-06 12:44:11 UTC (rev 5814)
+++ jcr/branches/1.15.x/exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java	2012-03-06 13:13:36 UTC (rev 5815)
@@ -58,6 +58,7 @@
 import org.infinispan.notifications.Listener;
 import org.infinispan.notifications.cachelistener.annotation.CacheEntryModified;
 import org.infinispan.notifications.cachelistener.event.CacheEntryModifiedEvent;
+import org.picocontainer.Startable;
 
 import java.io.File;
 import java.io.IOException;
@@ -98,7 +99,7 @@
  * @author <a href="anatoliy.bazko at exoplatform.org">Anatoliy Bazko</a>
  * @version $Id: ISPNCacheWorkspaceStorageCache.java 3514 2010-11-22 16:14:36Z nzamosenchuk $
  */
-public class ISPNCacheWorkspaceStorageCache implements WorkspaceStorageCache, Backupable
+public class ISPNCacheWorkspaceStorageCache implements WorkspaceStorageCache, Backupable, Startable
 {
    private static final Log LOG = ExoLogger.getLogger("exo.jcr.component.core.impl.infinispan.v5.ISPNCacheWorkspaceStorageCache");
 
@@ -477,6 +478,8 @@
       }
       this.cache = new BufferedISPNCache(parentCache, allowLocalChanges);
       cache.addListener(new CacheEventListener());
+
+      this.cache.start();
    }
 
    /**
@@ -1647,5 +1650,20 @@
             onCacheEntryUpdated(value);
          }
       }
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void start()
+   {
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void stop()
+   {
+      cache.stop();
    }   
 }



More information about the exo-jcr-commits mailing list