exo-jcr SVN: r4167 - in jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl: core/query/lucene and 1 other directories.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-03-23 11:10:46 -0400 (Wed, 23 Mar 2011)
New Revision: 4167
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SystemSearchManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/MultiIndex.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java
Log:
EXOJCR-1266: no need to stop SearchManager, just stop IndexMerger and flush volatile index
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java 2011-03-23 13:00:02 UTC (rev 4166)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java 2011-03-23 15:10:46 UTC (rev 4167)
@@ -1130,8 +1130,12 @@
throw new SuspendException("Component already suspended.");
}
+ if (handler instanceof Suspendable)
+ {
+ ((Suspendable)handler).suspend();
+ }
+
isSuspended = true;
- stop();
}
protected void resumeLocally() throws ResumeException
@@ -1141,7 +1145,11 @@
throw new ResumeException("Component is not suspended.");
}
- start();
+ if (handler instanceof Suspendable)
+ {
+ ((Suspendable)handler).resume();
+ }
+
isSuspended = false;
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SystemSearchManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SystemSearchManager.java 2011-03-23 13:00:02 UTC (rev 4166)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SystemSearchManager.java 2011-03-23 15:10:46 UTC (rev 4167)
@@ -27,7 +27,6 @@
import org.exoplatform.services.jcr.datamodel.NodeData;
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.impl.Constants;
-import org.exoplatform.services.jcr.impl.backup.SuspendException;
import org.exoplatform.services.jcr.impl.core.NamespaceRegistryImpl;
import org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
import org.exoplatform.services.log.ExoLogger;
@@ -133,11 +132,4 @@
{
return super.getStorageName() + "_" + INDEX_DIR_SUFFIX;
}
-
- @Override
- protected void suspendLocally() throws SuspendException
- {
- super.suspendLocally();
- isStarted = false;
- }
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/MultiIndex.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/MultiIndex.java 2011-03-23 13:00:02 UTC (rev 4166)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/MultiIndex.java 2011-03-23 15:10:46 UTC (rev 4167)
@@ -20,7 +20,6 @@
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermDocs;
-import org.apache.lucene.store.AlreadyClosedException;
import org.apache.lucene.store.Directory;
import org.exoplatform.commons.utils.PrivilegedFileHelper;
import org.exoplatform.commons.utils.SecurityHelper;
@@ -29,7 +28,9 @@
import org.exoplatform.services.jcr.datamodel.NodeData;
import org.exoplatform.services.jcr.datamodel.NodeDataIndexing;
import org.exoplatform.services.jcr.impl.Constants;
+import org.exoplatform.services.jcr.impl.backup.ResumeException;
import org.exoplatform.services.jcr.impl.backup.SuspendException;
+import org.exoplatform.services.jcr.impl.backup.Suspendable;
import org.exoplatform.services.jcr.impl.core.query.IndexRecovery;
import org.exoplatform.services.jcr.impl.core.query.IndexerIoMode;
import org.exoplatform.services.jcr.impl.core.query.IndexerIoModeHandler;
@@ -98,7 +99,7 @@
* thread and reader threads is done using {@link #updateMonitor} and
* {@link #updateInProgress}.
*/
-public class MultiIndex implements IndexerIoModeListener, IndexUpdateMonitorListener
+public class MultiIndex implements IndexerIoModeListener, IndexUpdateMonitorListener, Suspendable
{
/**
@@ -3619,4 +3620,38 @@
{
}
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public void suspend() throws SuspendException
+ {
+ try
+ {
+ flush();
+ }
+ catch (IOException e)
+ {
+ throw new SuspendException(e);
+ }
+ merger.dispose();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void resume() throws ResumeException
+ {
+ try
+ {
+ indexNames.read();
+ refreshIndexList();
+
+ doInitIndexMerger();
+ }
+ catch (IOException e)
+ {
+ throw new ResumeException(e);
+ }
+ }
}
\ No newline at end of file
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java 2011-03-23 13:00:02 UTC (rev 4166)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java 2011-03-23 15:10:46 UTC (rev 4167)
@@ -49,6 +49,9 @@
import org.exoplatform.services.jcr.datamodel.PropertyData;
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.impl.Constants;
+import org.exoplatform.services.jcr.impl.backup.ResumeException;
+import org.exoplatform.services.jcr.impl.backup.SuspendException;
+import org.exoplatform.services.jcr.impl.backup.Suspendable;
import org.exoplatform.services.jcr.impl.core.LocationFactory;
import org.exoplatform.services.jcr.impl.core.SessionDataManager;
import org.exoplatform.services.jcr.impl.core.SessionImpl;
@@ -96,7 +99,7 @@
* Implements a {@link org.apache.jackrabbit.core.query.QueryHandler} using
* Lucene.
*/
-public class SearchIndex extends AbstractQueryHandler implements IndexerIoModeListener
+public class SearchIndex extends AbstractQueryHandler implements IndexerIoModeListener, Suspendable
{
private static final DefaultQueryNodeFactory DEFAULT_QUERY_NODE_FACTORY = new DefaultQueryNodeFactory();
@@ -2958,4 +2961,26 @@
checkOpen();
index.setOnline(isOnline);
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public void suspend() throws SuspendException
+ {
+ if (index instanceof Suspendable)
+ {
+ ((Suspendable)index).suspend();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void resume() throws ResumeException
+ {
+ if (index instanceof Suspendable)
+ {
+ ((Suspendable)index).resume();
+ }
+ }
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java 2011-03-23 13:00:02 UTC (rev 4166)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java 2011-03-23 15:10:46 UTC (rev 4167)
@@ -1178,8 +1178,8 @@
throw new ResumeException("Component is not suspended.");
}
+ latcher.countDown();
isSuspended = false;
- latcher.countDown();
}
/**
15 years, 1 month
exo-jcr SVN: r4166 - in jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl: dataflow and 2 other directories.
by do-not-reply@jboss.org
Author: sergiykarpenko
Date: 2011-03-23 09:00:02 -0400 (Wed, 23 Mar 2011)
New Revision: 4166
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/DefaultItemDataCopyVisitor.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
Log:
EXOJCR-1234: getNextChildOrderNum() small fixes
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2011-03-23 12:08:33 UTC (rev 4165)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2011-03-23 13:00:02 UTC (rev 4166)
@@ -968,7 +968,7 @@
int lastOrderNumber = changesLog.getLastChildOrderNumber(parent.getIdentifier());
int lastPersistedNodeOrderNumber = transactionableManager.getLastOrderNumber(parent);
- if (lastOrderNumber != -1 && lastPersistedNodeOrderNumber < lastOrderNumber)
+ if (lastPersistedNodeOrderNumber < lastOrderNumber)
{
return lastOrderNumber;
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/DefaultItemDataCopyVisitor.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/DefaultItemDataCopyVisitor.java 2011-03-23 12:08:33 UTC (rev 4165)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/DefaultItemDataCopyVisitor.java 2011-03-23 13:00:02 UTC (rev 4166)
@@ -264,7 +264,7 @@
protected int calculateNewNodeOrderNumber() throws RepositoryException
{
- return (dataManager.getLastOrderNumber(curParent()))+1;
+ return dataManager.getLastOrderNumber(curParent()) + 1;
}
protected QPath calculateNewNodePath(NodeData node, int level) throws RepositoryException
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java 2011-03-23 12:08:33 UTC (rev 4165)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java 2011-03-23 13:00:02 UTC (rev 4166)
@@ -121,16 +121,13 @@
int txLastOrderNumber = -1;
for (ItemState change : transactionLog.getAllStates())
{
- if (change.isNode() && change.isPersisted()
+ if (change.isNode() && change.isPersisted() && change.isAdded()
&& change.getData().getParentIdentifier().equals(parent.getIdentifier()))
{
- if (change.isAdded())
+ int orderNumber = ((NodeData)change.getData()).getOrderNumber();
+ if (orderNumber > txLastOrderNumber)
{
- int orderNumber = ((NodeData)change.getData()).getOrderNumber();
- if (orderNumber > txLastOrderNumber)
- {
- txLastOrderNumber = orderNumber;
- }
+ txLastOrderNumber = orderNumber;
}
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2011-03-23 12:08:33 UTC (rev 4165)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2011-03-23 13:00:02 UTC (rev 4166)
@@ -470,6 +470,11 @@
findNodesByParentId.close();
}
+ if (findLastOrderNumberByParentId != null)
+ {
+ findLastOrderNumberByParentId.close();
+ }
+
if (findNodesCountByParentId != null)
{
findNodesCountByParentId.close();
@@ -945,16 +950,9 @@
ResultSet count = findLastOrderNumberByParentIdentifier(getInternalId(parent.getIdentifier()));
try
{
- if (count.next())
+ if (count.next() && count.getInt(1) > 0)
{
- if (count.getInt(1) > 0)
- {
- return count.getInt(2);
- }
- else
- {
- return -1;
- }
+ return count.getInt(2);
}
else
{
15 years, 1 month
exo-jcr SVN: r4165 - in jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock: jbosscache and 1 other directory.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-03-23 08:08:33 -0400 (Wed, 23 Mar 2011)
New Revision: 4165
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java
Log:
EXOJCR-1170: no need to clean cache if repository is dropped
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java 2011-03-23 10:42:41 UTC (rev 4164)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java 2011-03-23 12:08:33 UTC (rev 4165)
@@ -38,6 +38,7 @@
import org.exoplatform.services.naming.InitialContextInitializer;
import org.exoplatform.services.transaction.TransactionService;
import org.infinispan.Cache;
+import org.infinispan.lifecycle.ComponentStatus;
import java.io.Serializable;
import java.security.AccessController;
@@ -416,6 +417,9 @@
@Override
protected void cleanCacheDirectly()
{
- cache.clear();
+ if (cache.getStatus() == ComponentStatus.RUNNING)
+ {
+ cache.clear();
+ }
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java 2011-03-23 10:42:41 UTC (rev 4164)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java 2011-03-23 12:08:33 UTC (rev 4165)
@@ -39,6 +39,7 @@
import org.exoplatform.services.transaction.TransactionService;
import org.jboss.cache.Cache;
import org.jboss.cache.CacheSPI;
+import org.jboss.cache.CacheStatus;
import org.jboss.cache.Fqn;
import org.jboss.cache.Node;
import org.jboss.cache.config.CacheLoaderConfig;
@@ -590,7 +591,10 @@
@Override
protected void cleanCacheDirectly()
{
- cache.removeNode(lockRoot);
- createStructuredNode(lockRoot);
+ if (cache.getCacheStatus() != CacheStatus.STARTED)
+ {
+ cache.removeNode(lockRoot);
+ createStructuredNode(lockRoot);
+ }
}
}
15 years, 1 month
exo-jcr SVN: r4164 - in jcr/trunk: exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache and 1 other directories.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-03-23 06:42:41 -0400 (Wed, 23 Mar 2011)
New Revision: 4164
Added:
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRDBMSRestore.java
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRDBMSRestore.java
Removed:
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRestoreSameConfig.java
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRestoreSameConfig.java
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java
Log:
EXOJCR-1170: no need to clean cache if repository is dropped, no need to remove repository/workspace if we have deal with RDBMS restore
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java 2011-03-22 16:14:38 UTC (rev 4163)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -49,6 +49,7 @@
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.infinispan.Cache;
+import org.infinispan.lifecycle.ComponentStatus;
import java.io.File;
import java.io.IOException;
@@ -1153,7 +1154,10 @@
*/
public void clean() throws BackupException
{
- cache.clear();
+ if (cache.getStatus() == ComponentStatus.RUNNING)
+ {
+ cache.clear();
+ }
}
/**
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java 2011-03-22 16:14:38 UTC (rev 4163)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -49,6 +49,7 @@
import org.exoplatform.services.log.Log;
import org.exoplatform.services.transaction.TransactionService;
import org.jboss.cache.Cache;
+import org.jboss.cache.CacheStatus;
import org.jboss.cache.Fqn;
import org.jboss.cache.Node;
import org.jboss.cache.config.Configuration.CacheMode;
@@ -1634,22 +1635,25 @@
*/
private void cleanCache()
{
- cache.beginTransaction();
+ if (cache.getCacheStatus() == CacheStatus.STARTED)
+ {
+ cache.beginTransaction();
- cache.removeNode(itemsRoot);
- cache.removeNode(refRoot);
- cache.removeNode(childNodes);
- cache.removeNode(childProps);
- cache.removeNode(childNodesList);
- cache.removeNode(childPropsList);
+ cache.removeNode(itemsRoot);
+ cache.removeNode(refRoot);
+ cache.removeNode(childNodes);
+ cache.removeNode(childProps);
+ cache.removeNode(childNodesList);
+ cache.removeNode(childPropsList);
- cache.commitTransaction();
+ cache.commitTransaction();
- createResidentNode(childNodes);
- createResidentNode(refRoot);
- createResidentNode(childNodesList);
- createResidentNode(childProps);
- createResidentNode(childPropsList);
- createResidentNode(itemsRoot);
+ createResidentNode(childNodes);
+ createResidentNode(refRoot);
+ createResidentNode(childNodesList);
+ createResidentNode(childProps);
+ createResidentNode(childPropsList);
+ createResidentNode(itemsRoot);
+ }
}
}
Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java 2011-03-22 16:14:38 UTC (rev 4163)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -61,8 +61,6 @@
import org.exoplatform.services.jcr.util.IdGenerator;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
-import org.exoplatform.ws.frameworks.json.impl.JsonException;
-import org.exoplatform.ws.frameworks.json.impl.JsonGeneratorImpl;
import org.picocontainer.Startable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -1555,31 +1553,9 @@
workspacesMapping.put(wsEntry.getName(), backups.get(wsEntry.getName()));
}
}
+
- // check if need to restore with same configuration or not
- boolean isSameConfig = false;
- try
- {
- String newConf = new JsonGeneratorImpl().createJsonObject(repositoryEntry).toString();
- String currnetConf =
- new JsonGeneratorImpl().createJsonObject(
- repoService.getRepository(repositoryEntry.getName()).getConfiguration()).toString();
- isSameConfig = newConf.equals(currnetConf);
- }
- catch (JsonException e)
- {
- this.log.error("Can't get JSON object from wokrspace configuration", e);
- }
- catch (RepositoryException e)
- {
- this.log.error(e);
- }
- catch (RepositoryConfigurationException e)
- {
- this.log.error(e);
- }
-
// check if we have deal with RDBMS backup
boolean isRDBMSBackup = false;
try
@@ -1594,9 +1570,8 @@
}
JobRepositoryRestore jobExistedRepositoryRestore =
- isSameConfig && isRDBMSBackup ? new JobExistedRepositoryRestoreSameConfig(repoService, this, repositoryEntry,
- workspacesMapping, rblog) : new JobExistedRepositoryRestore(repoService, this, repositoryEntry,
- workspacesMapping, rblog);
+ isRDBMSBackup ? new JobExistedRepositoryRDBMSRestore(repoService, this, repositoryEntry, workspacesMapping,
+ rblog) : new JobExistedRepositoryRestore(repoService, this, repositoryEntry, workspacesMapping, rblog);
restoreRepositoryJobs.add(jobExistedRepositoryRestore);
if (asynchronous)
@@ -1661,38 +1636,6 @@
throw new WorkspaceRestoreException("Repository \"" + repositoryName + "\" should be existed", e);
}
- // check if need to restore with same configuration or not
- boolean isSameConfig = false;
- try
- {
- WorkspaceEntry currentWsEntry = null;
- for (WorkspaceEntry wsEntry : repoService.getRepository(repositoryName).getConfiguration().getWorkspaceEntries())
- {
- if (wsEntry.getName().equals(workspaceEntry.getName()))
- {
- currentWsEntry = wsEntry;
- break;
- }
- }
-
- String newConf = new JsonGeneratorImpl().createJsonObject(workspaceEntry).toString();
- String currnetConf = new JsonGeneratorImpl().createJsonObject(currentWsEntry).toString();
-
- isSameConfig = newConf.equals(currnetConf);
- }
- catch (JsonException e)
- {
- this.log.error("Can't get JSON object from wokrspace configuration", e);
- }
- catch (RepositoryException e)
- {
- this.log.error(e);
- }
- catch (RepositoryConfigurationException e)
- {
- this.log.error(e);
- }
-
// check if we have deal with RDBMS backup
boolean isRDBMSBackup = false;
try
@@ -1707,9 +1650,8 @@
}
JobWorkspaceRestore jobRestore =
- isSameConfig && isRDBMSBackup ? new JobExistedWorkspaceRestoreSameConfig(repoService, this, repositoryName,
- log, workspaceEntry) : new JobExistedWorkspaceRestore(repoService, this, repositoryName, log,
- workspaceEntry);
+ isRDBMSBackup ? new JobExistedWorkspaceRDBMSRestore(repoService, this, repositoryName, log,
+ workspaceEntry) : new JobExistedWorkspaceRestore(repoService, this, repositoryName, log, workspaceEntry);
restoreJobs.add(jobRestore);
if (asynchronous)
Copied: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRDBMSRestore.java (from rev 4156, jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRestoreSameConfig.java)
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRDBMSRestore.java (rev 0)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRDBMSRestore.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -0,0 +1,244 @@
+/*
+ * Copyright (C) 2003-2010 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.services.jcr.ext.backup.impl;
+
+import org.exoplatform.commons.utils.SecurityHelper;
+import org.exoplatform.services.jcr.RepositoryService;
+import org.exoplatform.services.jcr.config.RepositoryEntry;
+import org.exoplatform.services.jcr.config.WorkspaceEntry;
+import org.exoplatform.services.jcr.dataflow.DataManager;
+import org.exoplatform.services.jcr.ext.backup.BackupChainLog;
+import org.exoplatform.services.jcr.ext.backup.RepositoryBackupChainLog;
+import org.exoplatform.services.jcr.ext.backup.RepositoryRestoreExeption;
+import org.exoplatform.services.jcr.impl.backup.BackupException;
+import org.exoplatform.services.jcr.impl.backup.Backupable;
+import org.exoplatform.services.jcr.impl.backup.DataRestor;
+import org.exoplatform.services.jcr.impl.backup.JCRRestor;
+import org.exoplatform.services.jcr.impl.backup.JdbcBackupable;
+import org.exoplatform.services.jcr.impl.backup.ResumeException;
+import org.exoplatform.services.jcr.impl.backup.Suspendable;
+import org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
+import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer;
+import org.exoplatform.services.jcr.impl.util.io.FileCleanerHolder;
+
+import java.io.File;
+import java.security.PrivilegedExceptionAction;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.naming.InitialContext;
+import javax.naming.NameNotFoundException;
+import javax.sql.DataSource;
+
+/**
+ * Created by The eXo Platform SAS.
+ *
+ * Date: 24 01 2011
+ *
+ * @author <a href="mailto:anatoliy.bazko@exoplatform.com.ua">Anatoliy Bazko</a>
+ * @version $Id: JobExistedRepositoryRestoreSameConfig.java 34360 2010-11-11 11:11:11Z tolusha $
+ */
+public class JobExistedRepositoryRDBMSRestore extends JobRepositoryRestore
+{
+
+ /**
+ * JobExistedRepositoryRDBMSRestore constructor.
+ */
+ public JobExistedRepositoryRDBMSRestore(RepositoryService repoService, BackupManagerImpl backupManagerImpl,
+ RepositoryEntry repositoryEntry, Map<String, BackupChainLog> workspacesMapping,
+ RepositoryBackupChainLog backupChainLog)
+ {
+ super(repoService, backupManagerImpl, repositoryEntry, workspacesMapping, backupChainLog);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void restoreRepository() throws RepositoryRestoreExeption
+ {
+ // list of data restorers
+ List<DataRestor> dataRestorer = new ArrayList<DataRestor>();
+
+ // the list of components to resume
+ List<Suspendable> resumeComponents = new ArrayList<Suspendable>();
+
+ try
+ {
+ WorkspaceEntry wsEntry = repositoryEntry.getWorkspaceEntries().get(0);
+
+ // define one common connection for all restores and cleaners for single db case
+ Connection jdbcConn = null;
+ if (!Boolean.parseBoolean(wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.MULTIDB)))
+ {
+ String dsName = wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.SOURCE_NAME);
+
+ final DataSource ds = (DataSource)new InitialContext().lookup(dsName);
+ if (ds == null)
+ {
+ throw new NameNotFoundException("Data source " + dsName + " not found");
+ }
+
+ jdbcConn = SecurityHelper.doPrivilegedSQLExceptionAction(new PrivilegedExceptionAction<Connection>()
+ {
+ public Connection run() throws Exception
+ {
+ return ds.getConnection();
+
+ }
+ });
+ jdbcConn.setAutoCommit(false);
+ }
+
+ // suspend all components
+ for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
+ {
+ List<Suspendable> suspendableComponents =
+ repositoryService.getRepository(this.repositoryEntry.getName()).getWorkspaceContainer(wEntry.getName())
+ .getComponentInstancesOfType(Suspendable.class);
+
+ for (Suspendable component : suspendableComponents)
+ {
+ component.suspend();
+ resumeComponents.add(component);
+ }
+ }
+
+ // collect all restorers
+ for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
+ {
+ // get all backupable components
+ List<Backupable> backupable =
+ repositoryService.getRepository(this.repositoryEntry.getName()).getWorkspaceContainer(wEntry.getName())
+ .getComponentInstancesOfType(Backupable.class);
+
+ File fullBackupDir =
+ JCRRestor.getFullBackupFile(workspacesMapping.get(wEntry.getName()).getBackupConfig().getBackupDir());
+
+ for (Backupable component : backupable)
+ {
+ if (component instanceof JdbcBackupable && jdbcConn != null)
+ {
+ dataRestorer.add(((JdbcBackupable)component).getDataRestorer(fullBackupDir, jdbcConn));
+ }
+ else
+ {
+ dataRestorer.add(component.getDataRestorer(fullBackupDir));
+ }
+ }
+ }
+
+ for (DataRestor restorer : dataRestorer)
+ {
+ restorer.clean();
+ }
+
+ for (DataRestor restorer : dataRestorer)
+ {
+ restorer.restore();
+ }
+
+ for (DataRestor restorer : dataRestorer)
+ {
+ restorer.commit();
+ }
+
+ // resume components
+ for (int i = 0; i < resumeComponents.size(); i++)
+ {
+ try
+ {
+ resumeComponents.remove(i).resume();
+ }
+ catch (ResumeException e)
+ {
+ log.error("Can't resume component", e);
+ }
+ }
+
+ // incremental restore
+ for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
+ {
+ repositoryService.getRepository(this.repositoryEntry.getName()).getWorkspaceContainer(wEntry.getName())
+ .getComponentInstancesOfType(Backupable.class);
+
+ DataManager dataManager =
+ (WorkspacePersistentDataManager)repositoryService.getRepository(this.repositoryEntry.getName())
+ .getWorkspaceContainer(wEntry.getName()).getComponent(WorkspacePersistentDataManager.class);
+
+ FileCleanerHolder fileCleanHolder =
+ (FileCleanerHolder)repositoryService.getRepository(this.repositoryEntry.getName())
+ .getWorkspaceContainer(wEntry.getName()).getComponent(FileCleanerHolder.class);
+
+ File storageDir =
+ JCRRestor.getFullBackupFile(workspacesMapping.get(wEntry.getName()).getBackupConfig().getBackupDir());
+
+ JCRRestor restorer = new JCRRestor(dataManager, fileCleanHolder.getFileCleaner());
+ for (File incrBackupFile : JCRRestor.getIncrementalFiles(storageDir))
+ {
+ restorer.incrementalRestore(incrBackupFile);
+ }
+ }
+ }
+ catch (Throwable t)
+ {
+ // rollback
+ for (DataRestor restorer : dataRestorer)
+ {
+ try
+ {
+ restorer.rollback();
+ }
+ catch (BackupException e)
+ {
+ log.error("Can't rollback changes", e);
+ }
+ }
+
+ throw new RepositoryRestoreExeption("Repository " + repositoryEntry.getName() + " was not restored", t);
+ }
+ finally
+ {
+ // close
+ for (DataRestor restorer : dataRestorer)
+ {
+ try
+ {
+ restorer.close();
+ }
+ catch (BackupException e)
+ {
+ log.error("Can't close restorer", e);
+ }
+ }
+
+ for (Suspendable component : resumeComponents)
+ {
+ try
+ {
+ component.resume();
+ }
+ catch (ResumeException e)
+ {
+ log.error("Can't resume component " + component.getClass(), e);
+ }
+ }
+ }
+ }
+}
Deleted: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRestoreSameConfig.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRestoreSameConfig.java 2011-03-22 16:14:38 UTC (rev 4163)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedRepositoryRestoreSameConfig.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -1,244 +0,0 @@
-/*
- * Copyright (C) 2003-2010 eXo Platform SAS.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see<http://www.gnu.org/licenses/>.
- */
-package org.exoplatform.services.jcr.ext.backup.impl;
-
-import org.exoplatform.commons.utils.SecurityHelper;
-import org.exoplatform.services.jcr.RepositoryService;
-import org.exoplatform.services.jcr.config.RepositoryEntry;
-import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.dataflow.DataManager;
-import org.exoplatform.services.jcr.ext.backup.BackupChainLog;
-import org.exoplatform.services.jcr.ext.backup.RepositoryBackupChainLog;
-import org.exoplatform.services.jcr.ext.backup.RepositoryRestoreExeption;
-import org.exoplatform.services.jcr.impl.backup.BackupException;
-import org.exoplatform.services.jcr.impl.backup.Backupable;
-import org.exoplatform.services.jcr.impl.backup.DataRestor;
-import org.exoplatform.services.jcr.impl.backup.JCRRestor;
-import org.exoplatform.services.jcr.impl.backup.JdbcBackupable;
-import org.exoplatform.services.jcr.impl.backup.ResumeException;
-import org.exoplatform.services.jcr.impl.backup.Suspendable;
-import org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
-import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer;
-import org.exoplatform.services.jcr.impl.util.io.FileCleanerHolder;
-
-import java.io.File;
-import java.security.PrivilegedExceptionAction;
-import java.sql.Connection;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.naming.InitialContext;
-import javax.naming.NameNotFoundException;
-import javax.sql.DataSource;
-
-/**
- * Created by The eXo Platform SAS.
- *
- * Date: 24 01 2011
- *
- * @author <a href="mailto:anatoliy.bazko@exoplatform.com.ua">Anatoliy Bazko</a>
- * @version $Id: JobExistedRepositoryRestoreSameConfig.java 34360 2010-11-11 11:11:11Z tolusha $
- */
-public class JobExistedRepositoryRestoreSameConfig extends JobRepositoryRestore
-{
-
- /**
- * JobExistedRepositoryRestoreSameConfig constructor.
- */
- public JobExistedRepositoryRestoreSameConfig(RepositoryService repoService, BackupManagerImpl backupManagerImpl,
- RepositoryEntry repositoryEntry, Map<String, BackupChainLog> workspacesMapping,
- RepositoryBackupChainLog backupChainLog)
- {
- super(repoService, backupManagerImpl, repositoryEntry, workspacesMapping, backupChainLog);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected void restoreRepository() throws RepositoryRestoreExeption
- {
- // list of data restorers
- List<DataRestor> dataRestorer = new ArrayList<DataRestor>();
-
- // the list of components to resume
- List<Suspendable> resumeComponents = new ArrayList<Suspendable>();
-
- try
- {
- WorkspaceEntry wsEntry = repositoryEntry.getWorkspaceEntries().get(0);
-
- // define one common connection for all restores and cleaners for single db case
- Connection jdbcConn = null;
- if (!Boolean.parseBoolean(wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.MULTIDB)))
- {
- String dsName = wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.SOURCE_NAME);
-
- final DataSource ds = (DataSource)new InitialContext().lookup(dsName);
- if (ds == null)
- {
- throw new NameNotFoundException("Data source " + dsName + " not found");
- }
-
- jdbcConn = SecurityHelper.doPrivilegedSQLExceptionAction(new PrivilegedExceptionAction<Connection>()
- {
- public Connection run() throws Exception
- {
- return ds.getConnection();
-
- }
- });
- jdbcConn.setAutoCommit(false);
- }
-
- // suspend all components
- for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
- {
- List<Suspendable> suspendableComponents =
- repositoryService.getRepository(this.repositoryEntry.getName()).getWorkspaceContainer(wEntry.getName())
- .getComponentInstancesOfType(Suspendable.class);
-
- for (Suspendable component : suspendableComponents)
- {
- component.suspend();
- resumeComponents.add(component);
- }
- }
-
- // collect all restorers
- for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
- {
- // get all backupable components
- List<Backupable> backupable =
- repositoryService.getRepository(this.repositoryEntry.getName()).getWorkspaceContainer(wEntry.getName())
- .getComponentInstancesOfType(Backupable.class);
-
- File fullBackupDir =
- JCRRestor.getFullBackupFile(workspacesMapping.get(wEntry.getName()).getBackupConfig().getBackupDir());
-
- for (Backupable component : backupable)
- {
- if (component instanceof JdbcBackupable && jdbcConn != null)
- {
- dataRestorer.add(((JdbcBackupable)component).getDataRestorer(fullBackupDir, jdbcConn));
- }
- else
- {
- dataRestorer.add(component.getDataRestorer(fullBackupDir));
- }
- }
- }
-
- for (DataRestor restorer : dataRestorer)
- {
- restorer.clean();
- }
-
- for (DataRestor restorer : dataRestorer)
- {
- restorer.restore();
- }
-
- for (DataRestor restorer : dataRestorer)
- {
- restorer.commit();
- }
-
- // resume components
- for (int i = 0; i < resumeComponents.size(); i++)
- {
- try
- {
- resumeComponents.remove(i).resume();
- }
- catch (ResumeException e)
- {
- log.error("Can't resume component", e);
- }
- }
-
- // incremental restore
- for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
- {
- repositoryService.getRepository(this.repositoryEntry.getName()).getWorkspaceContainer(wEntry.getName())
- .getComponentInstancesOfType(Backupable.class);
-
- DataManager dataManager =
- (WorkspacePersistentDataManager)repositoryService.getRepository(this.repositoryEntry.getName())
- .getWorkspaceContainer(wEntry.getName()).getComponent(WorkspacePersistentDataManager.class);
-
- FileCleanerHolder fileCleanHolder =
- (FileCleanerHolder)repositoryService.getRepository(this.repositoryEntry.getName())
- .getWorkspaceContainer(wEntry.getName()).getComponent(FileCleanerHolder.class);
-
- File storageDir =
- JCRRestor.getFullBackupFile(workspacesMapping.get(wEntry.getName()).getBackupConfig().getBackupDir());
-
- JCRRestor restorer = new JCRRestor(dataManager, fileCleanHolder.getFileCleaner());
- for (File incrBackupFile : JCRRestor.getIncrementalFiles(storageDir))
- {
- restorer.incrementalRestore(incrBackupFile);
- }
- }
- }
- catch (Throwable t)
- {
- // rollback
- for (DataRestor restorer : dataRestorer)
- {
- try
- {
- restorer.rollback();
- }
- catch (BackupException e)
- {
- log.error("Can't rollback changes", e);
- }
- }
-
- throw new RepositoryRestoreExeption("Repository " + repositoryEntry.getName() + " was not restored", t);
- }
- finally
- {
- // close
- for (DataRestor restorer : dataRestorer)
- {
- try
- {
- restorer.close();
- }
- catch (BackupException e)
- {
- log.error("Can't close restorer", e);
- }
- }
-
- for (Suspendable component : resumeComponents)
- {
- try
- {
- component.resume();
- }
- catch (ResumeException e)
- {
- log.error("Can't resume component " + component.getClass(), e);
- }
- }
- }
- }
-}
Copied: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRDBMSRestore.java (from rev 4156, jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRestoreSameConfig.java)
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRDBMSRestore.java (rev 0)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRDBMSRestore.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2003-2010 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.services.jcr.ext.backup.impl;
+
+import org.exoplatform.services.jcr.RepositoryService;
+import org.exoplatform.services.jcr.config.WorkspaceEntry;
+import org.exoplatform.services.jcr.dataflow.DataManager;
+import org.exoplatform.services.jcr.ext.backup.BackupChainLog;
+import org.exoplatform.services.jcr.ext.backup.BackupManager;
+import org.exoplatform.services.jcr.ext.backup.WorkspaceRestoreException;
+import org.exoplatform.services.jcr.impl.backup.BackupException;
+import org.exoplatform.services.jcr.impl.backup.Backupable;
+import org.exoplatform.services.jcr.impl.backup.DataRestor;
+import org.exoplatform.services.jcr.impl.backup.JCRRestor;
+import org.exoplatform.services.jcr.impl.backup.ResumeException;
+import org.exoplatform.services.jcr.impl.backup.Suspendable;
+import org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
+import org.exoplatform.services.jcr.impl.util.io.FileCleanerHolder;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by The eXo Platform SAS.
+ *
+ * Date: 24 01 2011
+ *
+ * @author <a href="mailto:anatoliy.bazko@exoplatform.com.ua">Anatoliy Bazko</a>
+ * @version $Id: JobExistedWorkspaceRestoreSameConfig.java 34360 2010-11-11 11:11:11Z tolusha $
+ */
+public class JobExistedWorkspaceRDBMSRestore extends JobWorkspaceRestore
+{
+ /**
+ * The logger.
+ */
+ private static Log log = ExoLogger.getLogger("exo.jcr.component.ext.JobExistedWorkspaceRDBMSRestore");
+
+ /**
+ * JobExistedWorkspaceRestore JobExistedWorkspaceRDBMSRestore.
+ */
+ public JobExistedWorkspaceRDBMSRestore(RepositoryService repositoryService, BackupManager backupManager,
+ String repositoryName, BackupChainLog log, WorkspaceEntry wEntry)
+ {
+ super(repositoryService, backupManager, repositoryName, log, wEntry);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void restore() throws WorkspaceRestoreException
+ {
+ // list of data restorers
+ List<DataRestor> dataRestorer = new ArrayList<DataRestor>();
+
+ // the list of components to resume
+ List<Suspendable> resumeComponents = new ArrayList<Suspendable>();
+
+ try
+ {
+ // suspend all components
+ List<Suspendable> suspendableComponents =
+ repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
+ .getComponentInstancesOfType(Suspendable.class);
+
+ for (Suspendable component : suspendableComponents)
+ {
+ component.suspend();
+ resumeComponents.add(component);
+ }
+
+ // get all restorers
+ List<Backupable> backupable =
+ repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
+ .getComponentInstancesOfType(Backupable.class);
+
+ File storageDir = backupChainLog.getBackupConfig().getBackupDir();
+
+ for (Backupable component : backupable)
+ {
+ File fullBackupDir = JCRRestor.getFullBackupFile(storageDir);
+ dataRestorer.add(component.getDataRestorer(fullBackupDir));
+ }
+
+ for (DataRestor restorer : dataRestorer)
+ {
+ restorer.clean();
+ }
+
+ for (DataRestor restorer : dataRestorer)
+ {
+ restorer.restore();
+ }
+
+ for (DataRestor restorer : dataRestorer)
+ {
+ restorer.commit();
+ }
+
+ // resume components
+ for (int i = 0; i < resumeComponents.size(); i++)
+ {
+ try
+ {
+ resumeComponents.remove(i).resume();
+ }
+ catch (ResumeException e)
+ {
+ log.error("Can't resume component", e);
+ }
+ }
+
+ // incremental restore
+ DataManager dataManager =
+ (WorkspacePersistentDataManager)repositoryService.getRepository(repositoryName)
+ .getWorkspaceContainer(wEntry.getName()).getComponent(WorkspacePersistentDataManager.class);
+
+ FileCleanerHolder fileCleanHolder =
+ (FileCleanerHolder)repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
+ .getComponent(FileCleanerHolder.class);
+
+ JCRRestor restorer = new JCRRestor(dataManager, fileCleanHolder.getFileCleaner());
+ for (File incrBackupFile : JCRRestor.getIncrementalFiles(storageDir))
+ {
+ restorer.incrementalRestore(incrBackupFile);
+ }
+ }
+ catch (Throwable t)
+ {
+ // rollback
+ for (DataRestor restorer : dataRestorer)
+ {
+ try
+ {
+ restorer.rollback();
+ }
+ catch (BackupException e)
+ {
+ log.error("Can't rollback changes", e);
+ }
+ }
+
+ throw new WorkspaceRestoreException("Workspace " + wEntry.getName() + " was not restored", t);
+ }
+ finally
+ {
+ // close
+ for (DataRestor restorer : dataRestorer)
+ {
+ try
+ {
+ restorer.close();
+ }
+ catch (BackupException e)
+ {
+ log.error("Can't close restorer", e);
+ }
+ }
+
+ for (Suspendable component : resumeComponents)
+ {
+ try
+ {
+ component.resume();
+ }
+ catch (ResumeException e)
+ {
+ log.error("Can't resume component", e);
+ }
+ }
+ }
+ }
+}
Deleted: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRestoreSameConfig.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRestoreSameConfig.java 2011-03-22 16:14:38 UTC (rev 4163)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistedWorkspaceRestoreSameConfig.java 2011-03-23 10:42:41 UTC (rev 4164)
@@ -1,190 +0,0 @@
-/*
- * Copyright (C) 2003-2010 eXo Platform SAS.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see<http://www.gnu.org/licenses/>.
- */
-package org.exoplatform.services.jcr.ext.backup.impl;
-
-import org.exoplatform.services.jcr.RepositoryService;
-import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.dataflow.DataManager;
-import org.exoplatform.services.jcr.ext.backup.BackupChainLog;
-import org.exoplatform.services.jcr.ext.backup.BackupManager;
-import org.exoplatform.services.jcr.ext.backup.WorkspaceRestoreException;
-import org.exoplatform.services.jcr.impl.backup.BackupException;
-import org.exoplatform.services.jcr.impl.backup.Backupable;
-import org.exoplatform.services.jcr.impl.backup.DataRestor;
-import org.exoplatform.services.jcr.impl.backup.JCRRestor;
-import org.exoplatform.services.jcr.impl.backup.ResumeException;
-import org.exoplatform.services.jcr.impl.backup.Suspendable;
-import org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
-import org.exoplatform.services.jcr.impl.util.io.FileCleanerHolder;
-import org.exoplatform.services.log.ExoLogger;
-import org.exoplatform.services.log.Log;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by The eXo Platform SAS.
- *
- * Date: 24 01 2011
- *
- * @author <a href="mailto:anatoliy.bazko@exoplatform.com.ua">Anatoliy Bazko</a>
- * @version $Id: JobExistedWorkspaceRestoreSameConfig.java 34360 2010-11-11 11:11:11Z tolusha $
- */
-public class JobExistedWorkspaceRestoreSameConfig extends JobWorkspaceRestore
-{
- /**
- * The logger.
- */
- private static Log log = ExoLogger.getLogger("exo.jcr.component.ext.JobExistedWorkspaceRestoreSameConfig");
-
- /**
- * JobExistedWorkspaceRestore constructor.
- */
- public JobExistedWorkspaceRestoreSameConfig(RepositoryService repositoryService, BackupManager backupManager,
- String repositoryName, BackupChainLog log, WorkspaceEntry wEntry)
- {
- super(repositoryService, backupManager, repositoryName, log, wEntry);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected void restore() throws WorkspaceRestoreException
- {
- // list of data restorers
- List<DataRestor> dataRestorer = new ArrayList<DataRestor>();
-
- // the list of components to resume
- List<Suspendable> resumeComponents = new ArrayList<Suspendable>();
-
- try
- {
- // suspend all components
- List<Suspendable> suspendableComponents =
- repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
- .getComponentInstancesOfType(Suspendable.class);
-
- for (Suspendable component : suspendableComponents)
- {
- component.suspend();
- resumeComponents.add(component);
- }
-
- // get all restorers
- List<Backupable> backupable =
- repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
- .getComponentInstancesOfType(Backupable.class);
-
- File storageDir = backupChainLog.getBackupConfig().getBackupDir();
-
- for (Backupable component : backupable)
- {
- File fullBackupDir = JCRRestor.getFullBackupFile(storageDir);
- dataRestorer.add(component.getDataRestorer(fullBackupDir));
- }
-
- for (DataRestor restorer : dataRestorer)
- {
- restorer.clean();
- }
-
- for (DataRestor restorer : dataRestorer)
- {
- restorer.restore();
- }
-
- for (DataRestor restorer : dataRestorer)
- {
- restorer.commit();
- }
-
- // resume components
- for (int i = 0; i < resumeComponents.size(); i++)
- {
- try
- {
- resumeComponents.remove(i).resume();
- }
- catch (ResumeException e)
- {
- log.error("Can't resume component", e);
- }
- }
-
- // incremental restore
- DataManager dataManager =
- (WorkspacePersistentDataManager)repositoryService.getRepository(repositoryName)
- .getWorkspaceContainer(wEntry.getName()).getComponent(WorkspacePersistentDataManager.class);
-
- FileCleanerHolder fileCleanHolder =
- (FileCleanerHolder)repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
- .getComponent(FileCleanerHolder.class);
-
- JCRRestor restorer = new JCRRestor(dataManager, fileCleanHolder.getFileCleaner());
- for (File incrBackupFile : JCRRestor.getIncrementalFiles(storageDir))
- {
- restorer.incrementalRestore(incrBackupFile);
- }
- }
- catch (Throwable t)
- {
- // rollback
- for (DataRestor restorer : dataRestorer)
- {
- try
- {
- restorer.rollback();
- }
- catch (BackupException e)
- {
- log.error("Can't rollback changes", e);
- }
- }
-
- throw new WorkspaceRestoreException("Workspace " + wEntry.getName() + " was not restored", t);
- }
- finally
- {
- // close
- for (DataRestor restorer : dataRestorer)
- {
- try
- {
- restorer.close();
- }
- catch (BackupException e)
- {
- log.error("Can't close restorer", e);
- }
- }
-
- for (Suspendable component : resumeComponents)
- {
- try
- {
- component.resume();
- }
- catch (ResumeException e)
- {
- log.error("Can't resume component", e);
- }
- }
- }
- }
-}
15 years, 1 month
exo-jcr SVN: r4163 - in jcr/trunk/exo.jcr.component.core/src: main/java/org/exoplatform/services/jcr/impl/core and 11 other directories.
by do-not-reply@jboss.org
Author: sergiykarpenko
Date: 2011-03-22 12:14:38 -0400 (Tue, 22 Mar 2011)
New Revision: 4163
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataConsumer.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/DefaultItemDataCopyVisitor.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/ACLInheritanceSupportedWorkspaceDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/LocalWorkspaceStorageDataManagerProxy.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/inmemory/InmemoryStorageConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBMultiDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBSingleDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/HSQLDBMultiDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/HSQLDBSingleDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SingleDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/statistics/StatisticsJDBCStorageConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/storage/WorkspaceStorageConnection.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestNodeOrder.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/TestCacheableWorkspaceDataManager.java
Log:
EXOJCR-1234: NodeImpl.getNextChildOrderNum() now uses special query that returns last order number.
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataConsumer.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataConsumer.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataConsumer.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -91,6 +91,15 @@
* @return int, child nodes count
*/
int getChildNodesCount(NodeData parent) throws RepositoryException;
+
+ /**
+ * Get order number of parent's last child node.
+ *
+ * @param parent node
+ * @return int Returns last child nodes order number or -1 if there is no subnodes.
+ * @throws RepositoryException
+ */
+ int getLastOrderNumber(NodeData parent) throws RepositoryException;
/**
* Get child Properties of the parent node.
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -2984,7 +2984,7 @@
private int getNextChildOrderNum() throws RepositoryException
{
- return dataManager.getChildNodesCount(nodeData());
+ return dataManager.getLastOrderNumber(nodeData()) + 1;
}
private int getNextChildIndex(InternalQName nameToAdd, NodeData parentNode) throws RepositoryException,
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -963,6 +963,24 @@
/**
* {@inheritDoc}
*/
+ public int getLastOrderNumber(NodeData parent) throws RepositoryException
+ {
+ int lastOrderNumber = changesLog.getLastChildOrderNumber(parent.getIdentifier());
+ int lastPersistedNodeOrderNumber = transactionableManager.getLastOrderNumber(parent);
+
+ if (lastOrderNumber != -1 && lastPersistedNodeOrderNumber < lastOrderNumber)
+ {
+ return lastOrderNumber;
+ }
+ else
+ {
+ return lastPersistedNodeOrderNumber;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public int getChildNodesCount(NodeData parent) throws RepositoryException
{
int childsCount =
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/DefaultItemDataCopyVisitor.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/DefaultItemDataCopyVisitor.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/DefaultItemDataCopyVisitor.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -264,7 +264,7 @@
protected int calculateNewNodeOrderNumber() throws RepositoryException
{
- return dataManager.getChildNodesCount(curParent());
+ return (dataManager.getLastOrderNumber(curParent()))+1;
}
protected QPath calculateNewNodePath(NodeData node, int level) throws RepositoryException
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/ACLInheritanceSupportedWorkspaceDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/ACLInheritanceSupportedWorkspaceDataManager.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/ACLInheritanceSupportedWorkspaceDataManager.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -158,6 +158,14 @@
/**
* {@inheritDoc}
*/
+ public int getLastOrderNumber(final NodeData parent) throws RepositoryException
+ {
+ return persistentManager.getLastOrderNumber(parent);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public int getChildNodesCount(final NodeData parent) throws RepositoryException
{
return persistentManager.getChildNodesCount(parent);
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -467,10 +467,27 @@
con.close();
}
}
-
+
/**
* {@inheritDoc}
*/
+ @Override
+ public int getLastOrderNumber(final NodeData nodeData) throws RepositoryException
+ {
+ final WorkspaceStorageConnection con = dataContainer.openConnection();
+ try
+ {
+ return con.getLastOrderNumber(nodeData);
+ }
+ finally
+ {
+ con.close();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public int getChildNodesCount(NodeData parent) throws RepositoryException
{
final WorkspaceStorageConnection con = dataContainer.openConnection();
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/LocalWorkspaceStorageDataManagerProxy.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/LocalWorkspaceStorageDataManagerProxy.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/LocalWorkspaceStorageDataManagerProxy.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -135,6 +135,14 @@
/**
* {@inheritDoc}
*/
+ public int getLastOrderNumber(final NodeData parent) throws RepositoryException
+ {
+ return storageDataManager.getLastOrderNumber(parent);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public int getChildNodesCount(final NodeData parent) throws RepositoryException
{
return storageDataManager.getChildNodesCount(parent);
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -416,6 +416,13 @@
return childCount == null ? 0 : childCount[0];
}
+ public int getLastChildOrderNumber(String rootIdentifier)
+ {
+
+ int[] childInfo = childNodesCount.get(rootIdentifier);
+ return childInfo == null ? -1 : childInfo[1];
+ }
+
/**
* Collect last in ChangesLog order item child changes.
*
@@ -665,13 +672,17 @@
{
int[] childCount = childNodesCount.get(item.getData().getParentIdentifier());
if (childCount == null)
- childCount = new int[1];
+ childCount = new int[2];
if (item.isDeleted())
+ {
--childCount[0];
+ }
else if (item.isAdded())
+ {
++childCount[0];
-
+ childCount[1] = ((NodeData)item.getData()).getOrderNumber();
+ }
childNodesCount.put(item.getData().getParentIdentifier(), childCount);
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -114,6 +114,46 @@
/**
* {@inheritDoc}
*/
+ public int getLastOrderNumber(final NodeData parent) throws RepositoryException
+ {
+ if (txStarted())
+ {
+ int txLastOrderNumber = -1;
+ for (ItemState change : transactionLog.getAllStates())
+ {
+ if (change.isNode() && change.isPersisted()
+ && change.getData().getParentIdentifier().equals(parent.getIdentifier()))
+ {
+ if (change.isAdded())
+ {
+ int orderNumber = ((NodeData)change.getData()).getOrderNumber();
+ if (orderNumber > txLastOrderNumber)
+ {
+ txLastOrderNumber = orderNumber;
+ }
+ }
+ }
+ }
+
+ int lastOrderNumber = storageDataManager.getLastOrderNumber(parent);
+ if (lastOrderNumber > txLastOrderNumber)
+ {
+ return lastOrderNumber;
+ }
+ else
+ {
+ return txLastOrderNumber;
+ }
+ }
+ else
+ {
+ return storageDataManager.getLastOrderNumber(parent);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public int getChildNodesCount(final NodeData parent) throws RepositoryException
{
if (txStarted())
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/inmemory/InmemoryStorageConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/inmemory/InmemoryStorageConnection.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/inmemory/InmemoryStorageConnection.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -129,6 +129,11 @@
return null;
}
+ public int getLastOrderNumber(NodeData nodeData) throws RepositoryException
+ {
+ return -1;
+ }
+
public int getChildNodesCount(NodeData nodeData) throws RepositoryException
{
return 0;
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -128,8 +128,13 @@
* FIND_NODES_BY_PARENTID.
*/
protected String FIND_NODES_BY_PARENTID;
-
+
/**
+ * FIND_LAST_ORDER_NUMBER_BY_PARENTID.
+ */
+ protected String FIND_LAST_ORDER_NUMBER_BY_PARENTID;
+
+ /**
* FIND_NODES_COUNT_BY_PARENTID.
*/
protected String FIND_NODES_COUNT_BY_PARENTID;
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -158,6 +158,8 @@
protected PreparedStatement findNodesByParentId;
+ protected PreparedStatement findLastOrderNumberByParentId;
+
protected PreparedStatement findNodesCountByParentId;
protected PreparedStatement findPropertiesByParentId;
@@ -935,6 +937,51 @@
/**
* {@inheritDoc}
*/
+ public int getLastOrderNumber(NodeData parent) throws RepositoryException
+ {
+ checkIfOpened();
+ try
+ {
+ ResultSet count = findLastOrderNumberByParentIdentifier(getInternalId(parent.getIdentifier()));
+ try
+ {
+ if (count.next())
+ {
+ if (count.getInt(1) > 0)
+ {
+ return count.getInt(2);
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ finally
+ {
+ try
+ {
+ count.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
+ }
+ catch (SQLException e)
+ {
+ throw new RepositoryException(e);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public int getChildNodesCount(NodeData parent) throws RepositoryException
{
checkIfOpened();
@@ -2772,6 +2819,8 @@
protected abstract ResultSet findChildNodesByParentIdentifier(String parentIdentifier) throws SQLException;
+ protected abstract ResultSet findLastOrderNumberByParentIdentifier(String parentIdentifier) throws SQLException;
+
protected abstract ResultSet findChildNodesCountByParentIdentifier(String parentIdentifier) throws SQLException;
protected abstract ResultSet findChildPropertiesByParentIdentifier(String parentIdentifier) throws SQLException;
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBMultiDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBMultiDbJDBCConnection.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBMultiDbJDBCConnection.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -81,6 +81,8 @@
"select V.DATA" + " from JCR_MITEM I, JCR_MVALUE V"
+ " where I.PARENT_ID=? and I.I_CLASS=2 and I.NAME=? and I.ID=V.PROPERTY_ID order by V.ORDER_NUM";
FIND_NODES_BY_PARENTID = "select * from JCR_MITEM" + " where PARENT_ID=? and I_CLASS=1" + " order by N_ORDER_NUM";
+ FIND_LAST_ORDER_NUMBER_BY_PARENTID =
+ "select count(*), max(N_ORDER_NUM) from JCR_MITEM where PARENT_ID=? and I_CLASS=1";
FIND_NODES_COUNT_BY_PARENTID = "select count(ID) from JCR_MITEM" + " where PARENT_ID=? and I_CLASS=1";
FIND_PROPERTIES_BY_PARENTID = "select * from JCR_MITEM" + " where PARENT_ID=? and I_CLASS=2" + " order by ID";
}
@@ -185,6 +187,18 @@
}
@Override
+ protected ResultSet findLastOrderNumberByParentIdentifier(final String parentIdentifier) throws SQLException
+ {
+ return SecurityHelper.doPrivilegedSQLExceptionAction(new PrivilegedExceptionAction<ResultSet>()
+ {
+ public ResultSet run() throws Exception
+ {
+ return HSQLDBMultiDbJDBCConnection.super.findLastOrderNumberByParentIdentifier(parentIdentifier);
+ }
+ });
+ }
+
+ @Override
protected ResultSet findChildNodesCountByParentIdentifier(final String parentIdentifier) throws SQLException
{
return SecurityHelper.doPrivilegedSQLExceptionAction(new PrivilegedExceptionAction<ResultSet>()
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBSingleDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBSingleDbJDBCConnection.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/HSQLDBSingleDbJDBCConnection.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -87,6 +87,8 @@
+ " where I.PARENT_ID=? and I.I_CLASS=2 and I.CONTAINER_NAME=? and I.NAME=? and I.ID=V.PROPERTY_ID order by V.ORDER_NUM";
FIND_NODES_BY_PARENTID =
"select * from JCR_SITEM" + " where PARENT_ID=? and I_CLASS=1 and CONTAINER_NAME=?" + " order by N_ORDER_NUM";
+ FIND_LAST_ORDER_NUMBER_BY_PARENTID =
+ "select count(*), max(N_ORDER_NUM) from JCR_SITEM where PARENT_ID=? and I_CLASS=1 and CONTAINER_NAME=?";
FIND_NODES_COUNT_BY_PARENTID =
"select count(ID) from JCR_SITEM" + " where PARENT_ID=? and I_CLASS=1 and CONTAINER_NAME=?";
FIND_PROPERTIES_BY_PARENTID =
@@ -172,6 +174,30 @@
* {@inheritDoc}
*/
@Override
+ protected ResultSet findLastOrderNumberByParentIdentifier(String parentIdentifier) throws SQLException
+ {
+ if (findLastOrderNumberByParentId == null)
+ findLastOrderNumberByParentId = dbConnection.prepareStatement(FIND_LAST_ORDER_NUMBER_BY_PARENTID);
+ else
+ findLastOrderNumberByParentId.clearParameters();
+
+ findLastOrderNumberByParentId.setString(1, parentIdentifier);
+ findLastOrderNumberByParentId.setString(2, containerName);
+
+ PrivilegedExceptionAction<ResultSet> action = new PrivilegedExceptionAction<ResultSet>()
+ {
+ public ResultSet run() throws Exception
+ {
+ return findLastOrderNumberByParentId.executeQuery();
+ }
+ };
+ return SecurityHelper.doPrivilegedSQLExceptionAction(action);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
protected ResultSet findChildNodesCountByParentIdentifier(String parentCid) throws SQLException
{
if (findNodesCountByParentId == null)
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -129,6 +129,9 @@
FIND_NODES_BY_PARENTID = "select * from JCR_MITEM" + " where I_CLASS=1 and PARENT_ID=?" + " order by N_ORDER_NUM";
+ FIND_LAST_ORDER_NUMBER_BY_PARENTID =
+ "select count(*), max(N_ORDER_NUM) from JCR_MITEM where I_CLASS=1 and PARENT_ID=?";
+
FIND_NODES_COUNT_BY_PARENTID = "select count(ID) from JCR_MITEM" + " where I_CLASS=1 and PARENT_ID=?";
FIND_PROPERTIES_BY_PARENTID = "select * from JCR_MITEM" + " where I_CLASS=2 and PARENT_ID=?" + " order by ID";
@@ -374,6 +377,21 @@
* {@inheritDoc}
*/
@Override
+ protected ResultSet findLastOrderNumberByParentIdentifier(String parentIdentifier) throws SQLException
+ {
+ if (findLastOrderNumberByParentId == null)
+ findLastOrderNumberByParentId = dbConnection.prepareStatement(FIND_LAST_ORDER_NUMBER_BY_PARENTID);
+ else
+ findLastOrderNumberByParentId.clearParameters();
+
+ findLastOrderNumberByParentId.setString(1, parentIdentifier);
+ return findLastOrderNumberByParentId.executeQuery();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
protected ResultSet findChildNodesCountByParentIdentifier(String parentIdentifier) throws SQLException
{
if (findNodesCountByParentId == null)
@@ -521,6 +539,7 @@
@Override
protected ResultSet findNodesAndProperties(String lastNodeId, int offset, int limit) throws SQLException
{
- throw new UnsupportedOperationException("The method findNodesAndProperties is not supported for this type of connection use the complex queries instead");
+ throw new UnsupportedOperationException(
+ "The method findNodesAndProperties is not supported for this type of connection use the complex queries instead");
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -135,6 +135,9 @@
FIND_NODES_BY_PARENTID =
"select * from JCR_SITEM" + " where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?" + " order by N_ORDER_NUM";
+ FIND_LAST_ORDER_NUMBER_BY_PARENTID =
+ "select count(*), max(N_ORDER_NUM) from JCR_SITEM where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?";
+
FIND_NODES_COUNT_BY_PARENTID =
"select count(ID) from JCR_SITEM" + " where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?";
@@ -284,6 +287,22 @@
* {@inheritDoc}
*/
@Override
+ protected ResultSet findLastOrderNumberByParentIdentifier(String parentIdentifier) throws SQLException
+ {
+ if (findLastOrderNumberByParentId == null)
+ findLastOrderNumberByParentId = dbConnection.prepareStatement(FIND_LAST_ORDER_NUMBER_BY_PARENTID);
+ else
+ findLastOrderNumberByParentId.clearParameters();
+
+ findLastOrderNumberByParentId.setString(1, containerName);
+ findLastOrderNumberByParentId.setString(2, parentIdentifier);
+ return findLastOrderNumberByParentId.executeQuery();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
protected ResultSet findChildNodesCountByParentIdentifier(String parentCid) throws SQLException
{
if (findNodesCountByParentId == null)
@@ -542,6 +561,7 @@
@Override
protected ResultSet findNodesAndProperties(String lastNodeId, int offset, int limit) throws SQLException
{
- throw new UnsupportedOperationException("The method findNodesAndProperties is not supported for this type of connection use the complex queries instead");
+ throw new UnsupportedOperationException(
+ "The method findNodesAndProperties is not supported for this type of connection use the complex queries instead");
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/HSQLDBMultiDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/HSQLDBMultiDbJDBCConnection.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/HSQLDBMultiDbJDBCConnection.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -83,6 +83,10 @@
"select V.DATA" + " from JCR_MITEM I, JCR_MVALUE V"
+ " where I.PARENT_ID=? and I.I_CLASS=2 and I.NAME=? and I.ID=V.PROPERTY_ID order by V.ORDER_NUM";
FIND_NODES_BY_PARENTID = "select * from JCR_MITEM" + " where PARENT_ID=? and I_CLASS=1" + " order by N_ORDER_NUM";
+
+ FIND_LAST_ORDER_NUMBER_BY_PARENTID =
+ "select count(*), max(N_ORDER_NUM) from JCR_MITEM where PARENT_ID=? and I_CLASS=1";
+
FIND_NODES_COUNT_BY_PARENTID = "select count(ID) from JCR_MITEM" + " where PARENT_ID=? and I_CLASS=1";
FIND_PROPERTIES_BY_PARENTID = "select * from JCR_MITEM" + " where PARENT_ID=? and I_CLASS=2" + " order by ID";
FIND_NODES_BY_PARENTID_CQ =
@@ -215,6 +219,18 @@
}
@Override
+ protected ResultSet findLastOrderNumberByParentIdentifier(final String parentIdentifier) throws SQLException
+ {
+ return SecurityHelper.doPrivilegedSQLExceptionAction(new PrivilegedExceptionAction<ResultSet>()
+ {
+ public ResultSet run() throws Exception
+ {
+ return HSQLDBMultiDbJDBCConnection.super.findLastOrderNumberByParentIdentifier(parentIdentifier);
+ }
+ });
+ }
+
+ @Override
protected ResultSet findChildNodesCountByParentIdentifier(final String parentIdentifier) throws SQLException
{
return SecurityHelper.doPrivilegedSQLExceptionAction(new PrivilegedExceptionAction<ResultSet>()
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/HSQLDBSingleDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/HSQLDBSingleDbJDBCConnection.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/HSQLDBSingleDbJDBCConnection.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -91,6 +91,10 @@
+ " where I.PARENT_ID=? and I.I_CLASS=2 and I.CONTAINER_NAME=? and I.NAME=? and I.ID=V.PROPERTY_ID order by V.ORDER_NUM";
FIND_NODES_BY_PARENTID =
"select * from JCR_SITEM" + " where PARENT_ID=? and I_CLASS=1 and CONTAINER_NAME=?" + " order by N_ORDER_NUM";
+
+ FIND_LAST_ORDER_NUMBER_BY_PARENTID =
+ "select count(*), max(N_ORDER_NUM) from JCR_SITEM where PARENT_ID=? and I_CLASS=1 and CONTAINER_NAME=?";
+
FIND_NODES_COUNT_BY_PARENTID =
"select count(ID) from JCR_SITEM" + " where PARENT_ID=? and I_CLASS=1 and CONTAINER_NAME=?";
FIND_PROPERTIES_BY_PARENTID =
@@ -195,6 +199,30 @@
* {@inheritDoc}
*/
@Override
+ protected ResultSet findLastOrderNumberByParentIdentifier(String parentIdentifier) throws SQLException
+ {
+ if (findLastOrderNumberByParentId == null)
+ findLastOrderNumberByParentId = dbConnection.prepareStatement(FIND_LAST_ORDER_NUMBER_BY_PARENTID);
+ else
+ findLastOrderNumberByParentId.clearParameters();
+
+ findLastOrderNumberByParentId.setString(1, parentIdentifier);
+ findLastOrderNumberByParentId.setString(2, containerName);
+
+ PrivilegedExceptionAction<ResultSet> action = new PrivilegedExceptionAction<ResultSet>()
+ {
+ public ResultSet run() throws Exception
+ {
+ return findLastOrderNumberByParentId.executeQuery();
+ }
+ };
+ return SecurityHelper.doPrivilegedSQLExceptionAction(action);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
protected ResultSet findChildNodesCountByParentIdentifier(String parentCid) throws SQLException
{
if (findNodesCountByParentId == null)
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -153,6 +153,9 @@
+ " from JCR_MITEM I, (SELECT ID, PARENT_ID from JCR_MITEM where ID=?) J"
+ " where I.ID = J.ID or I.ID = J.PARENT_ID";
+ FIND_LAST_ORDER_NUMBER_BY_PARENTID =
+ "select count(*), max(N_ORDER_NUM) from JCR_MITEM where I_CLASS=1 and PARENT_ID=?";
+
FIND_NODES_COUNT_BY_PARENTID = "select count(ID) from JCR_MITEM" + " where I_CLASS=1 and PARENT_ID=?";
FIND_PROPERTIES_BY_PARENTID = "select * from JCR_MITEM" + " where I_CLASS=2 and PARENT_ID=?" + " order by NAME";
@@ -180,8 +183,8 @@
DELETE_VALUE = "delete from JCR_MVALUE where PROPERTY_ID=?";
DELETE_REF = "delete from JCR_MREF where PROPERTY_ID=?";
- FIND_NODES_AND_PROPERTIES =
- "select J.*, P.ID AS P_ID, P.NAME AS P_NAME, P.VERSION AS P_VERSION, P.P_TYPE, P.P_MULTIVALUED,"
+ FIND_NODES_AND_PROPERTIES =
+ "select J.*, P.ID AS P_ID, P.NAME AS P_NAME, P.VERSION AS P_VERSION, P.P_TYPE, P.P_MULTIVALUED,"
+ " V.DATA, V.ORDER_NUM, V.STORAGE_DESC from JCR_MVALUE V, JCR_MITEM P"
+ " join (select I.ID, I.PARENT_ID, I.NAME, I.VERSION, I.I_INDEX, I.N_ORDER_NUM from JCR_MITEM I"
+ " where I.I_CLASS=1 AND I.ID > ? order by I.ID LIMIT ? OFFSET ?) J on P.PARENT_ID = J.ID"
@@ -423,6 +426,21 @@
* {@inheritDoc}
*/
@Override
+ protected ResultSet findLastOrderNumberByParentIdentifier(String parentIdentifier) throws SQLException
+ {
+ if (findLastOrderNumberByParentId == null)
+ findLastOrderNumberByParentId = dbConnection.prepareStatement(FIND_LAST_ORDER_NUMBER_BY_PARENTID);
+ else
+ findLastOrderNumberByParentId.clearParameters();
+
+ findLastOrderNumberByParentId.setString(1, parentIdentifier);
+ return findLastOrderNumberByParentId.executeQuery();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
protected ResultSet findChildNodesCountByParentIdentifier(String parentIdentifier) throws SQLException
{
if (findNodesCountByParentId == null)
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SingleDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SingleDbJDBCConnection.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SingleDbJDBCConnection.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -159,6 +159,9 @@
+ " from JCR_SITEM I, (SELECT ID, PARENT_ID from JCR_SITEM where ID=?) J"
+ " where I.ID = J.ID or I.ID = J.PARENT_ID";
+ FIND_LAST_ORDER_NUMBER_BY_PARENTID =
+ "select count(*), max(N_ORDER_NUM) from JCR_SITEM where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?";
+
FIND_NODES_COUNT_BY_PARENTID =
"select count(ID) from JCR_SITEM" + " where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?";
@@ -187,8 +190,8 @@
DELETE_VALUE = "delete from JCR_SVALUE where PROPERTY_ID=?";
DELETE_REF = "delete from JCR_SREF where PROPERTY_ID=?";
- FIND_NODES_AND_PROPERTIES =
- "select J.*, P.ID AS P_ID, P.NAME AS P_NAME, P.VERSION AS P_VERSION, P.P_TYPE, P.P_MULTIVALUED,"
+ FIND_NODES_AND_PROPERTIES =
+ "select J.*, P.ID AS P_ID, P.NAME AS P_NAME, P.VERSION AS P_VERSION, P.P_TYPE, P.P_MULTIVALUED,"
+ " V.DATA, V.ORDER_NUM, V.STORAGE_DESC from JCR_SVALUE V, JCR_SITEM P"
+ " join (select I.ID, I.PARENT_ID, I.NAME, I.VERSION, I.I_INDEX, I.N_ORDER_NUM from JCR_SITEM I"
+ " where I.CONTAINER_NAME=? AND I.I_CLASS=1 AND I.ID > ? order by I.ID LIMIT ? OFFSET ?) J on P.PARENT_ID = J.ID"
@@ -317,6 +320,21 @@
* {@inheritDoc}
*/
@Override
+ protected ResultSet findLastOrderNumberByParentIdentifier(String parentIdentifier) throws SQLException
+ {
+ if (findLastOrderNumberByParentId == null)
+ findLastOrderNumberByParentId = dbConnection.prepareStatement(FIND_LAST_ORDER_NUMBER_BY_PARENTID);
+ else
+ findLastOrderNumberByParentId.clearParameters();
+
+ findLastOrderNumberByParentId.setString(1, parentIdentifier);
+ return findLastOrderNumberByParentId.executeQuery();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
protected ResultSet findChildNodesCountByParentIdentifier(String parentCid) throws SQLException
{
if (findNodesCountByParentId == null)
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/statistics/StatisticsJDBCStorageConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/statistics/StatisticsJDBCStorageConnection.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/statistics/StatisticsJDBCStorageConnection.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -117,6 +117,12 @@
* <code>getChildNodesCount(NodeData parent)</code>
*/
private static final String GET_CHILD_NODES_COUNT_DESCR = "getChildNodesCount";
+
+ /**
+ * The description of the statistics corresponding to the method
+ * <code>getLastOrderNumber(NodeData parent)</code>
+ */
+ private static final String GET_LAST_ORDER_NUMBER_DESCR = "getLastOrderNumber";
/**
* The description of the statistics corresponding to the method
@@ -171,6 +177,8 @@
GET_ITEM_DATA_BY_NODE_DATA_NQ_PATH_ENTRY_DESCR));
ALL_STATISTICS.put(GET_CHILD_NODES_DATA_DESCR, new Statistics(GLOBAL_STATISTICS, GET_CHILD_NODES_DATA_DESCR));
ALL_STATISTICS.put(GET_CHILD_NODES_COUNT_DESCR, new Statistics(GLOBAL_STATISTICS, GET_CHILD_NODES_COUNT_DESCR));
+ ALL_STATISTICS.put(GET_LAST_ORDER_NUMBER_DESCR, new Statistics(GLOBAL_STATISTICS, GET_LAST_ORDER_NUMBER_DESCR));
+
ALL_STATISTICS.put(GET_CHILD_PROPERTIES_DATA_DESCR, new Statistics(GLOBAL_STATISTICS,
GET_CHILD_PROPERTIES_DATA_DESCR));
ALL_STATISTICS.put(LIST_CHILD_PROPERTIES_DATA_DESCR, new Statistics(GLOBAL_STATISTICS,
@@ -335,6 +343,23 @@
/**
* @see org.exoplatform.services.jcr.storage.WorkspaceStorageConnection#getChildNodesCount(org.exoplatform.services.jcr.datamodel.NodeData)
*/
+ public int getLastOrderNumber(NodeData parent) throws RepositoryException
+ {
+ Statistics s = ALL_STATISTICS.get(GET_LAST_ORDER_NUMBER_DESCR);
+ try
+ {
+ s.begin();
+ return wcs.getLastOrderNumber(parent);
+ }
+ finally
+ {
+ s.end();
+ }
+ }
+
+ /**
+ * @see org.exoplatform.services.jcr.storage.WorkspaceStorageConnection#getChildNodesCount(org.exoplatform.services.jcr.datamodel.NodeData)
+ */
public int getChildNodesCount(NodeData parent) throws RepositoryException
{
Statistics s = ALL_STATISTICS.get(GET_CHILD_NODES_COUNT_DESCR);
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/storage/WorkspaceStorageConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/storage/WorkspaceStorageConnection.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/storage/WorkspaceStorageConnection.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -126,6 +126,15 @@
int getChildNodesCount(NodeData parent) throws RepositoryException;
/**
+ * Reads order number of last <code>parent<code/> child nodes.
+ *
+ * @param parent NodeData
+ * @return long, order number of last parent's child node.
+ * @throws RepositoryException if error occurs
+ */
+ int getLastOrderNumber(NodeData parent) throws RepositoryException;
+
+ /**
* Reads <code>List</code> of <code>PropertyData</code> from the storage using item's parent
* location.
*
Modified: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestNodeOrder.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestNodeOrder.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestNodeOrder.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -36,14 +36,14 @@
*/
package org.exoplatform.services.jcr.impl.core;
+import org.exoplatform.services.jcr.JcrImplBaseTest;
+import org.exoplatform.services.jcr.datamodel.NodeData;
+
import javax.jcr.ItemExistsException;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Session;
-import org.exoplatform.services.jcr.JcrImplBaseTest;
-import org.exoplatform.services.jcr.datamodel.NodeData;
-
/**
* Created by The eXo Platform SAS.
*
@@ -227,7 +227,7 @@
assertEquals(order++, orderNumb);
}
}
-
+
public void testOrderWithRefreshKeep() throws Exception
{
Node testNode = root.addNode("testNode");
@@ -268,4 +268,41 @@
}
}
+ public void testRemoveOrder() throws Exception
+ {
+ Node list = session.getRootNode().addNode("list");
+ assertTrue(list.getPrimaryNodeType().hasOrderableChildNodes());
+ list.addNode("foo", "nt:unstructured");
+ list.addNode("bar", "nt:unstructured");
+ list.addNode("juu", "nt:unstructured");
+ session.save();
+
+ list = session.getRootNode().getNode("list");
+ list.getNode("bar").remove();
+ session.save();
+
+ list = session.getRootNode().getNode("list");
+ list.addNode("daa", "nt:unstructured");
+ session.save();
+
+ //check order numbers
+ NodeImpl foo = (NodeImpl)list.getNode("foo");
+ assertEquals(0, ((NodeData)foo.getData()).getOrderNumber());
+ NodeImpl juu = (NodeImpl)list.getNode("juu");
+ assertEquals(2, ((NodeData)juu.getData()).getOrderNumber());
+ NodeImpl daa = (NodeImpl)list.getNode("daa");
+ assertEquals(3, ((NodeData)daa.getData()).getOrderNumber());
+
+ // list.orderBefore("daa", null);
+ NodeIterator it = list.getNodes();
+ foo = (NodeImpl)it.nextNode();
+ assertEquals("foo", foo.getName());
+ juu = (NodeImpl)it.nextNode();
+ assertEquals("juu", juu.getName());
+ daa = (NodeImpl)it.nextNode();
+ assertEquals("daa", daa.getName());
+ assertFalse(it.hasNext());
+ session.save();
+ }
+
}
Modified: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/TestCacheableWorkspaceDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/TestCacheableWorkspaceDataManager.java 2011-03-22 12:36:59 UTC (rev 4162)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/TestCacheableWorkspaceDataManager.java 2011-03-22 16:14:38 UTC (rev 4163)
@@ -534,6 +534,12 @@
{
}
+ @Override
+ public int getLastOrderNumber(NodeData parent) throws RepositoryException
+ {
+ return -1;
+ }
+
};
private static class MyWorkspaceDataContainer extends WorkspaceDataContainerBase
15 years, 1 month
exo-jcr SVN: r4162 - jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-03-22 08:36:59 -0400 (Tue, 22 Mar 2011)
New Revision: 4162
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DirectoryRestor.java
Log:
EXOJCR-1081: add prefix to directory name
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DirectoryRestor.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DirectoryRestor.java 2011-03-22 10:06:12 UTC (rev 4161)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DirectoryRestor.java 2011-03-22 12:36:59 UTC (rev 4162)
@@ -65,7 +65,7 @@
/**
* The prefix for temporary directories.
*/
- private static final String PREFIX = "fsrestorer";
+ private static final String PREFIX = "dr";
/**
* Constructor DirectoryRestorer.
@@ -100,7 +100,7 @@
{
try
{
- File tmpDir = new File(tempDir, IdGenerator.generate());
+ File tmpDir = new File(tempDir, PREFIX + IdGenerator.generate());
DirectoryHelper.copyDirectory(dataDir, tmpDir);
tmpDirs.add(tmpDir);
15 years, 1 month
exo-jcr SVN: r4161 - in jcr/branches/1.12.x/patch: 1.12.8-GA and 2 other directories.
by do-not-reply@jboss.org
Author: dkuleshov
Date: 2011-03-22 06:06:12 -0400 (Tue, 22 Mar 2011)
New Revision: 4161
Added:
jcr/branches/1.12.x/patch/1.12.9-GA/
jcr/branches/1.12.x/patch/1.12.9-GA/JCR-1597/
jcr/branches/1.12.x/patch/1.12.9-GA/JCR-1597/JCR-1597.patch
Removed:
jcr/branches/1.12.x/patch/1.12.8-GA/JCR-1597/
Log:
JCR-1597: patch relocated
Added: jcr/branches/1.12.x/patch/1.12.9-GA/JCR-1597/JCR-1597.patch
===================================================================
--- jcr/branches/1.12.x/patch/1.12.9-GA/JCR-1597/JCR-1597.patch (rev 0)
+++ jcr/branches/1.12.x/patch/1.12.9-GA/JCR-1597/JCR-1597.patch 2011-03-22 10:06:12 UTC (rev 4161)
@@ -0,0 +1,306 @@
+Index: exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestLock.java
+===================================================================
+--- exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestLock.java (revision 4103)
++++ exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestLock.java (working copy)
+@@ -21,14 +21,18 @@
+ import org.exoplatform.common.http.HTTPStatus;
+ import org.exoplatform.services.jcr.webdav.BaseStandaloneTest;
+ import org.exoplatform.services.jcr.webdav.WebDavConstants.WebDAVMethods;
++import org.exoplatform.services.jcr.webdav.command.LockCommand.LockResultResponseEntity;
+ import org.exoplatform.services.jcr.webdav.util.TextUtil;
+ import org.exoplatform.services.jcr.webdav.utils.TestUtils;
++import org.exoplatform.services.rest.ExtHttpHeaders;
+ import org.exoplatform.services.rest.impl.ContainerResponse;
+ import org.exoplatform.services.rest.impl.MultivaluedMapImpl;
+
+ import java.io.ByteArrayInputStream;
++import java.io.ByteArrayOutputStream;
+ import java.io.InputStream;
+
++import javax.jcr.Node;
+ import javax.ws.rs.core.MediaType;
+ import javax.ws.rs.core.MultivaluedMap;
+
+@@ -46,6 +50,10 @@
+ private String path = TestUtils.getFileName();
+
+ private String fileContent = TestUtils.getFileContent();
++
++ private String lockRequestBody = "<D:lockinfo xmlns:D='DAV:'>" + "<D:lockscope>" + "<D:exclusive/>"
++ + "</D:lockscope>" + "<D:locktype>" + "<D:write/>" + "</D:locktype>" + "<D:owner>" + "<D:href>testOwner</D:href>"
++ + "</D:owner>" + "</D:lockinfo>";
+
+ @Override
+ public void setUp() throws Exception
+@@ -55,17 +63,134 @@
+ TestUtils.addContent(session, path, inputStream, defaultFileNodeType, "");
+ }
+
++ /**
++ * Testing Lock method. Firstly lock existing node via webdav LOCK method and check for correct response status.
++ * Secondly check if the node is locked indeed via webdav DELETE method (no delete or any other operation cannot
++ * be performed with locked node). The response status must be LOCKED.
++ * @throws Exception
++ */
+ public void testLock() throws Exception
+ {
+ MultivaluedMap<String, String> headers = new MultivaluedMapImpl();
+- headers.add("Content-Type", MediaType.TEXT_PLAIN);
+- ContainerResponse containerResponse = service(WebDAVMethods.LOCK, getPathWS() + path, "", headers, null);
++ headers.add(ExtHttpHeaders.CONTENTTYPE, MediaType.TEXT_PLAIN);
++ ContainerResponse containerResponse =
++ service(WebDAVMethods.LOCK, getPathWS() + path, "", headers, lockRequestBody.getBytes());
++ MultivaluedMap<String, Object> lockResponseHeaders = containerResponse.getHttpHeaders();
++
+ assertEquals(HTTPStatus.OK, containerResponse.getStatus());
++
++ // some manipulation to serialize response entity
++ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
++ LockResultResponseEntity entity = (LockResultResponseEntity)containerResponse.getEntity();
++ entity.write(outputStream);
++
++ System.out.println("\n=Lock method response body (add lock)=====");
++ System.out.println("==========================================");
++ System.out.println(outputStream.toString());
++ System.out.println("==========================================\n");
++
+ containerResponse = service("DELETE", getPathWS() + path, "", null, null);
++
+ assertEquals(HTTPStatus.LOCKED, containerResponse.getStatus());
+ assertTrue(session.getRootNode().getNode(TextUtil.relativizePath(path)).isLocked());
++
++ // here we're unlocking a node, to use it in other tests
++ // firstly get lock-token from response entity
++ String lockToken = outputStream.toString();
++ lockToken = lockToken.substring(lockToken.indexOf(">opaquelocktoken:"));
++ lockToken = lockToken.substring(lockToken.indexOf(":") + 1, lockToken.indexOf("<"));
++
++ // secondly add lock-token to current session and unlock the node
++ session.addLockToken(lockToken);
++ ((Node)session.getItem(path)).unlock();
+ }
+
++ /**
++ * Testing lock refreshing. Firstly we lock the node. Secondly we refresh the lock
++ * via webdav LOCK method with no body. In both cases OK webdav status must be returned.
++ * @throws Exception
++ */
++ public void testLockRefresh() throws Exception
++ {
++ MultivaluedMap<String, String> headers = new MultivaluedMapImpl();
++ headers.add("Content-Type", MediaType.TEXT_PLAIN);
++ ContainerResponse containerResponse =
++ service(WebDAVMethods.LOCK, getPathWS() + path, "", headers, lockRequestBody.getBytes());
++ MultivaluedMap<String, Object> lockResponseHeaders = containerResponse.getHttpHeaders();
++
++ assertEquals(HTTPStatus.OK, containerResponse.getStatus());
++
++ // get lock-token from response body
++ // some manipulation to serialize response entity
++ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
++ LockResultResponseEntity entity = (LockResultResponseEntity)containerResponse.getEntity();
++ entity.write(outputStream);
++
++ String lockToken = outputStream.toString();
++ lockToken = lockToken.substring(lockToken.indexOf(">opaquelocktoken:"));
++ lockToken = lockToken.substring(lockToken.indexOf(":") + 1, lockToken.indexOf("<"));
++
++ //prepare to send lock refresh request
++ headers = new MultivaluedMapImpl();
++ headers.add(ExtHttpHeaders.CONTENTTYPE, MediaType.TEXT_PLAIN);
++ headers.add(ExtHttpHeaders.LOCKTOKEN, lockToken);
++
++ containerResponse = service(WebDAVMethods.LOCK, getPathWS() + path, "", headers, null);
++
++ assertEquals(HTTPStatus.OK, containerResponse.getStatus());
++
++ // some manipulation to serialize response entity
++ outputStream = new ByteArrayOutputStream();
++ entity = (LockResultResponseEntity)containerResponse.getEntity();
++ entity.write(outputStream);
++
++ System.out.println("\n=Lock method response body (refresh lock)=");
++ System.out.println("==========================================");
++ System.out.println(outputStream.toString());
++ System.out.println("==========================================\n");
++
++ // add lock-token to current session and unlock the node
++ session.addLockToken(lockToken);
++ ((Node)session.getItem(path)).unlock();
++
++ }
++
++ /**
++ * Testing trying to lock already locked node. Firstly we lock the node. Secondly we send webdav LOCK
++ * request with request body (because in case the body is empty the LOCK request should refresh already
++ * existing lock) to try to lock previously locked node. LOCKED webdav status must be returned.
++ * @throws Exception
++ */
++ public void testAlreadyLocked() throws Exception
++ {
++ MultivaluedMap<String, String> headers = new MultivaluedMapImpl();
++ headers.add(ExtHttpHeaders.CONTENTTYPE, MediaType.TEXT_PLAIN);
++ ContainerResponse containerResponse =
++ service(WebDAVMethods.LOCK, getPathWS() + path, "", headers, lockRequestBody.getBytes());
++
++ assertEquals(HTTPStatus.OK, containerResponse.getStatus());
++
++ // some manipulation to serialize response entity
++ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
++ LockResultResponseEntity entity = (LockResultResponseEntity)containerResponse.getEntity();
++ entity.write(outputStream);
++
++ String lockToken = outputStream.toString();
++ lockToken = lockToken.substring(lockToken.indexOf(">opaquelocktoken:"));
++ lockToken = lockToken.substring(lockToken.indexOf(":") + 1, lockToken.indexOf("<"));
++
++ // prepare to send lock request
++ headers = new MultivaluedMapImpl();
++ headers.add(ExtHttpHeaders.CONTENTTYPE, MediaType.TEXT_PLAIN);
++ containerResponse = service(WebDAVMethods.LOCK, getPathWS() + path, "", headers, lockRequestBody.getBytes());
++
++ assertEquals(HTTPStatus.LOCKED, containerResponse.getStatus());
++
++ // add lock-token to current session and unlock the node
++ session.addLockToken(lockToken);
++ ((Node)session.getItem(path)).unlock();
++ }
++
+ @Override
+ protected String getRepositoryName()
+ {
+Index: exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java
+===================================================================
+--- exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java (revision 4103)
++++ exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java (working copy)
+@@ -1281,7 +1281,10 @@
+
+ if (lockTokenHeader != null)
+ {
+- lockTokenHeader = lockTokenHeader.substring(1, lockTokenHeader.length() - 1);
++ if (lockTokenHeader.startsWith("<"))
++ {
++ lockTokenHeader = lockTokenHeader.substring(1, lockTokenHeader.length() - 1);
++ }
+
+ if (lockTokenHeader.contains(WebDavConst.Lock.OPAQUE_LOCK_TOKEN))
+ {
+Index: exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/command/LockCommand.java
+===================================================================
+--- exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/command/LockCommand.java (revision 4103)
++++ exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/command/LockCommand.java (working copy)
+@@ -26,6 +26,7 @@
+ import org.exoplatform.services.jcr.webdav.command.lock.LockRequestEntity;
+ import org.exoplatform.services.jcr.webdav.lock.NullResourceLocksHolder;
+ import org.exoplatform.services.jcr.webdav.resource.GenericResource;
++import org.exoplatform.services.jcr.webdav.util.PropertyConstants;
+ import org.exoplatform.services.jcr.webdav.xml.PropertyWriteUtil;
+ import org.exoplatform.services.jcr.webdav.xml.WebDavNamespaceContext;
+ import org.exoplatform.services.log.ExoLogger;
+@@ -42,6 +43,7 @@
+ import javax.jcr.lock.LockException;
+ import javax.ws.rs.core.Response;
+ import javax.ws.rs.core.StreamingOutput;
++import javax.xml.namespace.QName;
+ import javax.xml.stream.XMLOutputFactory;
+ import javax.xml.stream.XMLStreamWriter;
+
+@@ -89,6 +91,7 @@
+ public Response lock(Session session, String path, HierarchicalProperty body, Depth depth, String timeout)
+ {
+
++ boolean bodyIsEmpty = (body == null);
+ String lockToken;
+ try
+ {
+@@ -106,7 +109,21 @@
+ }
+ }
+
+- Lock lock = node.lock((depth.getIntValue() != 1), false);
++ Lock lock;
++ if (bodyIsEmpty)
++ {
++ lock = node.getLock();
++ lock.refresh();
++
++ body = new HierarchicalProperty(new QName("DAV", "activelock", "D"));
++ HierarchicalProperty owner = new HierarchicalProperty(PropertyConstants.OWNER);
++ HierarchicalProperty href = new HierarchicalProperty(new QName("D", "href"), lock.getLockOwner());
++ body.addChild(owner).addChild(href);
++ }
++ else
++ {
++ lock = node.lock((depth.getIntValue() != 1), false);
++ }
+ lockToken = lock.getLockToken();
+ }
+ catch (PathNotFoundException pexc)
+@@ -118,8 +135,17 @@
+
+ lockToken = WebDavConst.Lock.OPAQUE_LOCK_TOKEN + ":" + lockToken;
+
+- return Response.ok(body(nsContext, requestEntity, depth, lockToken, requestEntity.getOwner(), timeout),
+- "text/xml").header("Lock-Token", "<" + lockToken + ">").build();
++ if (bodyIsEmpty)
++ {
++ return Response.ok(body(nsContext, requestEntity, depth, lockToken, requestEntity.getOwner(), timeout),
++ "text/xml").build();
++ }
++ else
++ {
++ return Response
++ .ok(body(nsContext, requestEntity, depth, lockToken, requestEntity.getOwner(), timeout), "text/xml")
++ .header("Lock-Token", "<" + lockToken + ">").build();
++ }
+
+ // TODO 412 Precondition Failed ?
+ }
+Index: exo.jcr.docs/exo.jcr.docs.developer/en/src/main/docbook/en-US/modules/jcr/protocols/webdav.xml
+===================================================================
+--- exo.jcr.docs/exo.jcr.docs.developer/en/src/main/docbook/en-US/modules/jcr/protocols/webdav.xml (revision 4103)
++++ exo.jcr.docs/exo.jcr.docs.developer/en/src/main/docbook/en-US/modules/jcr/protocols/webdav.xml (working copy)
+@@ -303,5 +303,43 @@
+ </listitem>
+ </orderedlist>
+ </section>
++ <section>
++ <title>Microsoft Office 2010</title>
++ <para>If you have Microsoft Office 2010 applications or Microsoft Office 2007 applications installed on a client computer. From that client computer, you try to access an Office file that is stored on a web server that is configured for Basic authentication. The connection between your computer and the web server does not use Secure Sockets Layer (SSL). When you try to open or to download the file, you experience the following symptoms:
++ <itemizedlist>
++ <listitem>
++ <para>The Office file does not open or download.</para>
++ </listitem>
++ <listitem>
++ <para>You do not receive a Basic authentication password prompt when you try to open or to download the file.</para>
++ </listitem>
++ <listitem>
++ <para>You do not receive an error message when you try to open the file. The associated Office application starts. However, the selected file does not open.</para>
++ </listitem>
++ </itemizedlist>
++ </para>
++ <para>To enable Basic authentication on the client computer, follow these steps:</para>
++ <orderedlist>
++ <listitem>
++ <para>Click Start, type regedit in the Start Search box, and then press Enter.</para>
++ </listitem>
++ <listitem>
++ <para>Locate and then click the following registry subkey: </para>
++ <para>HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet</para>
++ </listitem>
++ <listitem>
++ <para>On the Edit menu, point to New, and then click DWORD Value.</para>
++ </listitem>
++ <listitem>
++ <para>Type BasicAuthLevel, and then press Enter.</para>
++ </listitem>
++ <listitem>
++ <para>Right-click BasicAuthLevel, and then click Modify.</para>
++ </listitem>
++ <listitem>
++ <para>In the Value data box, type 2, and then click OK.</para>
++ </listitem>
++ </orderedlist>
++ </section>
+ </section>
+ </chapter>
15 years, 1 month
exo-jcr SVN: r4160 - in jcr/trunk: exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/command and 2 other directories.
by do-not-reply@jboss.org
Author: dkuleshov
Date: 2011-03-22 05:26:30 -0400 (Tue, 22 Mar 2011)
New Revision: 4160
Modified:
jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java
jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/command/LockCommand.java
jcr/trunk/exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestLock.java
jcr/trunk/exo.jcr.docs/exo.jcr.docs.developer/en/src/main/docbook/en-US/modules/jcr/protocols/webdav.xml
Log:
EXOJCR-1263: now LOCK method with empty body refreshes the lock, tokens not surrounded by '<' and '>' symbols are parsed correctly
Modified: jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java 2011-03-22 09:18:55 UTC (rev 4159)
+++ jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java 2011-03-22 09:26:30 UTC (rev 4160)
@@ -1471,7 +1471,10 @@
if (lockTokenHeader != null)
{
- lockTokenHeader = lockTokenHeader.substring(1, lockTokenHeader.length() - 1);
+ if (lockTokenHeader.startsWith("<"))
+ {
+ lockTokenHeader = lockTokenHeader.substring(1, lockTokenHeader.length() - 1);
+ }
if (lockTokenHeader.contains(WebDavConst.Lock.OPAQUE_LOCK_TOKEN))
{
Modified: jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/command/LockCommand.java
===================================================================
--- jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/command/LockCommand.java 2011-03-22 09:18:55 UTC (rev 4159)
+++ jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/command/LockCommand.java 2011-03-22 09:26:30 UTC (rev 4160)
@@ -26,6 +26,7 @@
import org.exoplatform.services.jcr.webdav.command.lock.LockRequestEntity;
import org.exoplatform.services.jcr.webdav.lock.NullResourceLocksHolder;
import org.exoplatform.services.jcr.webdav.resource.GenericResource;
+import org.exoplatform.services.jcr.webdav.util.PropertyConstants;
import org.exoplatform.services.jcr.webdav.xml.PropertyWriteUtil;
import org.exoplatform.services.jcr.webdav.xml.WebDavNamespaceContext;
import org.exoplatform.services.log.ExoLogger;
@@ -42,6 +43,7 @@
import javax.jcr.lock.LockException;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
+import javax.xml.namespace.QName;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamWriter;
@@ -89,6 +91,7 @@
public Response lock(Session session, String path, HierarchicalProperty body, Depth depth, String timeout)
{
+ boolean bodyIsEmpty = (body == null);
String lockToken;
try
{
@@ -106,7 +109,21 @@
}
}
- Lock lock = node.lock((depth.getIntValue() != 1), false);
+ Lock lock;
+ if (bodyIsEmpty)
+ {
+ lock = node.getLock();
+ lock.refresh();
+
+ body = new HierarchicalProperty(new QName("DAV", "activelock", "D"));
+ HierarchicalProperty owner = new HierarchicalProperty(PropertyConstants.OWNER);
+ HierarchicalProperty href = new HierarchicalProperty(new QName("D", "href"), lock.getLockOwner());
+ body.addChild(owner).addChild(href);
+ }
+ else
+ {
+ lock = node.lock((depth.getIntValue() != 1), false);
+ }
lockToken = lock.getLockToken();
}
catch (PathNotFoundException pexc)
@@ -118,8 +135,17 @@
lockToken = WebDavConst.Lock.OPAQUE_LOCK_TOKEN + ":" + lockToken;
- return Response.ok(body(nsContext, requestEntity, depth, lockToken, requestEntity.getOwner(), timeout),
- "text/xml").header("Lock-Token", "<" + lockToken + ">").build();
+ if (bodyIsEmpty)
+ {
+ return Response.ok(body(nsContext, requestEntity, depth, lockToken, requestEntity.getOwner(), timeout),
+ "text/xml").build();
+ }
+ else
+ {
+ return Response
+ .ok(body(nsContext, requestEntity, depth, lockToken, requestEntity.getOwner(), timeout), "text/xml")
+ .header("Lock-Token", "<" + lockToken + ">").build();
+ }
// TODO 412 Precondition Failed ?
}
Modified: jcr/trunk/exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestLock.java
===================================================================
--- jcr/trunk/exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestLock.java 2011-03-22 09:18:55 UTC (rev 4159)
+++ jcr/trunk/exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestLock.java 2011-03-22 09:26:30 UTC (rev 4160)
@@ -21,14 +21,18 @@
import org.exoplatform.common.http.HTTPStatus;
import org.exoplatform.services.jcr.webdav.BaseStandaloneTest;
import org.exoplatform.services.jcr.webdav.WebDavConstants.WebDAVMethods;
+import org.exoplatform.services.jcr.webdav.command.LockCommand.LockResultResponseEntity;
import org.exoplatform.services.jcr.webdav.util.TextUtil;
import org.exoplatform.services.jcr.webdav.utils.TestUtils;
+import org.exoplatform.services.rest.ExtHttpHeaders;
import org.exoplatform.services.rest.impl.ContainerResponse;
import org.exoplatform.services.rest.impl.MultivaluedMapImpl;
import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.InputStream;
+import javax.jcr.Node;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
@@ -47,6 +51,10 @@
private String fileContent = TestUtils.getFileContent();
+ private String lockRequestBody = "<D:lockinfo xmlns:D='DAV:'>" + "<D:lockscope>" + "<D:exclusive/>"
+ + "</D:lockscope>" + "<D:locktype>" + "<D:write/>" + "</D:locktype>" + "<D:owner>" + "<D:href>testOwner</D:href>"
+ + "</D:owner>" + "</D:lockinfo>";
+
@Override
public void setUp() throws Exception
{
@@ -55,17 +63,134 @@
TestUtils.addContent(session, path, inputStream, defaultFileNodeType, "");
}
+ /**
+ * Testing Lock method. Firstly lock existing node via webdav LOCK method and check for correct response status.
+ * Secondly check if the node is locked indeed via webdav DELETE method (no delete or any other operation cannot
+ * be performed with locked node). The response status must be LOCKED.
+ * @throws Exception
+ */
public void testLock() throws Exception
{
MultivaluedMap<String, String> headers = new MultivaluedMapImpl();
- headers.add("Content-Type", MediaType.TEXT_PLAIN);
- ContainerResponse containerResponse = service(WebDAVMethods.LOCK, getPathWS() + path, "", headers, null);
+ headers.add(ExtHttpHeaders.CONTENTTYPE, MediaType.TEXT_PLAIN);
+ ContainerResponse containerResponse =
+ service(WebDAVMethods.LOCK, getPathWS() + path, "", headers, lockRequestBody.getBytes());
+ MultivaluedMap<String, Object> lockResponseHeaders = containerResponse.getHttpHeaders();
+
assertEquals(HTTPStatus.OK, containerResponse.getStatus());
+
+ // some manipulation to serialize response entity
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ LockResultResponseEntity entity = (LockResultResponseEntity)containerResponse.getEntity();
+ entity.write(outputStream);
+
+ System.out.println("\n=Lock method response body (add lock)=====");
+ System.out.println("==========================================");
+ System.out.println(outputStream.toString());
+ System.out.println("==========================================\n");
+
containerResponse = service("DELETE", getPathWS() + path, "", null, null);
+
assertEquals(HTTPStatus.LOCKED, containerResponse.getStatus());
assertTrue(session.getRootNode().getNode(TextUtil.relativizePath(path)).isLocked());
+
+ // here we're unlocking a node, to use it in other tests
+ // firstly get lock-token from response entity
+ String lockToken = outputStream.toString();
+ lockToken = lockToken.substring(lockToken.indexOf(">opaquelocktoken:"));
+ lockToken = lockToken.substring(lockToken.indexOf(":") + 1, lockToken.indexOf("<"));
+
+ // secondly add lock-token to current session and unlock the node
+ session.addLockToken(lockToken);
+ ((Node)session.getItem(path)).unlock();
}
+ /**
+ * Testing lock refreshing. Firstly we lock the node. Secondly we refresh the lock
+ * via webdav LOCK method with no body. In both cases OK webdav status must be returned.
+ * @throws Exception
+ */
+ public void testLockRefresh() throws Exception
+ {
+ MultivaluedMap<String, String> headers = new MultivaluedMapImpl();
+ headers.add("Content-Type", MediaType.TEXT_PLAIN);
+ ContainerResponse containerResponse =
+ service(WebDAVMethods.LOCK, getPathWS() + path, "", headers, lockRequestBody.getBytes());
+ MultivaluedMap<String, Object> lockResponseHeaders = containerResponse.getHttpHeaders();
+
+ assertEquals(HTTPStatus.OK, containerResponse.getStatus());
+
+ // get lock-token from response body
+ // some manipulation to serialize response entity
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ LockResultResponseEntity entity = (LockResultResponseEntity)containerResponse.getEntity();
+ entity.write(outputStream);
+
+ String lockToken = outputStream.toString();
+ lockToken = lockToken.substring(lockToken.indexOf(">opaquelocktoken:"));
+ lockToken = lockToken.substring(lockToken.indexOf(":") + 1, lockToken.indexOf("<"));
+
+ //prepare to send lock refresh request
+ headers = new MultivaluedMapImpl();
+ headers.add(ExtHttpHeaders.CONTENTTYPE, MediaType.TEXT_PLAIN);
+ headers.add(ExtHttpHeaders.LOCKTOKEN, lockToken);
+
+ containerResponse = service(WebDAVMethods.LOCK, getPathWS() + path, "", headers, null);
+
+ assertEquals(HTTPStatus.OK, containerResponse.getStatus());
+
+ // some manipulation to serialize response entity
+ outputStream = new ByteArrayOutputStream();
+ entity = (LockResultResponseEntity)containerResponse.getEntity();
+ entity.write(outputStream);
+
+ System.out.println("\n=Lock method response body (refresh lock)=");
+ System.out.println("==========================================");
+ System.out.println(outputStream.toString());
+ System.out.println("==========================================\n");
+
+ // add lock-token to current session and unlock the node
+ session.addLockToken(lockToken);
+ ((Node)session.getItem(path)).unlock();
+
+ }
+
+ /**
+ * Testing trying to lock already locked node. Firstly we lock the node. Secondly we send webdav LOCK
+ * request with request body (because in case the body is empty the LOCK request should refresh already
+ * existing lock) to try to lock previously locked node. LOCKED webdav status must be returned.
+ * @throws Exception
+ */
+ public void testAlreadyLocked() throws Exception
+ {
+ MultivaluedMap<String, String> headers = new MultivaluedMapImpl();
+ headers.add(ExtHttpHeaders.CONTENTTYPE, MediaType.TEXT_PLAIN);
+ ContainerResponse containerResponse =
+ service(WebDAVMethods.LOCK, getPathWS() + path, "", headers, lockRequestBody.getBytes());
+
+ assertEquals(HTTPStatus.OK, containerResponse.getStatus());
+
+ // some manipulation to serialize response entity
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ LockResultResponseEntity entity = (LockResultResponseEntity)containerResponse.getEntity();
+ entity.write(outputStream);
+
+ String lockToken = outputStream.toString();
+ lockToken = lockToken.substring(lockToken.indexOf(">opaquelocktoken:"));
+ lockToken = lockToken.substring(lockToken.indexOf(":") + 1, lockToken.indexOf("<"));
+
+ // prepare to send lock request
+ headers = new MultivaluedMapImpl();
+ headers.add(ExtHttpHeaders.CONTENTTYPE, MediaType.TEXT_PLAIN);
+ containerResponse = service(WebDAVMethods.LOCK, getPathWS() + path, "", headers, lockRequestBody.getBytes());
+
+ assertEquals(HTTPStatus.LOCKED, containerResponse.getStatus());
+
+ // add lock-token to current session and unlock the node
+ session.addLockToken(lockToken);
+ ((Node)session.getItem(path)).unlock();
+ }
+
@Override
protected String getRepositoryName()
{
Modified: jcr/trunk/exo.jcr.docs/exo.jcr.docs.developer/en/src/main/docbook/en-US/modules/jcr/protocols/webdav.xml
===================================================================
--- jcr/trunk/exo.jcr.docs/exo.jcr.docs.developer/en/src/main/docbook/en-US/modules/jcr/protocols/webdav.xml 2011-03-22 09:18:55 UTC (rev 4159)
+++ jcr/trunk/exo.jcr.docs/exo.jcr.docs.developer/en/src/main/docbook/en-US/modules/jcr/protocols/webdav.xml 2011-03-22 09:26:30 UTC (rev 4160)
@@ -303,5 +303,43 @@
</listitem>
</orderedlist>
</section>
+ <section>
+ <title>Microsoft Office 2010</title>
+ <para>If you have Microsoft Office 2010 applications or Microsoft Office 2007 applications installed on a client computer. From that client computer, you try to access an Office file that is stored on a web server that is configured for Basic authentication. The connection between your computer and the web server does not use Secure Sockets Layer (SSL). When you try to open or to download the file, you experience the following symptoms:
+ <itemizedlist>
+ <listitem>
+ <para>The Office file does not open or download.</para>
+ </listitem>
+ <listitem>
+ <para>You do not receive a Basic authentication password prompt when you try to open or to download the file.</para>
+ </listitem>
+ <listitem>
+ <para>You do not receive an error message when you try to open the file. The associated Office application starts. However, the selected file does not open.</para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>To enable Basic authentication on the client computer, follow these steps:</para>
+ <orderedlist>
+ <listitem>
+ <para>Click Start, type regedit in the Start Search box, and then press Enter.</para>
+ </listitem>
+ <listitem>
+ <para>Locate and then click the following registry subkey: </para>
+ <para>HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet</para>
+ </listitem>
+ <listitem>
+ <para>On the Edit menu, point to New, and then click DWORD Value.</para>
+ </listitem>
+ <listitem>
+ <para>Type BasicAuthLevel, and then press Enter.</para>
+ </listitem>
+ <listitem>
+ <para>Right-click BasicAuthLevel, and then click Modify.</para>
+ </listitem>
+ <listitem>
+ <para>In the Value data box, type 2, and then click OK.</para>
+ </listitem>
+ </orderedlist>
+ </section>
</section>
</chapter>
15 years, 1 month
exo-jcr SVN: r4159 - in jcr/trunk/exo.jcr.component.ext/src: test/java/org/exoplatform/services/jcr/ext/backup and 1 other directories.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-03-22 05:18:55 -0400 (Tue, 22 Mar 2011)
New Revision: 4159
Modified:
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupTestCase.java
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupUseCasesTest.java
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestBackupManager.java
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestRDBMSBackupManager.java
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestRdbmsWorkspaceInitializer.java
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java
Log:
EXOJCR-1081: fully rewrited tests.
Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java 2011-03-22 09:17:49 UTC (rev 4158)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java 2011-03-22 09:18:55 UTC (rev 4159)
@@ -340,7 +340,9 @@
// STOP backups
for (BackupChain chain : stopedList)
+ {
stopBackup(chain);
+ }
}
catch (InterruptedException e)
{
Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupTestCase.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupTestCase.java 2011-03-22 09:17:49 UTC (rev 4158)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupTestCase.java 2011-03-22 09:18:55 UTC (rev 4159)
@@ -18,7 +18,6 @@
*/
package org.exoplatform.services.jcr.ext.backup;
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
import org.exoplatform.services.jcr.config.ContainerEntry;
import org.exoplatform.services.jcr.config.QueryHandlerEntry;
import org.exoplatform.services.jcr.config.QueryHandlerParams;
@@ -37,14 +36,11 @@
import org.exoplatform.services.jcr.impl.core.SessionImpl;
import org.exoplatform.services.jcr.impl.core.SessionRegistry;
import org.exoplatform.services.jcr.impl.core.query.SystemSearchManager;
-import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer;
import org.exoplatform.services.jcr.impl.storage.value.fs.FileValueStorage;
+import org.exoplatform.services.jcr.impl.util.io.DirectoryHelper;
import java.io.File;
import java.io.FileFilter;
-import java.io.IOException;
-import java.sql.Connection;
-import java.sql.Statement;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
@@ -59,8 +55,6 @@
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.version.VersionException;
-import javax.naming.InitialContext;
-import javax.sql.DataSource;
/**
* Created by The eXo Platform SAS Author : Peter Nedonosko peter.nedonosko(a)exoplatform.com.ua
@@ -110,36 +104,6 @@
super.setUp();// this
backup = getBackupManager();
-
- if (backup == null)
- throw new Exception("There are no BackupManagerImpl in configuration");
-
- for (String wsName : getReposityToBackup().getWorkspaceNames())
- {
- SessionImpl ws = (SessionImpl) getReposityToBackup().login(credentials, wsName);
- Node wsTestRoot = ws.getRootNode().addNode("backupTest");
- ws.save();
- addContent(wsTestRoot, 1, 10, 1);
-
- if ("ws1".equals(wsName))
- {
- ws1Session = ws;
- ws1TestRoot = wsTestRoot;
- }
- }
-
- RepositoryImpl repositoryDB7 = (RepositoryImpl) repositoryService.getRepository(repositoryNameToBackupSingleDB);
-
- for (String wsName : repositoryDB7.getWorkspaceNames())
- {
- SessionImpl sessionWS = (SessionImpl) repositoryDB7.login(credentials, wsName);
-
- Node wsTestRoot = sessionWS.getRootNode().addNode("backupTest");
- sessionWS.getRootNode().save();
- addContent(wsTestRoot, 1, 10, 1);
- sessionWS.getRootNode().save();
- }
-
}
protected abstract ExtendedBackupManager getBackupManager();
@@ -149,60 +113,7 @@
return (RepositoryImpl) repositoryService.getRepository(repositoryNameToBackup);
}
- @Override
- protected void tearDown() throws Exception
- {
- for (String wsName : getReposityToBackup().getWorkspaceNames())
- {
- try
- {
- SessionImpl ws = (SessionImpl) getReposityToBackup().login(credentials, wsName);
- ws.getRootNode().getNode("backupTest").remove();
- ws.save();
- }
- catch (PathNotFoundException e)
- {
- //skip
- }
- }
-
- RepositoryImpl repositoryDB7 = (RepositoryImpl) repositoryService.getRepository(repositoryNameToBackupSingleDB);
-
- for (String wsName : repositoryDB7.getWorkspaceNames())
- {
- try
- {
- SessionImpl ws = (SessionImpl) repositoryDB7.login(credentials, wsName);
- ws.getRootNode().getNode("backupTest").remove();
- ws.save();
- }
- catch (PathNotFoundException e)
- {
- //skip
- }
- }
-
- for (String wsName : getReposityToBackup().getWorkspaceNames())
- {
- if (wsName.equals(workspaceNameToRestore))
- {
- removeWorkspaceFully(getReposityToBackup().getName(), workspaceNameToRestore);
- }
- }
-
- try
- {
- repositoryService.getConfig().getRepositoryConfiguration(repositoryNameToRestore);
- removeRepositoryFully(repositoryNameToRestore);
- }
- catch (RepositoryConfigurationException e)
- {
- //skip
- }
-
- }
-
protected WorkspaceEntry makeWorkspaceEntry(String name, String sourceName)
{
WorkspaceEntry ws1e = (WorkspaceEntry) ws1Session.getContainer().getComponentInstanceOfType(WorkspaceEntry.class);
@@ -479,52 +390,31 @@
repositoryService.getRepository(repositoryName).getConfiguration().getSystemWorkspaceName()
.equals(wEntry.getName());
- //close all session
+ // remove workspace
forceCloseSession(repositoryName, wEntry.getName());
-
repositoryService.getRepository(repositoryName).removeWorkspace(wEntry.getName());
- //clean database
- DataSource ds =
- (DataSource)new InitialContext().lookup(wEntry.getContainer().getParameterValue(
- JDBCWorkspaceDataContainer.SOURCE_NAME));
- Connection conn = ds.getConnection();
+ // clean db
+ DBCleanService.cleanWorkspaceData(wEntry);
- if (conn.getMetaData().getTables(null, null, "JCR_MITEM", new String[]{"TABLE"}).next())
- {
- Statement st = conn.createStatement();
- st.execute("DROP TABLE JCR_MVALUE");
- st.execute("DROP TABLE JCR_MREF");
- st.execute("DROP TABLE JCR_MITEM");
- conn.commit();
- st.close();
- conn.close();
- }
- else if (conn.getMetaData().getTables(null, null, "JCR_SITEM", new String[]{"TABLE"}).next())
- {
- Statement st = conn.createStatement();
- st.execute("DROP TABLE JCR_SVALUE");
- st.execute("DROP TABLE JCR_SREF");
- st.execute("DROP TABLE JCR_SITEM");
- conn.commit();
- st.close();
- conn.close();
- }
-
+ // clean value storage
if (wEntry.getContainer().getValueStorages() != null)
{
for (ValueStorageEntry valueStorage : wEntry.getContainer().getValueStorages())
{
- removeDirectory(new File(valueStorage.getParameterValue(FileValueStorage.PATH)));
+ DirectoryHelper.removeDirectory(new File(valueStorage.getParameterValue(FileValueStorage.PATH)));
}
}
+ // clean index
if (wEntry.getQueryHandler() != null)
{
- removeDirectory(new File(wEntry.getQueryHandler().getParameterValue(QueryHandlerParams.PARAM_INDEX_DIR, null)));
+ DirectoryHelper.removeDirectory(new File(wEntry.getQueryHandler().getParameterValue(
+ QueryHandlerParams.PARAM_INDEX_DIR, null)));
if (isSystem)
{
- removeDirectory(new File(wEntry.getQueryHandler().getParameterValue(QueryHandlerParams.PARAM_INDEX_DIR,
+ DirectoryHelper.removeDirectory(new File(wEntry.getQueryHandler().getParameterValue(
+ QueryHandlerParams.PARAM_INDEX_DIR,
null)
+ "_" + SystemSearchManager.INDEX_DIR_SUFFIX));
}
@@ -566,16 +456,18 @@
{
for (ValueStorageEntry valueStorage : wEntry.getContainer().getValueStorages())
{
- removeDirectory(new File(valueStorage.getParameterValue(FileValueStorage.PATH)));
+ DirectoryHelper.removeDirectory(new File(valueStorage.getParameterValue(FileValueStorage.PATH)));
}
}
if (wEntry.getQueryHandler() != null)
{
- removeDirectory(new File(wEntry.getQueryHandler().getParameterValue(QueryHandlerParams.PARAM_INDEX_DIR, null)));
+ DirectoryHelper.removeDirectory(new File(wEntry.getQueryHandler().getParameterValue(
+ QueryHandlerParams.PARAM_INDEX_DIR, null)));
if (isSystem)
{
- removeDirectory(new File(wEntry.getQueryHandler().getParameterValue(QueryHandlerParams.PARAM_INDEX_DIR,
+ DirectoryHelper.removeDirectory(new File(wEntry.getQueryHandler().getParameterValue(
+ QueryHandlerParams.PARAM_INDEX_DIR,
null)
+ "_" + SystemSearchManager.INDEX_DIR_SUFFIX));
}
@@ -618,6 +510,7 @@
repositoryService.removeRepository(repositoryEntry.getName());
}
+ // clean data
for (WorkspaceEntry wEntry : workspaceList)
{
DBCleanService.cleanWorkspaceData(wEntry);
@@ -626,7 +519,7 @@
{
for (ValueStorageEntry valueStorage : wEntry.getContainer().getValueStorages())
{
- removeDirectory(new File(valueStorage.getParameterValue(FileValueStorage.PATH)));
+ DirectoryHelper.removeDirectory(new File(valueStorage.getParameterValue(FileValueStorage.PATH)));
}
}
@@ -634,12 +527,12 @@
if (wEntry.getQueryHandler() != null)
{
- removeDirectory(new File(wEntry.getQueryHandler().getParameterValue(QueryHandlerParams.PARAM_INDEX_DIR,
- null)));
+ DirectoryHelper.removeDirectory(new File(wEntry.getQueryHandler().getParameterValue(
+ QueryHandlerParams.PARAM_INDEX_DIR, null)));
if (isSystem)
{
- removeDirectory(new File(wEntry.getQueryHandler().getParameterValue(QueryHandlerParams.PARAM_INDEX_DIR,
- null)
+ DirectoryHelper.removeDirectory(new File(wEntry.getQueryHandler().getParameterValue(
+ QueryHandlerParams.PARAM_INDEX_DIR, null)
+ "_" + SystemSearchManager.INDEX_DIR_SUFFIX));
}
}
@@ -669,35 +562,4 @@
return sessionRegistry.closeSessions(workspaceName);
}
-
- /**
- * Remove directory.
- *
- * @param dir
- * directory to remove
- * @throws IOException
- * if any exception occurred
- */
- private void removeDirectory(File dir) throws IOException
- {
- if (PrivilegedFileHelper.isDirectory(dir))
- {
- for (File subFile : PrivilegedFileHelper.listFiles(dir))
- {
- removeDirectory(subFile);
- }
-
- if (!PrivilegedFileHelper.delete(dir))
- {
- throw new IOException("Can't remove folder : " + PrivilegedFileHelper.getCanonicalPath(dir));
- }
- }
- else
- {
- if (!PrivilegedFileHelper.delete(dir))
- {
- throw new IOException("Can't remove file : " + PrivilegedFileHelper.getCanonicalPath(dir));
- }
- }
- }
}
Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupUseCasesTest.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupUseCasesTest.java 2011-03-22 09:17:49 UTC (rev 4158)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupUseCasesTest.java 2011-03-22 09:18:55 UTC (rev 4159)
@@ -22,20 +22,16 @@
import org.exoplatform.services.jcr.core.ManageableRepository;
import org.exoplatform.services.jcr.ext.backup.impl.JobRepositoryRestore;
import org.exoplatform.services.jcr.ext.backup.impl.JobWorkspaceRestore;
-import org.exoplatform.services.jcr.impl.core.RepositoryImpl;
import org.exoplatform.services.jcr.impl.core.SessionImpl;
+import org.exoplatform.services.jcr.util.IdGenerator;
+import org.exoplatform.services.jcr.util.TesterConfigurationHelper;
-import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Map;
import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.Value;
-import javax.jcr.lock.Lock;
/**
* Created by The eXo Platform SAS.
@@ -47,631 +43,245 @@
*/
public abstract class AbstractBackupUseCasesTest extends AbstractBackupTestCase
{
+
+ private File blob;
- private static volatile long uuIndex;
+ private TesterConfigurationHelper helper = TesterConfigurationHelper.getInstance();
- protected static synchronized long getUUIndex()
+ @Override
+ public void setUp() throws Exception
{
- return uuIndex++;
+ super.setUp();
+ blob = createBLOBTempFile(300);
}
public void testFullBackupRestore() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+ addConent(repository, wsEntry.getName());
+
// backup
- File backDir = new File("target/backup/" + workspaceNameToBackup + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
// restore
- RepositoryEntry re = (RepositoryEntry)ws1Session.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
- WorkspaceEntry ws1back = makeWorkspaceEntry(workspaceNameToRestore, dataSourceToWorkspaceRestore);
+ WorkspaceEntry newWS = helper.createWorkspaceEntry(true, null);
- // BackupChainLog bchLog = new BackupChainLog(backDir, rconfig);
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ BackupChainLog bchLog = new BackupChainLog(backLog);
- backup.restore(bchLog, re.getName(), ws1back, false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- // check
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)getReposityToBackup().login(credentials, workspaceNameToRestore);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restore(bchLog, config.getRepository(), newWS, false);
+ checkConent(repository, newWS.getName());
}
public void testIncrementalBackupRestore() throws Exception
{
- // full backup & incremental
- File backDir = new File("target/backup/" + workspaceNameToBackup + getUUIndex());
- backDir.mkdirs();
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+ addConent(repository, wsEntry.getName());
- BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
- config.setBackupType(BackupManager.FULL_AND_INCREMENTAL);
-
- config.setBackupDir(backDir);
-
- backup.startBackup(config);
-
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // add some changes which will be logged in incremental log
- ws1TestRoot.getNode("node_3").remove();
- ws1TestRoot.getNode("node_4").remove();
- ws1TestRoot.getNode("node_5").remove();
- ws1TestRoot.addNode("node #3").setProperty("exo:data", "property #3");
- ws1TestRoot.addNode("node #5").setProperty("exo:extraData", "property #5");
-
- ws1TestRoot.addNode("binary_data").setProperty("data", new FileInputStream(createBLOBTempFile(500)));
-
- ws1TestRoot.save(); // log here via listener
-
- // stop all
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
- // restore
- RepositoryEntry re = (RepositoryEntry)ws1Session.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
- WorkspaceEntry ws1back = makeWorkspaceEntry(workspaceNameToRestore, dataSourceToWorkspaceRestore);
-
- File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
-
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
-
- backup.restore(bchLog, repositoryNameToBackup, ws1back, false);
-
- // check
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)getReposityToBackup().login(credentials, workspaceNameToRestore);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertFalse("Node should be removed", ws1backTestRoot.hasNode("node_3"));
- assertFalse("Node should be removed", ws1backTestRoot.hasNode("node_4"));
- assertFalse("Node should be removed", ws1backTestRoot.hasNode("node_5"));
-
- assertEquals("Restored content should be same", "property #3", ws1backTestRoot.getNode("node #3")
- .getProperty("exo:data").getString());
- assertEquals("Restored content should be same", "property #5", ws1backTestRoot.getNode("node #5")
- .getProperty("exo:extraData").getString());
-
- assertFalse("Proeprty should be removed", ws1backTestRoot.getNode("node #5").hasProperty("exo:data"));
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
- }
-
- public void testIncrementalBackupRestore2() throws Exception
- {
- // full backup with BLOBs & incremental with BLOBs
-
- // BLOBs for full
- File tempf = createBLOBTempFile("testIncrementalBackupRestore2-", 5 * 1024); // 5M
- tempf.deleteOnExit();
- ws1TestRoot.addNode("node_101").setProperty("exo:data", new FileInputStream(tempf));
- ws1TestRoot.addNode("node_102").setProperty("exo:extraData", new FileInputStream(tempf));
-
- File backDir = new File("target/backup/" + workspaceNameToBackup + getUUIndex());
+ // backup
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_AND_INCREMENTAL);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
+ addIncrementalConent(repository, wsEntry.getName());
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
+ backup.stopBackup(bch);
- // add some changes which will be logged in incremental log
- ws1TestRoot.addNode("node #53").setProperty("exo:extraData", "property #53");
- ws1TestRoot.save(); // log here via listener
-
- // BLOBs for incr
- ws1TestRoot.getNode("node_1").setProperty("exo:extraData", new FileInputStream(tempf));
- ws1TestRoot.getNode("node_5").setProperty("exo:data", new FileInputStream(tempf));
- ws1TestRoot.addNode("node_101").setProperty("exo:data", new FileInputStream(tempf));
- ws1TestRoot.addNode("node_102").setProperty("exo:data", new FileInputStream(tempf));
-
- ws1TestRoot.save(); // log here via listener
-
- ws1TestRoot.getNode("node_2").setProperty("exo:data", (Value)null); // remove property
- ws1TestRoot.getNode("node_3").setProperty("exo:data", new ByteArrayInputStream("aaa".getBytes())); // set
- // aaa
- // bytes
- ws1TestRoot.getNode("node_4").remove(); // (*)
- ws1TestRoot.save(); // log here via listener
-
- ws1TestRoot.getNode("node_5").addMixin("mix:lockable");
- ws1TestRoot.save(); // log here via listener
- Lock n107lock = ws1TestRoot.getNode("node_5").lock(true, false);
- ws1TestRoot.getSession().move(ws1TestRoot.getNode("node #53").getPath(),
- ws1TestRoot.getNode("node_5").getPath() + "/node #53");
- ws1TestRoot.save(); // log here via listener
-
- ws1TestRoot.getNode("node_6").addMixin("mix:referenceable");
- String id6 = ws1TestRoot.getNode("node_6").getUUID();
- ws1TestRoot.save(); // log here via listener
-
- // before(*), log here via listener
- ws1TestRoot.getSession().getWorkspace()
- .move(ws1TestRoot.getNode("node_6").getPath(), ws1TestRoot.getPath() + "/node_4"); // in place of
- // 4 removed
-
- // stop all
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
// restore
- RepositoryEntry re = (RepositoryEntry)ws1Session.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
- WorkspaceEntry ws1back = makeWorkspaceEntry(workspaceNameToRestore, dataSourceToWorkspaceRestore);
+ WorkspaceEntry newWS = helper.createWorkspaceEntry(true, null);
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ BackupChainLog bchLog = new BackupChainLog(backLog);
- backup.restore(bchLog, repositoryNameToBackup, ws1back, false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- // check
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)getReposityToBackup().login(credentials, workspaceNameToRestore);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
-
- assertTrue("Node should exists", ws1backTestRoot.getNode("node_5").hasNode("node #53"));
- assertTrue("Property should exists", ws1backTestRoot.getNode("node_5")
- .hasProperty("node #53/exo:extraData"));
-
- assertTrue("Node should exists", ws1backTestRoot.hasNode("node_7"));
- assertTrue("Property should exists", ws1backTestRoot.hasProperty("node_5/exo:data"));
- assertTrue("Property should exists", ws1backTestRoot.hasProperty("node_1/exo:extraData"));
- assertTrue("Node should exists", ws1backTestRoot.hasNode("node_102"));
-
- InputStream in = ws1backTestRoot.getNode("node_5").getProperty("exo:data").getStream();
- try
- {
- compareStream(new FileInputStream(tempf), in);
- }
- finally
- {
- in.close();
- }
-
- in = ws1backTestRoot.getNode("node_1").getProperty("exo:extraData").getStream();
- try
- {
- compareStream(new FileInputStream(tempf), in);
- }
- finally
- {
- in.close();
- }
-
- assertFalse("Property should be removed", ws1backTestRoot.getNode("node_2").hasProperty("exo:data"));
-
- in = ws1backTestRoot.getNode("node_3").getProperty("exo:data").getStream();
- try
- {
- compareStream(new ByteArrayInputStream("aaa".getBytes()), in);
- }
- finally
- {
- in.close();
- }
-
- assertTrue("Node should be mix:lockable ", ws1backTestRoot.getNode("node_5").isNodeType("mix:lockable"));
- assertFalse("Node should be not locked ", ws1backTestRoot.getNode("node_5").isLocked());
-
- assertEquals("Node should be mix:referenceable and UUID should be " + id6, id6,
- ws1backTestRoot.getNode("node_4").getUUID());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restore(bchLog, config.getRepository(), newWS, false);
+ checkConent(repository, newWS.getName());
+ checkIncrementalConent(repository, newWS.getName());
}
public void testFullBackupRestoreAsync() throws Exception
{
- SessionImpl sessionWS1 = (SessionImpl)getReposityToBackup().login(credentials, workspaceNameToBackup);
- sessionWS1.getRootNode().getNode("backupTest").getNode("node_5")
- .setProperty("exo:data", "Restored content should be same");
- sessionWS1.save();
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+ addConent(repository, wsEntry.getName());
// backup
- File backDir = new File("target/backup/" + workspaceNameToBackup + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
// restore
- WorkspaceEntry ws1back = makeWorkspaceEntry(workspaceNameToRestore, dataSourceToWorkspaceRestore);
+ WorkspaceEntry newWS = helper.createWorkspaceEntry(true, null);
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ BackupChainLog bchLog = new BackupChainLog(backLog);
- backup.restore(bchLog, repositoryNameToBackup, ws1back, true);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- while (backup.getLastRestore(repositoryNameToBackup, workspaceNameToRestore).getStateRestore() != JobWorkspaceRestore.RESTORE_SUCCESSFUL
- && backup.getLastRestore(repositoryNameToBackup, workspaceNameToRestore).getStateRestore() != JobWorkspaceRestore.RESTORE_FAIL)
- {
- Thread.sleep(50);
- }
+ backup.restore(bchLog, config.getRepository(), newWS, true);
+ waitEndOfRestore(config.getRepository(), newWS.getName());
- if (backup.getLastRestore(repositoryNameToBackup, workspaceNameToRestore).getStateRestore() == JobWorkspaceRestore.RESTORE_FAIL)
- throw (Exception)backup.getLastRestore(repositoryNameToBackup, workspaceNameToRestore)
- .getRestoreException();
-
- // check
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)getReposityToBackup().login(credentials, workspaceNameToRestore);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "Restored content should be same",
- ws1backTestRoot.getNode("node_5").getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ assertEquals(backup.getLastRestore(config.getRepository(), newWS.getName()).getStateRestore(),
+ JobWorkspaceRestore.RESTORE_SUCCESSFUL);
+ checkConent(repository, newWS.getName());
}
public void testAutoStopBackupFull() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+
// backup
- File backDir = new File("target/backup/" + workspaceNameToBackup + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
- while (bch.getFullBackupState() != BackupJob.FINISHED)
+ Thread.sleep(30000);
+ try
{
- Thread.yield();
- Thread.sleep(50);
+ assertEquals(backup.getCurrentBackups().size(), 0);
}
-
- Thread.sleep(30000);
-
- for (BackupChain chain : backup.getCurrentBackups())
- if (bch.getBackupId().equals(chain.getBackupId()))
- fail("The backup with id '" + chain.getBackupId() + "' should not be active");
+ finally
+ {
+ backup.stopBackup(bch);
+ }
}
public void testAutoStopBackupIncr() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+
// backup
- File backDir = new File("target/backup/" + workspaceNameToBackup + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_AND_INCREMENTAL);
- config.setBackupDir(backDir);
config.setIncrementalJobPeriod(3);
config.setIncrementalJobNumber(0);
+ config.setBackupDir(backDir);
BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
- while (bch.getFullBackupState() != BackupJob.FINISHED)
+ Thread.sleep(10000);
+ try
{
- Thread.yield();
- Thread.sleep(50);
+ assertEquals(backup.getCurrentBackups().size(), 1);
}
-
- Thread.sleep(30000);
-
- boolean isFail = true;
-
- for (BackupChain chain : backup.getCurrentBackups())
- if (bch.getBackupId().equals(chain.getBackupId()))
- isFail = false;
-
- if (isFail)
- fail("The backup with id '" + bch.getBackupId() + "' should be active");
-
- backup.stopBackup(bch);
+ finally
+ {
+ backup.stopBackup(bch);
+ }
}
public void testAutoStopBackupIncrRepetion() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+
// backup
- File backDir = new File("target/backup/" + workspaceNameToBackup + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_AND_INCREMENTAL);
- config.setBackupDir(backDir);
config.setIncrementalJobPeriod(4);
config.setIncrementalJobNumber(2);
+ config.setBackupDir(backDir);
- final BackupChain bch = backup.startBackup(config);
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
Thread.sleep(30000);
-
- for (BackupChain chain : backup.getCurrentBackups())
- if (bch.getBackupId().equals(chain.getBackupId()))
- fail("The backup with id '" + chain.getBackupId() + "' should not be active");
- }
-
- public void testTwoRestores() throws Exception
- {
+ try
{
- SessionImpl sessionWS1 = (SessionImpl)getReposityToBackup().login(credentials, workspaceNameToBackup);
-
- sessionWS1.getRootNode().addNode("asdasdasda", "nt:unstructured")
- .setProperty("data", new FileInputStream(createBLOBTempFile(1024)));
- sessionWS1.save();
-
- // 1-st backup
- File backDir = new File("target/backup/" + workspaceNameToBackup + getUUIndex());
- backDir.mkdirs();
-
- BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
- config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
- config.setBackupDir(backDir);
-
- BackupChain bch = backup.startBackup(config);
-
- // wait till full backup will be stopped
- while (!bch.isFinished())
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // 1-st restore
- WorkspaceEntry ws1_restore_1 = makeWorkspaceEntry(workspaceNameToRestore, dataSourceToWorkspaceRestore);
-
- File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
-
- backup.restore(bchLog, repositoryNameToBackup, ws1_restore_1, false);
-
- // check
- SessionImpl back1 = (SessionImpl)getReposityToBackup().login(credentials, workspaceNameToRestore);
- assertNotNull(back1.getRootNode().getNode("asdasdasda").getProperty("data"));
-
- // add date to restored workspace
- back1.getRootNode().addNode("gdfgrghfhf", "nt:unstructured")
- .setProperty("data", new FileInputStream(createBLOBTempFile(1024)));
- back1.save();
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ assertEquals(backup.getCurrentBackups().size(), 0);
}
-
+ finally
{
- // 2-st backup
- File backDir = new File("target/backup/" + workspaceNameToBackup + getUUIndex());
- backDir.mkdirs();
-
- BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToRestore);
- config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
- config.setBackupDir(backDir);
-
- BackupChain bch = backup.startBackup(config);
-
- // wait till full backup will be stopped
- while (!bch.isFinished())
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- removeWorkspaceFully(repositoryNameToBackup, workspaceNameToRestore);
-
- // 2-st restore
- WorkspaceEntry ws1_restore_2 = makeWorkspaceEntry(workspaceNameToRestore, dataSourceToWorkspaceRestore);
-
- File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
-
- backup.restore(bchLog, repositoryNameToBackup, ws1_restore_2, false);
-
- // check
- SessionImpl back2 = (SessionImpl)getReposityToBackup().login(credentials, workspaceNameToRestore);
- assertNotNull(back2.getRootNode().getNode("gdfgrghfhf").getProperty("data"));
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.stopBackup(bch);
}
}
- public void testStartFullBackupWIthJobPeriod() throws Exception
- {
- // backup
- File backDir = new File("target/backup" + workspaceNameToBackup + getUUIndex());
- backDir.mkdirs();
-
- BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
- config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
- config.setBackupDir(backDir);
- config.setIncrementalJobPeriod(3600);
-
- backup.startBackup(config);
-
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
- }
-
public void testNegativeIncremetalJobPeriod() throws Exception
{
// backup
- File backDir = new File("target/backup/ws1_negative_period" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository("fake");
+ config.setWorkspace("fake");
config.setBackupType(BackupManager.FULL_AND_INCREMENTAL);
config.setIncrementalJobPeriod(-1000);
-
config.setBackupDir(backDir);
try
@@ -681,22 +291,20 @@
}
catch (BackupConfigurationException e)
{
- //ok
}
}
public void testNegativeIncremetalJobNumber() throws Exception
{
// backup
- File backDir = new File("target/backup/ws1_negative_job_number" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository("fake");
+ config.setWorkspace("fake");
config.setBackupType(BackupManager.FULL_AND_INCREMENTAL);
config.setIncrementalJobNumber(-5);
-
config.setBackupDir(backDir);
try
@@ -706,2067 +314,994 @@
}
catch (BackupConfigurationException e)
{
- //ok
}
}
- public void testRestoreAfterFAilureRestore() throws Exception
+ public void testRestoreAfterFailureRestore() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+ addConent(repository, wsEntry.getName());
+
// backup
- File backDir = new File("target/backup/" + workspaceNameToBackup + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
// restore
- RepositoryEntry re = (RepositoryEntry)ws1Session.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
- WorkspaceEntry ws1back = makeWorkspaceEntry(workspaceNameToRestore, dataSourceToWorkspaceRestore + "NOT_EXIST");
+ WorkspaceEntry newWS = helper.createWorkspaceEntry(true, "NOT_EXISTED_DS");
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ assertTrue(backLog.exists());
- try
- {
- backup.restore(bchLog, repositoryNameToBackup, ws1back, false);
- fail("The backup can not be restored.");
- }
- catch (Exception e)
- {
- //ok
+ BackupChainLog bchLog = new BackupChainLog(backLog);
- WorkspaceEntry ws1backTwo = makeWorkspaceEntry(workspaceNameToRestore, dataSourceToWorkspaceRestore);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- backup.restore(bchLog, repositoryNameToBackup, ws1backTwo, false);
- }
-
- // check
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)getReposityToBackup().login(credentials, workspaceNameToRestore);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
+ try
+ {
+ backup.restore(bchLog, config.getRepository(), newWS, false);
+ fail("Exception should be thrown");
}
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ catch (Exception e)
+ {
+ }
+
+ newWS = helper.createWorkspaceEntry(true, null);
+ backup.restore(bchLog, config.getRepository(), newWS, false);
+
+ checkConent(repository, newWS.getName());
}
public void testRepositoryFullBackupRestore() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
-
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
backup.stopBackup(bch);
// restore
- RepositoryEntry newRepositoryEntry =
- makeRepositoryEntry(repositoryNameToRestore, getReposityToBackup().getConfiguration(),
- dataSourceToRepositoryRestore, null);
+ RepositoryEntry newRE =
+ helper.createRepositoryEntry(true, repository.getConfiguration().getSystemWorkspaceName(), null);
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
- backup.restore(bchLog, newRepositoryEntry, false);
- assertEquals(JobWorkspaceRestore.RESTORE_SUCCESSFUL,
- backup.getLastRepositoryRestore(newRepositoryEntry.getName()).getStateRestore());
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- // check
- ManageableRepository restoredRepository = repositoryService.getRepository(repositoryNameToRestore);
-
- for (String wsName : restoredRepository.getWorkspaceNames())
- {
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)restoredRepository.login(credentials, wsName);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restore(bchLog, newRE, false);
+ checkConent(repositoryService.getRepository(newRE.getName()), newRE.getSystemWorkspaceName());
}
public void testRepositoryFullAndIncrementalBackupRestore() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_AND_INCREMENTAL);
- config.setIncrementalJobPeriod(1000);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackup);
+ addIncrementalConent(repository, repository.getConfiguration().getSystemWorkspaceName());
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FULL_BACKUP_FINISHED_INCREMENTAL_BACKUP_WORKING)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- //will be saved in incremental backup
- //will be saved in incremental backup
- Session wsSession = getReposityToBackup().login(credentials, "ws");
- wsSession.getRootNode().getNode("backupTest").addNode("binary_data")
- .setProperty("data", new FileInputStream(createBLOBTempFile(500)));
- wsSession.save();
-
- // stop fullBackup
backup.stopBackup(bch);
// restore
- RepositoryEntry newRepositoryEntry =
- makeRepositoryEntry(repositoryNameToRestore, getReposityToBackup().getConfiguration(),
- dataSourceToRepositoryRestore, null);
+ RepositoryEntry newRE =
+ helper.createRepositoryEntry(true, repository.getConfiguration().getSystemWorkspaceName(), null);
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
- backup.restore(bchLog, newRepositoryEntry, false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- // check
- ManageableRepository restoredRepository = repositoryService.getRepository(repositoryNameToRestore);
-
- for (String wsName : restoredRepository.getWorkspaceNames())
- {
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)restoredRepository.login(credentials, wsName);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
-
- if (wsName.equals("ws"))
- {
- assertNotNull(ws1backTestRoot.getNode("binary_data"));
- assertNotNull(ws1backTestRoot.getNode("binary_data").getProperty("data"));
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restore(bchLog, newRE, false);
+ checkConent(repositoryService.getRepository(newRE.getName()), newRE.getSystemWorkspaceName());
+ checkIncrementalConent(repositoryService.getRepository(newRE.getName()), newRE.getSystemWorkspaceName());
}
public void testRepositoryFullBackupAsynchronusRestore() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
-
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
backup.stopBackup(bch);
// restore
- RepositoryEntry newRepositoryEntry =
- makeRepositoryEntry(repositoryNameToRestore, getReposityToBackup().getConfiguration(),
- dataSourceToRepositoryRestore, null);
+ RepositoryEntry newRE =
+ helper.createRepositoryEntry(true, repository.getConfiguration().getSystemWorkspaceName(), null);
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
- backup.restore(bchLog, newRepositoryEntry, true);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- JobRepositoryRestore job = backup.getLastRepositoryRestore(repositoryNameToRestore);
+ backup.restore(bchLog, newRE, true);
+ waitEndOfRestore(newRE.getName());
- while (job.getStateRestore() != JobRepositoryRestore.REPOSITORY_RESTORE_SUCCESSFUL
- || job.getStateRestore() == JobRepositoryRestore.REPOSITORY_RESTORE_FAIL)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // check
- ManageableRepository restoredRepository = repositoryService.getRepository(repositoryNameToRestore);
-
- for (String wsName : restoredRepository.getWorkspaceNames())
- {
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)restoredRepository.login(credentials, wsName);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ checkConent(repositoryService.getRepository(newRE.getName()), newRE.getSystemWorkspaceName());
}
public void testRepositoryFullBackupAsynchronusRestoreWorkspaceMapping() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
-
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
backup.stopBackup(bch);
// restore
- RepositoryEntry newRepositoryEntry =
- makeRepositoryEntry(repositoryNameToRestore, getReposityToBackup().getConfiguration(),
- dataSourceToRepositoryRestore, null);
+ RepositoryEntry newRE = helper.createRepositoryEntry(true, null, null);
// create workspace mappingS
Map<String, String> workspaceMapping = new HashedMap();
- for (WorkspaceEntry we : newRepositoryEntry.getWorkspaceEntries())
- {
- workspaceMapping.put(we.getName(), we.getName() + "_mapped");
- }
+ workspaceMapping.put(repository.getConfiguration().getSystemWorkspaceName(), newRE.getSystemWorkspaceName());
- // Change workspaeNames
- for (WorkspaceEntry we : newRepositoryEntry.getWorkspaceEntries())
- {
- if (newRepositoryEntry.getSystemWorkspaceName().equals(we.getName()))
- {
- newRepositoryEntry.setSystemWorkspaceName(workspaceMapping.get(we.getName()));
- newRepositoryEntry.setDefaultWorkspaceName(workspaceMapping.get(we.getName()));
- }
-
- we.setName(workspaceMapping.get(we.getName()));
- we.setUniqueName(we.getUniqueName() + workspaceMapping.get(we.getName()));
- }
-
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
- backup.restore(bchLog, newRepositoryEntry, workspaceMapping, true);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- JobRepositoryRestore job = backup.getLastRepositoryRestore(repositoryNameToRestore);
+ backup.restore(bchLog, newRE, workspaceMapping, true);
+ waitEndOfRestore(newRE.getName());
- while (job.getStateRestore() != JobRepositoryRestore.REPOSITORY_RESTORE_SUCCESSFUL
- || job.getStateRestore() == JobRepositoryRestore.REPOSITORY_RESTORE_FAIL)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // check
- ManageableRepository restoredRepository = repositoryService.getRepository(repositoryNameToRestore);
-
- for (String wsName : restoredRepository.getWorkspaceNames())
- {
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)restoredRepository.login(credentials, workspaceMapping.get(wsName));
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ checkConent(repositoryService.getRepository(newRE.getName()), newRE.getSystemWorkspaceName());
}
public void testAutoStopRepositoryBackupIncrRepetion() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_AND_INCREMENTAL);
- config.setBackupDir(backDir);
config.setIncrementalJobPeriod(4);
config.setIncrementalJobNumber(2);
+ config.setBackupDir(backDir);
- final RepositoryBackupChain bch = backup.startBackup(config);
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- while (bch.getState() != RepositoryBackupChain.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
+ // restore
+ RepositoryEntry newRE = helper.createRepositoryEntry(true, null, null);
- Thread.sleep(30000);
+ // create workspace mappingS
+ Map<String, String> workspaceMapping = new HashedMap();
+ workspaceMapping.put(repository.getConfiguration().getSystemWorkspaceName(), newRE.getSystemWorkspaceName());
- for (RepositoryBackupChain chain : backup.getCurrentRepositoryBackups())
- if (bch.getBackupId().equals(chain.getBackupId()))
- fail("The backup with id '" + chain.getBackupId() + "' should not be active");
+ File backLog = new File(bch.getLogFilePath());
+ assertTrue(backLog.exists());
+
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
+
+ backup.restore(bchLog, newRE, workspaceMapping, true);
+ waitEndOfRestore(newRE.getName());
+
+ Thread.sleep(30000);
+ assertEquals(backup.getCurrentRepositoryBackups().size(), 0);
}
public void testRepositoryRestoreFail() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
-
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
backup.stopBackup(bch);
- Thread.sleep(5000);
-
- String repoName = repositoryNameToRestore + System.currentTimeMillis();
-
// restore
- RepositoryEntry newRepositoryEntry =
- makeRepositoryEntry(repoName, getReposityToBackup().getConfiguration(), dataSourceToRepositoryRestore, null);
+ RepositoryEntry newRE = helper.createRepositoryEntry(true, null, null);
+ newRE.getWorkspaceEntries().get(0).getQueryHandler().setType("gg");
- //create broken system workspaceEntry
- newRepositoryEntry.getWorkspaceEntries().get(0).getQueryHandler().setType("gg");
+ // create workspace mappingS
+ Map<String, String> workspaceMapping = new HashedMap();
+ workspaceMapping.put(repository.getConfiguration().getSystemWorkspaceName(), newRE.getSystemWorkspaceName());
- File backLog = new File(backup.getRepositoryBackupsLogs()[0].getLogFilePath());
+ File backLog = new File(bch.getLogFilePath());
+ assertTrue(backLog.exists());
RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
+
try
{
- backup.restore(bchLog, newRepositoryEntry, false);
- fail("The backup " + backLog.getAbsolutePath() + "shoulde not restored.");
+ backup.restore(bchLog, newRE, workspaceMapping, false);
+ fail("Exception should be thrown");
}
catch (RepositoryRestoreExeption e)
{
- // ok.
}
-
- // check
- try
- {
- ManageableRepository restoredRepository = repositoryService.getRepository(repoName);
- fail("The repository " + repositoryNameToRestore + "shoulde not exists.");
- }
- catch (RepositoryException e)
- {
- // ok.
- }
}
- public void testIncrementalBackupRestoreEXOJCR_737() throws Exception
- {
- // full backup with BLOBs & incremental with BLOBs
-
- // BLOBs for full
- File tempf = createBLOBTempFile("testIncrementalBackupRestore737-", 5 * 1024); // 5M
- tempf.deleteOnExit();
-
- File backDir = new File("target/backup/" + getUUIndex());
- backDir.mkdirs();
-
- BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
- config.setBackupType(BackupManager.FULL_AND_INCREMENTAL);
-
- config.setBackupDir(backDir);
-
- backup.startBackup(config);
-
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // add data
- ws1Session.getRootNode().addNode("node_101").setProperty("exo:data", new FileInputStream(tempf));
- ws1Session.getRootNode().addNode("node_102").setProperty("exo:extraData", new FileInputStream(tempf));
- ws1Session.getRootNode().save(); // log here via listener
-
- // stop backup
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
- //remove data
- ws1Session.getRootNode().getNode("node_101").remove();
- ws1Session.getRootNode().getNode("node_102").remove();
- ws1Session.getRootNode().save();
-
- // restore
- WorkspaceEntry ws1back = makeWorkspaceEntry(workspaceNameToRestore, dataSourceToWorkspaceRestore);
-
- File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
-
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
-
- backup.restore(bchLog, repositoryNameToBackup, ws1back, false);
-
- // check
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)getReposityToBackup().login(credentials, workspaceNameToRestore);
-
- Node node_101 = back1.getRootNode().getNode("node_101");
- assertNotNull(node_101);
-
- InputStream in = node_101.getProperty("exo:data").getStream();
- try
- {
- assertEquals(tempf.length(), in.available());
- compareStream(new FileInputStream(tempf), in);
- }
- finally
- {
- in.close();
- }
-
- Node node_102 = back1.getRootNode().getNode("node_102");
- assertNotNull(node_102);
-
- in = node_102.getProperty("exo:extraData").getStream();
- try
- {
- assertEquals(tempf.length(), in.available());
- compareStream(new FileInputStream(tempf), in);
- }
- finally
- {
- in.close();
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
- }
-
public void testExistedWorkspaceRestoreMultiDB() throws Exception
{
- String repositoryNameToBackup = "db8";
- SessionImpl ws1Session =
- (SessionImpl)repositoryService.getRepository(repositoryNameToBackup).login(credentials, "ws1");
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+ addConent(repository, wsEntry.getName());
- ws1Session.getRootNode().addNode("TESTNODE");
- ws1Session.save();
-
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
// restore
- RepositoryEntry re = (RepositoryEntry)ws1Session.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
- WorkspaceEntry ws1 = null;
- for (WorkspaceEntry we : re.getWorkspaceEntries())
- {
- if (ws1Session.getWorkspace().getName().equals(we.getName()))
- {
- ws1 = we;
- break;
- }
- }
-
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ BackupChainLog bchLog = new BackupChainLog(backLog);
- backup.restoreExistingWorkspace(bchLog, repositoryNameToBackup, ws1, false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- // check
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)repositoryService.getRepository("db8").login(credentials, "ws1");
- Node ws1backTestRoot = back1.getRootNode().getNode("TESTNODE");
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
-
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restoreExistingWorkspace(bchLog, repository.getConfiguration().getName(), repository.getConfiguration()
+ .getWorkspaceEntries().get(1), false);
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
}
- public void testExistedWorkspaceRestore() throws Exception
+ public void testExistedWorkspaceRestoreSingleDB() throws Exception
{
- SessionImpl ws1Session = (SessionImpl)repositoryService.getRepository("db7").login(credentials, "ws1");
+ // prepare
+ String dsName = helper.createDatasource();
+ ManageableRepository repository = helper.createRepository(container, false, dsName);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(false, dsName);
+ helper.addWorkspace(repository, wsEntry);
+ addConent(repository, wsEntry.getName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository("db7");
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- BackupChain bch = backup.findBackup("db7", workspaceNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
// restore
- RepositoryEntry re = (RepositoryEntry)ws1Session.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
- WorkspaceEntry ws1 = null;
- for (WorkspaceEntry we : re.getWorkspaceEntries())
- {
- if (ws1Session.getWorkspace().getName().equals(we.getName()))
- {
- ws1 = we;
- break;
- }
- }
-
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ BackupChainLog bchLog = new BackupChainLog(backLog);
- backup.restoreExistingWorkspace(bchLog, "db7", ws1, false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- // check
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)repositoryService.getRepository("db7").login(credentials, "ws1");
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restoreExistingWorkspace(bchLog, repository.getConfiguration().getName(), repository.getConfiguration()
+ .getWorkspaceEntries().get(1), false);
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
}
public void testExistedWorkspaceRestoreAsync() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+ addConent(repository, wsEntry.getName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
// restore
- RepositoryEntry re = (RepositoryEntry)ws1Session.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
- WorkspaceEntry ws1 = null;
- for (WorkspaceEntry we : re.getWorkspaceEntries())
- {
- if (ws1Session.getWorkspace().getName().equals(we.getName()))
- {
- ws1 = we;
- break;
- }
- }
-
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ BackupChainLog bchLog = new BackupChainLog(backLog);
- backup.restoreExistingWorkspace(bchLog, repositoryNameToBackup, ws1, true);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- while (backup.getLastRestore(repositoryNameToBackup, ws1.getName()).getStateRestore() != JobWorkspaceRestore.RESTORE_SUCCESSFUL
- && backup.getLastRestore(repositoryNameToBackup, ws1.getName()).getStateRestore() != JobWorkspaceRestore.RESTORE_FAIL)
- {
- Thread.sleep(50);
- }
+ backup.restoreExistingWorkspace(bchLog, repository.getConfiguration().getName(), repository.getConfiguration()
+ .getWorkspaceEntries().get(1), true);
+ waitEndOfRestore(repository.getConfiguration().getName(), repository.getConfiguration().getWorkspaceEntries()
+ .get(1).getName());
- assertEquals(backup.getLastRestore(repositoryNameToBackup, ws1.getName()).getStateRestore(),
- JobWorkspaceRestore.RESTORE_SUCCESSFUL);
+ assertEquals(
+ backup.getLastRestore(repository.getConfiguration().getName(),
+ repository.getConfiguration().getWorkspaceEntries().get(1).getName()).getStateRestore(),
+ JobWorkspaceRestore.RESTORE_SUCCESSFUL);
- // check
- SessionImpl back1 = null;
- try
- {
- back1 =
- (SessionImpl)repositoryService.getRepository(repositoryNameToBackup).login(credentials,
- workspaceNameToBackup);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
}
- public void testExistedWorkspaceRestoreAsync2() throws Exception
+ public void testExistedRepositoryRestoreMultiDB() throws Exception
{
+ // prepare
+ String dsName = helper.createDatasource();
+ ManageableRepository repository = helper.createRepository(container, true, dsName);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
- BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ RepositoryBackupConfig config = new RepositoryBackupConfig();
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
+ File backLog = new File(bch.getLogFilePath());
+ assertTrue(backLog.exists());
- // stop fullBackup
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
// restore
- RepositoryEntry re = (RepositoryEntry)ws1Session.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
- WorkspaceEntry ws1 = null;
- for (WorkspaceEntry we : re.getWorkspaceEntries())
- {
- if (ws1Session.getWorkspace().getName().equals(we.getName()))
- {
- ws1 = we;
- break;
- }
- }
+ RepositoryEntry newRE =
+ helper.createRepositoryEntry(true, repository.getConfiguration().getSystemWorkspaceName(), dsName);
+ newRE.setName(repository.getConfiguration().getName());
- File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
-
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
-
- backup.restoreExistingWorkspace(bchLog.getBackupId(), repositoryNameToBackup, ws1, true);
-
- while (backup.getLastRestore(repositoryNameToBackup, ws1.getName()).getStateRestore() != JobWorkspaceRestore.RESTORE_SUCCESSFUL
- && backup.getLastRestore(repositoryNameToBackup, ws1.getName()).getStateRestore() != JobWorkspaceRestore.RESTORE_FAIL)
- {
- Thread.sleep(50);
- }
-
- assertEquals(backup.getLastRestore(repositoryNameToBackup, ws1.getName()).getStateRestore(),
- JobWorkspaceRestore.RESTORE_SUCCESSFUL);
-
- // check
- SessionImpl back1 = null;
- try
- {
- back1 =
- (SessionImpl)repositoryService.getRepository(repositoryNameToBackup).login(credentials,
- workspaceNameToBackup);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restoreExistingRepository(bchLog, newRE, false);
+ checkConent(repositoryService.getRepository(newRE.getName()), newRE.getSystemWorkspaceName());
}
- public void testExistedRepositoryRestore() throws Exception
+ public void testExistedRepositoryRestoreSingelDB() throws Exception
{
+ // prepare
+ String dsName = helper.createDatasource();
+ ManageableRepository repository = helper.createRepository(container, false, dsName);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
-
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
backup.stopBackup(bch);
- // restore
- RepositoryEntry re =
- makeRepositoryEntry(repositoryNameToBackup, getReposityToBackup().getConfiguration(), null, null);
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
- backup.restoreExistingRepository(bchLog, re, false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- assertEquals(JobWorkspaceRestore.RESTORE_SUCCESSFUL, backup.getLastRepositoryRestore(repositoryNameToBackup)
- .getStateRestore());
+ // restore
+ RepositoryEntry newRE =
+ helper.createRepositoryEntry(false, repository.getConfiguration().getSystemWorkspaceName(), dsName);
+ newRE.setName(repository.getConfiguration().getName());
- // check
- ManageableRepository restoredRepository = repositoryService.getRepository(repositoryNameToBackup);
-
- for (String wsName : restoredRepository.getWorkspaceNames())
- {
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)restoredRepository.login(credentials, wsName);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restoreExistingRepository(bchLog, newRE, false);
+ checkConent(repositoryService.getRepository(newRE.getName()), newRE.getSystemWorkspaceName());
}
- public void testExistedRepositoryRestoreSingelDB() throws Exception
+ public void testExistedRepositoryRestoreAsync() throws Exception
{
- RepositoryImpl repositoryDB7 = (RepositoryImpl)repositoryService.getRepository(repositoryNameToBackupSingleDB);
- SessionImpl sessionWS = (SessionImpl)repositoryDB7.login(credentials, workspaceNameToBackup);
+ // prepare
+ String dsName = helper.createDatasource();
+ ManageableRepository repository = helper.createRepository(container, false, dsName);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackupSingleDB);
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
-
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackupSingleDB);
-
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
backup.stopBackup(bch);
- // restore
- RepositoryEntry baseRE =
- (RepositoryEntry)sessionWS.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
- RepositoryEntry re = makeRepositoryEntry(baseRE.getName(), baseRE, null, null);
-
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
- backup.restoreExistingRepository(bchLog, re, false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- assertEquals(JobWorkspaceRestore.RESTORE_SUCCESSFUL, backup.getLastRepositoryRestore(re.getName())
- .getStateRestore());
+ // restore
+ RepositoryEntry newRE =
+ helper.createRepositoryEntry(false, repository.getConfiguration().getSystemWorkspaceName(), dsName);
+ newRE.setName(repository.getConfiguration().getName());
- // check
- ManageableRepository restoredRepository = repositoryService.getRepository(repositoryNameToBackupSingleDB);
+ backup.restoreExistingRepository(bchLog, newRE, true);
- for (String wsName : restoredRepository.getWorkspaceNames())
- {
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)restoredRepository.login(credentials, wsName);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ waitEndOfRestore(repository.getConfiguration().getName());
+
+ assertEquals(JobRepositoryRestore.REPOSITORY_RESTORE_SUCCESSFUL,
+ backup.getLastRepositoryRestore(repository.getConfiguration().getName()).getStateRestore());
+
+ checkConent(repositoryService.getRepository(newRE.getName()), newRE.getSystemWorkspaceName());
}
- public void testExistedRepositoryRestoreAsync() throws Exception
+
+ public void testExistedWorkspaceRestoreWithConfig() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+ addConent(repository, wsEntry.getName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
- RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
+ BackupConfig config = new BackupConfig();
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
-
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
backup.stopBackup(bch);
// restore
- RepositoryEntry re =
- makeRepositoryEntry(repositoryNameToBackup, getReposityToBackup().getConfiguration(), null, null);
-
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ BackupChainLog bchLog = new BackupChainLog(backLog);
- backup.restoreExistingRepository(bchLog, re, true);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- JobRepositoryRestore job = backup.getLastRepositoryRestore(repositoryNameToBackup);
-
- while (job.getStateRestore() != JobRepositoryRestore.REPOSITORY_RESTORE_SUCCESSFUL
- && job.getStateRestore() != JobRepositoryRestore.REPOSITORY_RESTORE_FAIL)
- {
- Thread.sleep(50);
- }
-
- assertEquals(JobRepositoryRestore.REPOSITORY_RESTORE_SUCCESSFUL,
- backup.getLastRepositoryRestore(repositoryNameToBackup).getStateRestore());
-
- // check
- ManageableRepository restoredRepository = repositoryService.getRepository(repositoryNameToBackup);
-
- for (String wsName : restoredRepository.getWorkspaceNames())
- {
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)restoredRepository.login(credentials, wsName);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restoreExistingWorkspace(bchLog.getBackupId(), false);
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
}
- public void testExistedRepositoryRestoreAsync2() throws Exception
+ public void testExistedRepositoryRestoreWithConfig() throws Exception
{
+ // prepare
+ String dsName = helper.createDatasource();
+ ManageableRepository repository = helper.createRepository(container, true, dsName);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
+
// backup
- File backDir = new File("target/backup");
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
-
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
backup.stopBackup(bch);
- // restore
- RepositoryEntry re =
- makeRepositoryEntry(repositoryNameToBackup, getReposityToBackup().getConfiguration(), null, null);
-
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
- backup.restoreExistingRepository(bchLog.getBackupId(), re, true);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- JobRepositoryRestore job = backup.getLastRepositoryRestore(repositoryNameToBackup);
+ // restore
+ RepositoryEntry newRE =
+ helper.createRepositoryEntry(true, repository.getConfiguration().getSystemWorkspaceName(), dsName);
+ newRE.setName(repository.getConfiguration().getName());
- while (job.getStateRestore() != JobRepositoryRestore.REPOSITORY_RESTORE_SUCCESSFUL
- && job.getStateRestore() != JobRepositoryRestore.REPOSITORY_RESTORE_FAIL)
- {
- Thread.sleep(50);
- }
-
- assertEquals(JobWorkspaceRestore.RESTORE_SUCCESSFUL, backup.getLastRepositoryRestore(repositoryNameToBackup)
- .getStateRestore());
-
- // check
- ManageableRepository restoredRepository = repositoryService.getRepository(repositoryNameToBackup);
-
- for (String wsName : restoredRepository.getWorkspaceNames())
- {
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)restoredRepository.login(credentials, wsName);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restoreExistingRepository(bchLog.getBackupId(), false);
+ checkConent(repositoryService.getRepository(newRE.getName()), newRE.getSystemWorkspaceName());
}
- public void testExistedWorkspaceRestoreSingelDB() throws Exception
+ public void testWorkspaceRestoreWithConfig() throws Exception
{
- RepositoryImpl repositoryDB7 = (RepositoryImpl)repositoryService.getRepository(repositoryNameToBackupSingleDB);
- SessionImpl sessionWS = (SessionImpl)repositoryDB7.login(credentials, workspaceNameToBackup);
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+ addConent(repository, wsEntry.getName());
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackupSingleDB);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- BackupChain bch = backup.findBackup(repositoryNameToBackupSingleDB, workspaceNameToBackup);
+ removeWorkspaceFully(repository.getConfiguration().getName(), wsEntry.getName());
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
// restore
- RepositoryEntry re = (RepositoryEntry)sessionWS.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
- WorkspaceEntry ws1 = null;
- for (WorkspaceEntry we : re.getWorkspaceEntries())
- {
- if (sessionWS.getWorkspace().getName().equals(we.getName()))
- {
- ws1 = we;
- break;
- }
- }
-
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ BackupChainLog bchLog = new BackupChainLog(backLog);
- backup.restoreExistingWorkspace(bchLog, repositoryNameToBackupSingleDB, ws1, false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- // check
- SessionImpl back1 = null;
- try
- {
- repositoryDB7 = (RepositoryImpl)repositoryService.getRepository(repositoryNameToBackupSingleDB);
- back1 = (SessionImpl)repositoryDB7.login(credentials, workspaceNameToBackup);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restoreWorkspace(bchLog.getBackupId(), false);
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
}
- public void testExistedWorkspaceRestoreWithConfig() throws Exception
+ public void testRepositoryRestoreWithConfig() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
- BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ RepositoryBackupConfig config = new RepositoryBackupConfig();
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
+ // restore
+ removeRepositoryFully(repository.getConfiguration().getName());
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
- super.tearDown();
-
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
- backup.restoreExistingWorkspace(bchLog.getBackupId(), false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- // check
- SessionImpl back1 = null;
- try
- {
- back1 =
- (SessionImpl)repositoryService.getRepository(repositoryNameToBackup).login(credentials,
- workspaceNameToBackup);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restoreRepository(bchLog.getBackupId(), false);
+
+ checkConent(repositoryService.getRepository(config.getRepository()),
+ repositoryService.getRepository(config.getRepository()).getConfiguration().getSystemWorkspaceName());
}
- public void testExistedRepositoryRestoreWithConfig() throws Exception
+ public void testRepositoryRestoreWithNullConfig() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
-
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
backup.stopBackup(bch);
- // check
- super.tearDown();
+ // restore
+ removeRepositoryFully(repository.getConfiguration().getName());
- // restore
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
- backup.restoreExistingRepository(bchLog.getBackupId(), false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- assertEquals(JobWorkspaceRestore.RESTORE_SUCCESSFUL, backup.getLastRepositoryRestore(repositoryNameToBackup)
- .getStateRestore());
-
- // check
- ManageableRepository restoredRepository = repositoryService.getRepository(repositoryNameToBackup);
-
- for (String wsName : restoredRepository.getWorkspaceNames())
- {
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)restoredRepository.login(credentials, wsName);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restore(bchLog, null, false);
+ checkConent(repositoryService.getRepository(config.getRepository()),
+ repositoryService.getRepository(config.getRepository()).getConfiguration().getSystemWorkspaceName());
}
-
- public void testWorkspaceRestoreWithConfig() throws Exception
+
+ public void testWorkspaceRestoreWithNullConfig() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+ addConent(repository, wsEntry.getName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
+ removeWorkspaceFully(repository.getConfiguration().getName(), wsEntry.getName());
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
- //TODO
- // super.tearDown();
- removeWorkspaceFullySingleDB(repositoryNameToBackup, workspaceNameToBackup);
-
+ // restore
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ BackupChainLog bchLog = new BackupChainLog(backLog);
- backup.restoreWorkspace(bchLog.getBackupId(), false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- // check
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)repositoryService.getRepository(repositoryNameToBackup).login(credentials, "ws1");
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
+ try
+ {
+ backup.restore(bchLog, repository.getConfiguration().getName() + "not_exists", null, false);
+ fail("Exception should be thrown");
}
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ catch (Exception e)
+ {
+ }
+
+ backup.restore(bchLog, repository.getConfiguration().getName(), null, false);
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
}
- public void testRepositoryRestoreWithConfig() throws Exception
+ public void testExistedWorkspaceRestoreWithConfigBackupSetDir() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+ addConent(repository, wsEntry.getName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
- RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
+ BackupConfig config = new BackupConfig();
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
-
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
backup.stopBackup(bch);
- //TODO
- super.tearDown();
- removeRepositoryFully(repositoryNameToBackup);
-
- // restore
+ // restore
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ BackupChainLog bchLog = new BackupChainLog(backLog);
- backup.restoreRepository(bchLog.getBackupId(), false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- assertEquals(JobWorkspaceRestore.RESTORE_SUCCESSFUL, backup.getLastRepositoryRestore(repositoryNameToBackup)
- .getStateRestore());
-
- // check
- ManageableRepository restoredRepository = repositoryService.getRepository(repositoryNameToBackup);
-
- for (String wsName : restoredRepository.getWorkspaceNames())
- {
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)restoredRepository.login(credentials, wsName);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restoreExistingWorkspace(bchLog.getBackupConfig().getBackupDir(), false);
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
}
-
- public void testRepositoryRestoreWithNullConfig() throws Exception
+
+ public void testExistedRepositoryRestoreWithConfigBackupSetDir() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
+
// backup
- File backDir = new File((File.createTempFile("12123", "123")).getParent() + File.separator + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
-
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
backup.stopBackup(bch);
- //TODO
- super.tearDown();
- removeRepositoryFully(repositoryNameToBackup);
-
- // restore
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
- backup.restore(bchLog, null, false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- assertEquals(JobWorkspaceRestore.RESTORE_SUCCESSFUL, backup.getLastRepositoryRestore(repositoryNameToBackup)
- .getStateRestore());
-
- // check
- ManageableRepository restoredRepository = repositoryService.getRepository(repositoryNameToBackup);
-
- for (String wsName : restoredRepository.getWorkspaceNames())
- {
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)restoredRepository.login(credentials, wsName);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restoreExistingRepository(bchLog.getBackupConfig().getBackupDir(), false);
+ checkConent(repositoryService.getRepository(config.getRepository()),
+ repositoryService.getRepository(config.getRepository()).getConfiguration().getSystemWorkspaceName());
}
- public void testWorkspaceRestoreWithNullConfig() throws Exception
+ public void testWorkspaceRestoreWithConfigBackupSetDir() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ WorkspaceEntry wsEntry = helper.createWorkspaceEntry(true, null);
+ helper.addWorkspace(repository, wsEntry);
+ addConent(repository, wsEntry.getName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry.getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
-
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
- //TODO
- removeWorkspaceFullySingleDB(repositoryNameToBackup, workspaceNameToBackup);
-
+ removeWorkspaceFully(repository.getConfiguration().getName(), wsEntry.getName());
+
+ // restore
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ BackupChainLog bchLog = new BackupChainLog(backLog);
- try
- {
- backup.restore(bchLog, repositoryNameToBackup + "not_exists", null, false);
- fail("Should be throw exception WorkspaceRestoreException");
- }
- catch (WorkspaceRestoreException e)
- {
- //ok
- }
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- backup.restore(bchLog, repositoryNameToBackup, null, false);
-
- // check
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)getReposityToBackup().login(credentials, workspaceNameToBackup);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restoreWorkspace(bchLog.getBackupConfig().getBackupDir(), false);
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
}
- public void testExistedWorkspaceRestoreWithConfigBackupSetDir() throws Exception
+ public void testRepositoryRestoreWithConfigBackupSetDir() throws Exception
{
+ // prepare
+ ManageableRepository repository = helper.createRepository(container, true, null);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
+
// backup
- File backDir = new File("target/backup/" + getUUIndex());
+ File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
- BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
+ RepositoryBackupConfig config = new RepositoryBackupConfig();
+ config.setRepository(repository.getConfiguration().getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
config.setBackupDir(backDir);
- backup.startBackup(config);
+ RepositoryBackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
+ // restore
+ removeRepositoryFully(repository.getConfiguration().getName());
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
- {
- Thread.yield();
- Thread.sleep(50);
- }
-
- // stop fullBackup
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
- super.tearDown();
-
File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
- {
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ assertTrue(backLog.exists());
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
- backup.restoreExistingWorkspace(bchLog.getBackupConfig().getBackupDir(), false);
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- // check
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)getReposityToBackup().login(credentials, workspaceNameToBackup);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ backup.restoreRepository(bchLog.getBackupConfig().getBackupDir(), false);
+ checkConent(repositoryService.getRepository(config.getRepository()),
+ repositoryService.getRepository(config.getRepository()).getConfiguration().getSystemWorkspaceName());
}
- public void testExistedRepositoryRestoreWithConfigBackupSetDir() throws Exception
+ public void waitEndOfBackup(BackupChain bch) throws Exception
{
- // backup
- File backDir = new File("target/backup/" + getUUIndex());
- backDir.mkdirs();
-
- RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
- config.setBackupDir(backDir);
-
- backup.startBackup(config);
-
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FINISHED)
+ while (bch.getFullBackupState() != BackupChain.FINISHED)
{
Thread.yield();
Thread.sleep(50);
}
+ }
- // stop fullBackup
- backup.stopBackup(bch);
-
- // check
- super.tearDown();
-
- // restore
- File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
+ public void waitEndOfBackup(RepositoryBackupChain bch) throws Exception
+ {
+ while (bch.getState() != RepositoryBackupChain.FINISHED
+ && bch.getState() != RepositoryBackupChain.FULL_BACKUP_FINISHED_INCREMENTAL_BACKUP_WORKING)
{
- RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
-
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
-
- backup.restoreExistingRepository(bchLog.getBackupConfig().getBackupDir(), false);
-
- assertEquals(JobWorkspaceRestore.RESTORE_SUCCESSFUL, backup.getLastRepositoryRestore(repositoryNameToBackup)
- .getStateRestore());
-
- // check
- ManageableRepository restoredRepository = repositoryService.getRepository(repositoryNameToBackup);
-
- for (String wsName : restoredRepository.getWorkspaceNames())
- {
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)restoredRepository.login(credentials, wsName);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
+ Thread.yield();
+ Thread.sleep(50);
}
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
}
- public void testWorkspaceRestoreWithConfigBackupSetDir() throws Exception
+
+ public void waitEndOfRestore(String repositoryName) throws Exception
{
- // backup
- File backDir = new File((File.createTempFile("12123", "123")).getParent() + File.separator + getUUIndex());
- backDir.mkdirs();
-
- BackupConfig config = new BackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setWorkspace(workspaceNameToBackup);
- config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
-
- config.setBackupDir(backDir);
-
- backup.startBackup(config);
-
- BackupChain bch = backup.findBackup(repositoryNameToBackup, workspaceNameToBackup);
-
- // wait till full backup will be stopped
- while (bch.getFullBackupState() != BackupJob.FINISHED)
+ while (backup.getLastRepositoryRestore(repositoryName).getStateRestore() != JobRepositoryRestore.REPOSITORY_RESTORE_SUCCESSFUL
+ && backup.getLastRepositoryRestore(repositoryName).getStateRestore() != JobRepositoryRestore.REPOSITORY_RESTORE_FAIL)
{
- Thread.yield();
Thread.sleep(50);
}
+ }
- // stop fullBackup
-
- if (bch != null)
- backup.stopBackup(bch);
- else
- fail("Can't get fullBackup chain");
-
- //TODO
- removeWorkspaceFullySingleDB(repositoryNameToBackup, workspaceNameToBackup);
-
- File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
+ public void waitEndOfRestore(String repositoryName, String workspaceName) throws Exception
+ {
+ while (backup.getLastRestore(repositoryName, workspaceName).getStateRestore() != JobWorkspaceRestore.RESTORE_SUCCESSFUL
+ && backup.getLastRestore(repositoryName, workspaceName).getStateRestore() != JobWorkspaceRestore.RESTORE_FAIL)
{
- BackupChainLog bchLog = new BackupChainLog(backLog);
-
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
-
- backup.restoreWorkspace(bchLog.getBackupConfig().getBackupDir(), false);
-
- // check
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)getReposityToBackup().login(credentials, "ws1");
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
+ Thread.sleep(50);
}
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
}
- public void testRepositoryRestoreWithConfigBackupSetDir() throws Exception
+ public void addIncrementalConent(ManageableRepository repository, String wsName) throws Exception
{
- // backup
- File backDir = new File((File.createTempFile("12123", "123")).getParent() + File.separator + getUUIndex());
- backDir.mkdirs();
+ SessionImpl session = (SessionImpl)repository.login(credentials, wsName);
+ Node rootNode = session.getRootNode().addNode("testIncremental");
- RepositoryBackupConfig config = new RepositoryBackupConfig();
- config.setRepository(repositoryNameToBackup);
- config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
+ // add some changes which will be logged in incremental log
+ rootNode.addNode("node1").setProperty("prop1", "value1");
+ rootNode.addNode("node2").setProperty("prop2", new FileInputStream(blob));
+ rootNode.addNode("node3").addMixin("mix:lockable");
+ session.save();
+ }
- config.setBackupDir(backDir);
+ public void addConent(ManageableRepository repository, String wsName) throws Exception
+ {
+ SessionImpl session = (SessionImpl)repository.login(credentials, wsName);
+ Node rootNode = session.getRootNode().addNode("test");
- backup.startBackup(config);
+ // add some changes which will be logged in incremental log
+ rootNode.addNode("node1").setProperty("prop1", "value1");
+ rootNode.addNode("node2").setProperty("prop2", new FileInputStream(blob));
+ rootNode.addNode("node3").addMixin("mix:lockable");
+ session.save();
+ }
- RepositoryBackupChain bch = backup.findRepositoryBackup(repositoryNameToBackup);
+ public void checkConent(ManageableRepository repository, String wsName) throws Exception
+ {
+ SessionImpl session = (SessionImpl)repository.login(credentials, wsName);
- // wait till full backup will be stopped
- while (bch.getState() != RepositoryBackupChain.FINISHED)
+ Node rootNode = session.getRootNode().getNode("test");
+ assertEquals(rootNode.getNode("node1").getProperty("prop1").getString(), "value1");
+
+ InputStream in = rootNode.getNode("node2").getProperty("prop2").getStream();
+ try
{
- Thread.yield();
- Thread.sleep(50);
+ compareStream(new FileInputStream(blob), in);
}
-
- // stop fullBackup
-
- backup.stopBackup(bch);
-
- //TODO
- super.tearDown();
- removeRepositoryFully(repositoryNameToBackup);
-
- // restore
- File backLog = new File(bch.getLogFilePath());
- if (backLog.exists())
+ finally
{
- RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
+ in.close();
+ }
+ }
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ public void checkIncrementalConent(ManageableRepository repository, String wsName) throws Exception
+ {
+ SessionImpl session = (SessionImpl)repository.login(credentials, wsName);
- backup.restoreRepository(bchLog.getBackupConfig().getBackupDir(), false);
+ Node rootNode = session.getRootNode().getNode("testIncremental");
+ assertEquals(rootNode.getNode("node1").getProperty("prop1").getString(), "value1");
- assertEquals(JobWorkspaceRestore.RESTORE_SUCCESSFUL, backup.getLastRepositoryRestore(repositoryNameToBackup)
- .getStateRestore());
-
- // check
- ManageableRepository restoredRepository = repositoryService.getRepository(repositoryNameToBackup);
-
- for (String wsName : restoredRepository.getWorkspaceNames())
- {
- SessionImpl back1 = null;
- try
- {
- back1 = (SessionImpl)restoredRepository.login(credentials, wsName);
- Node ws1backTestRoot = back1.getRootNode().getNode("backupTest");
- assertEquals("Restored content should be same", "property-5", ws1backTestRoot.getNode("node_5")
- .getProperty("exo:data").getString());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail(e.getMessage());
- }
- finally
- {
- if (back1 != null)
- back1.logout();
- }
- }
+ InputStream in = rootNode.getNode("node2").getProperty("prop2").getStream();
+ try
+ {
+ compareStream(new FileInputStream(blob), in);
}
- else
- fail("There are no backup files in " + backDir.getAbsolutePath());
+ finally
+ {
+ in.close();
+ }
}
}
Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestBackupManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestBackupManager.java 2011-03-22 09:17:49 UTC (rev 4158)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestBackupManager.java 2011-03-22 09:18:55 UTC (rev 4159)
@@ -35,22 +35,29 @@
extends AbstractBackupUseCasesTest
{
+ private BackupManagerImpl backup;
+
+ @Override
protected ExtendedBackupManager getBackupManager()
{
- InitParams initParams = new InitParams();
- PropertiesParam pps = new PropertiesParam();
- pps.setProperty(BackupManagerImpl.FULL_BACKUP_TYPE,
- "org.exoplatform.services.jcr.ext.backup.impl.fs.FullBackupJob");
- pps.setProperty(BackupManagerImpl.INCREMENTAL_BACKUP_TYPE,
- "org.exoplatform.services.jcr.ext.backup.impl.fs.IncrementalBackupJob");
- pps.setProperty(BackupManagerImpl.BACKUP_DIR, "target/backup_testBackupManager");
- pps.setProperty(BackupManagerImpl.DEFAULT_INCREMENTAL_JOB_PERIOD, "3600");
+ if (backup == null)
+ {
- initParams.put(BackupManagerImpl.BACKUP_PROPERTIES, pps);
+ InitParams initParams = new InitParams();
+ PropertiesParam pps = new PropertiesParam();
+ pps.setProperty(BackupManagerImpl.FULL_BACKUP_TYPE,
+ "org.exoplatform.services.jcr.ext.backup.impl.fs.FullBackupJob");
+ pps.setProperty(BackupManagerImpl.INCREMENTAL_BACKUP_TYPE,
+ "org.exoplatform.services.jcr.ext.backup.impl.fs.IncrementalBackupJob");
+ pps.setProperty(BackupManagerImpl.BACKUP_DIR, "target/backup_testBackupManager");
+ pps.setProperty(BackupManagerImpl.DEFAULT_INCREMENTAL_JOB_PERIOD, "3600");
- BackupManagerImpl backupManagerImpl = new BackupManagerImpl(initParams, repositoryService);
- backupManagerImpl.start();
+ initParams.put(BackupManagerImpl.BACKUP_PROPERTIES, pps);
- return backupManagerImpl;
+ backup = new BackupManagerImpl(initParams, repositoryService);
+ backup.start();
+ }
+
+ return backup;
}
}
Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestRDBMSBackupManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestRDBMSBackupManager.java 2011-03-22 09:17:49 UTC (rev 4158)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestRDBMSBackupManager.java 2011-03-22 09:18:55 UTC (rev 4159)
@@ -31,24 +31,29 @@
public class TestRDBMSBackupManager extends AbstractBackupUseCasesTest
{
+ private BackupManagerImpl backup;
+
@Override
protected ExtendedBackupManager getBackupManager()
{
- InitParams initParams = new InitParams();
- PropertiesParam pps = new PropertiesParam();
- pps.setProperty(BackupManagerImpl.FULL_BACKUP_TYPE,
- "org.exoplatform.services.jcr.ext.backup.impl.rdbms.FullBackupJob");
- pps.setProperty(BackupManagerImpl.INCREMENTAL_BACKUP_TYPE,
- "org.exoplatform.services.jcr.ext.backup.impl.fs.IncrementalBackupJob");
- pps.setProperty(BackupManagerImpl.BACKUP_DIR, "target/backup_testRDBMSBackupManager");
- pps.setProperty(BackupManagerImpl.DEFAULT_INCREMENTAL_JOB_PERIOD, "3600");
+ if (backup == null)
+ {
+ InitParams initParams = new InitParams();
+ PropertiesParam pps = new PropertiesParam();
+ pps.setProperty(BackupManagerImpl.FULL_BACKUP_TYPE,
+ "org.exoplatform.services.jcr.ext.backup.impl.rdbms.FullBackupJob");
+ pps.setProperty(BackupManagerImpl.INCREMENTAL_BACKUP_TYPE,
+ "org.exoplatform.services.jcr.ext.backup.impl.fs.IncrementalBackupJob");
+ pps.setProperty(BackupManagerImpl.BACKUP_DIR, "target/backup_testRDBMSBackupManager");
+ pps.setProperty(BackupManagerImpl.DEFAULT_INCREMENTAL_JOB_PERIOD, "3600");
- initParams.put(BackupManagerImpl.BACKUP_PROPERTIES, pps);
+ initParams.put(BackupManagerImpl.BACKUP_PROPERTIES, pps);
- BackupManagerImpl backupManagerImpl = new BackupManagerImpl(initParams, repositoryService);
- backupManagerImpl.start();
+ backup = new BackupManagerImpl(initParams, repositoryService);
+ backup.start();
+ }
- return backupManagerImpl;
+ return backup;
}
}
Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestRdbmsWorkspaceInitializer.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestRdbmsWorkspaceInitializer.java 2011-03-22 09:17:49 UTC (rev 4158)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestRdbmsWorkspaceInitializer.java 2011-03-22 09:18:55 UTC (rev 4159)
@@ -28,7 +28,6 @@
import org.exoplatform.services.jcr.impl.core.query.SystemSearchManager;
import org.exoplatform.services.jcr.impl.core.value.ValueFactoryImpl;
import org.exoplatform.services.jcr.impl.util.io.FileCleanerHolder;
-import org.exoplatform.services.jcr.util.IdGenerator;
import org.exoplatform.services.jcr.util.TesterConfigurationHelper;
import java.io.File;
@@ -43,7 +42,7 @@
*/
public class TestRdbmsWorkspaceInitializer extends BaseRDBMSBackupTest
{
- TesterConfigurationHelper helper = TesterConfigurationHelper.getInstence();
+ TesterConfigurationHelper helper = TesterConfigurationHelper.getInstance();
public void testRDBMSInitializerRestoreTablesMultiDB() throws Exception
{
@@ -65,55 +64,43 @@
{
if (workspaceEntry.getName().equals("ws1"))
{
- String newValueStoragePath = "target/temp/values/" + IdGenerator.generate();
- String newIndexPath = "target/temp/index/" + IdGenerator.generate();
-
- String dsName = helper.getNewDataSource("");
-
- // set the initializer
+ String dsName = helper.createDatasource();
WorkspaceEntry newEntry =
- helper.getNewWs("ws" + System.currentTimeMillis(), true, dsName, newValueStoragePath, newIndexPath,
- workspaceEntry.getContainer(), workspaceEntry.getContainer().getValueStorages());
+ helper.createWorkspaceEntry(true, dsName,
+ helper.getValueStorageIds(workspaceEntry.getContainer().getValueStorages()));
- WorkspaceInitializerEntry wiEntry = new WorkspaceInitializerEntry();
- wiEntry.setType(RdbmsWorkspaceInitializer.class.getCanonicalName());
-
List<SimpleParameterEntry> wieParams = new ArrayList<SimpleParameterEntry>();
wieParams.add(new SimpleParameterEntry(SysViewWorkspaceInitializer.RESTORE_PATH_PARAMETER, new File(url
.getFile()).getParent()));
+ WorkspaceInitializerEntry wiEntry = new WorkspaceInitializerEntry();
+ wiEntry.setType(RdbmsWorkspaceInitializer.class.getCanonicalName());
wiEntry.setParameters(wieParams);
-
newEntry.setInitializer(wiEntry);
- repositoryService.getRepository("db1").configWorkspace(newEntry);
- repositoryService.getRepository("db1").createWorkspace(newEntry.getName());
+ // restore
+ helper.addWorkspace(repositoryService.getRepository("db1"), newEntry);
- dsName = helper.getNewDataSource("");
-
- newValueStoragePath = "target/temp/values/" + IdGenerator.generate();
- newIndexPath = "target/temp/index/" + IdGenerator.generate();
-
- // set the initializer
+ dsName = helper.createDatasource();
newEntry =
- helper.getNewWs("ws" + System.currentTimeMillis(), true, dsName, newValueStoragePath, newIndexPath,
- workspaceEntry.getContainer(),
- workspaceEntry.getContainer().getValueStorages());
+ helper.createWorkspaceEntry(true, dsName,
+ helper.getValueStorageIds(workspaceEntry.getContainer().getValueStorages()));
- wiEntry = new WorkspaceInitializerEntry();
- wiEntry.setType(RdbmsWorkspaceInitializer.class.getCanonicalName());
-
wieParams = new ArrayList<SimpleParameterEntry>();
wieParams.add(new SimpleParameterEntry(SysViewWorkspaceInitializer.RESTORE_PATH_PARAMETER, new File(url
.getFile()).getParent()));
+ wiEntry = new WorkspaceInitializerEntry();
+ wiEntry.setType(RdbmsWorkspaceInitializer.class.getCanonicalName());
wiEntry.setParameters(wieParams);
-
newEntry.setInitializer(wiEntry);
- repositoryService.getRepository("db1").configWorkspace(newEntry);
- repositoryService.getRepository("db1").createWorkspace(newEntry.getName());
+ // restore
+ helper.addWorkspace(repositoryService.getRepository("db1"), newEntry);
+ String newIndexPath = newEntry.getQueryHandler().getParameterValue("index-dir");
+ String newValueStoragePath = newEntry.getContainer().getValueStorages().get(0).getParameterValue("path");
+
assertFalse(new File(newValueStoragePath).exists());
assertTrue(new File(newIndexPath).list().length > 0);
assertFalse(new File(newIndexPath + "_" + SystemSearchManager.INDEX_DIR_SUFFIX).exists());
@@ -143,25 +130,18 @@
{
if (workspaceEntry.getName().equals("ws1"))
{
- String newValueStoragePath = "target/temp/values/" + IdGenerator.generate();
- String newIndexPath = "target/temp/index/" + IdGenerator.generate();
-
- String dsName = helper.getNewDataSource("");
-
- // set the initializer
+ String dsName = helper.createDatasource();
WorkspaceEntry newEntry =
- helper.getNewWs("ws" + System.currentTimeMillis(), true, dsName, newValueStoragePath, newIndexPath,
- workspaceEntry.getContainer(), workspaceEntry.getContainer().getValueStorages());
+ helper.createWorkspaceEntry(true, dsName,
+ helper.getValueStorageIds(workspaceEntry.getContainer().getValueStorages()));
- WorkspaceInitializerEntry wiEntry = new WorkspaceInitializerEntry();
- wiEntry.setType(RdbmsWorkspaceInitializer.class.getCanonicalName());
-
List<SimpleParameterEntry> wieParams = new ArrayList<SimpleParameterEntry>();
wieParams.add(new SimpleParameterEntry(SysViewWorkspaceInitializer.RESTORE_PATH_PARAMETER, new File(url
.getFile()).getParent()));
+ WorkspaceInitializerEntry wiEntry = new WorkspaceInitializerEntry();
+ wiEntry.setType(RdbmsWorkspaceInitializer.class.getCanonicalName());
wiEntry.setParameters(wieParams);
-
newEntry.setInitializer(wiEntry);
TesterRdbmsWorkspaceInitializer initializer =
@@ -169,33 +149,27 @@
cacheableDataManager, null, null, null, (ValueFactoryImpl)valueFactory, null, repositoryService, new FileCleanerHolder());
// restore single -> multi
- repositoryService.getRepository("db1").configWorkspace(newEntry);
- repositoryService.getRepository("db1").createWorkspace(newEntry.getName());
+ helper.addWorkspace(repositoryService.getRepository("db1"), newEntry);
- dsName = helper.getNewDataSource("");
-
- newValueStoragePath = "target/temp/values/" + IdGenerator.generate();
- newIndexPath = "target/temp/index/" + IdGenerator.generate();
-
- // set the initializer
+ dsName = helper.createDatasource();
newEntry =
- helper.getNewWs("ws" + System.currentTimeMillis(), true, dsName, newValueStoragePath, newIndexPath,
- workspaceEntry.getContainer(), workspaceEntry.getContainer().getValueStorages());
+ helper.createWorkspaceEntry(true, dsName,
+ helper.getValueStorageIds(workspaceEntry.getContainer().getValueStorages()));
- wiEntry = new WorkspaceInitializerEntry();
- wiEntry.setType(RdbmsWorkspaceInitializer.class.getCanonicalName());
-
wieParams = new ArrayList<SimpleParameterEntry>();
wieParams.add(new SimpleParameterEntry(SysViewWorkspaceInitializer.RESTORE_PATH_PARAMETER, new File(url
.getFile()).getParent()));
+ wiEntry = new WorkspaceInitializerEntry();
+ wiEntry.setType(RdbmsWorkspaceInitializer.class.getCanonicalName());
wiEntry.setParameters(wieParams);
-
newEntry.setInitializer(wiEntry);
- repositoryService.getRepository("db1").configWorkspace(newEntry);
- repositoryService.getRepository("db1").createWorkspace(newEntry.getName());
+ helper.addWorkspace(repositoryService.getRepository("db1"), newEntry);
+ String newIndexPath = newEntry.getQueryHandler().getParameterValue("index-dir");
+ String newValueStoragePath = newEntry.getContainer().getValueStorages().get(0).getParameterValue("path");
+
assertFalse(new File(newValueStoragePath).exists());
assertTrue(new File(newIndexPath).list().length > 0);
assertFalse(new File(newIndexPath + "_" + SystemSearchManager.INDEX_DIR_SUFFIX).exists());
Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java 2011-03-22 09:17:49 UTC (rev 4158)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java 2011-03-22 09:18:55 UTC (rev 4159)
@@ -23,23 +23,17 @@
import org.exoplatform.services.jcr.RepositoryService;
import org.exoplatform.services.jcr.config.CacheEntry;
import org.exoplatform.services.jcr.config.ContainerEntry;
-import org.exoplatform.services.jcr.config.LockManagerEntry;
-import org.exoplatform.services.jcr.config.LockPersisterEntry;
import org.exoplatform.services.jcr.config.QueryHandlerEntry;
import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
+import org.exoplatform.services.jcr.config.RepositoryEntry;
import org.exoplatform.services.jcr.config.SimpleParameterEntry;
import org.exoplatform.services.jcr.config.ValueStorageEntry;
import org.exoplatform.services.jcr.config.ValueStorageFilterEntry;
import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.impl.core.RepositoryImpl;
-import org.exoplatform.services.jcr.impl.storage.jdbc.DialectDetecter;
-import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer;
+import org.exoplatform.services.jcr.core.ManageableRepository;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
@@ -59,96 +53,116 @@
{
private static Log log = ExoLogger.getLogger("exo.jcr.component.core.ConfigurationHelper");
- private static TesterConfigurationHelper instence;
+ private static TesterConfigurationHelper instance;
private TesterConfigurationHelper()
{
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.exoplatform.services.naming.SimpleContextFactory");
}
- public void createWorkspace(WorkspaceEntry workspaceEntry, ExoContainer container)
+ /**
+ * Add new workspace to repository.
+ */
+ public void addWorkspace(ManageableRepository repository, WorkspaceEntry workspaceEntry)
throws RepositoryConfigurationException, RepositoryException
{
- RepositoryService service = (RepositoryService)container.getComponentInstanceOfType(RepositoryService.class);
- RepositoryImpl defRep;
-
- defRep = (RepositoryImpl)service.getDefaultRepository();
- defRep.configWorkspace(workspaceEntry);
- defRep.createWorkspace(workspaceEntry.getName());
-
+ repository.configWorkspace(workspaceEntry);
+ repository.createWorkspace(workspaceEntry.getName());
}
- public String getNewDataSource(String type) throws Exception
+ /**
+ * Create new datasource.
+ *
+ * @return datasource name
+ */
+ public String createDatasource() throws Exception
{
+ String dsName = IdGenerator.generate();
- String newDS = IdGenerator.generate();
Properties properties = new Properties();
-
properties.setProperty("driverClassName", "org.hsqldb.jdbcDriver");
- String newurl = "jdbc:hsqldb:file:target/temp/data/" + newDS;
-
- log.info("New url " + newurl);
-
- properties.setProperty("url", newurl);
+ properties.setProperty("url", "jdbc:hsqldb:file:target/temp/data/" + dsName);
properties.setProperty("username", "sa");
properties.setProperty("password", "");
- DataSource bds = BasicDataSourceFactory.createDataSource(properties);
- if (!newurl.contains("hsqldb"))
- {
- createDatabase(bds, newDS);
- }
- new InitialContext().bind(newDS, bds);
- return newDS;
+ DataSource ds = BasicDataSourceFactory.createDataSource(properties);
+ new InitialContext().bind(dsName, ds);
+
+ return dsName;
+
}
- public WorkspaceEntry getNewWs(String wsName, boolean isMultiDb, String dsName, String vsPath, String indexDir,
- ContainerEntry entry, List<ValueStorageEntry> valueStorage) throws Exception
+ public ManageableRepository createRepository(ExoContainer container, boolean isMultiDb, String dsName)
+ throws Exception
{
+ RepositoryService service = (RepositoryService)container.getComponentInstanceOfType(RepositoryService.class);
+ RepositoryEntry repoEntry = createRepositoryEntry(isMultiDb, null, dsName);
+ service.createRepository(repoEntry);
- String dbDialect = null;
- if (dsName != null)
- {
- DataSource ds = (DataSource)new InitialContext().lookup(dsName);
- if (ds != null)
- {
- Connection jdbcConn = null;
+ return service.getRepository(repoEntry.getName());
+ }
- jdbcConn = ds.getConnection();
- dbDialect = DialectDetecter.detect(jdbcConn.getMetaData());
+ /**
+ * Create workspace entry.
+ */
+ public RepositoryEntry createRepositoryEntry(boolean isMultiDb, String systemWSName, String dsName) throws Exception
+ {
+ // create system workspace entry
+ List<String> ids = new ArrayList<String>();
+ ids.add("id");
+ WorkspaceEntry wsEntry = createWorkspaceEntry(isMultiDb, dsName, ids);
- }
+ if (systemWSName != null)
+ {
+ wsEntry.setName(systemWSName);
}
+ RepositoryEntry repository = new RepositoryEntry();
+ repository.setSystemWorkspaceName(wsEntry.getName());
+ repository.setDefaultWorkspaceName(wsEntry.getName());
+ repository.setName("repo-" + IdGenerator.generate());
+ repository.setSessionTimeOut(3600000);
+ repository.setAuthenticationPolicy("org.exoplatform.services.jcr.impl.core.access.JAASAuthenticator");
+ repository.setSecurityDomain("exo-domain");
+ repository.addWorkspace(wsEntry);
+
+ return repository;
+ }
+
+ /**
+ * Create workspace entry.
+ */
+ public WorkspaceEntry createWorkspaceEntry(boolean isMultiDb, String dsName) throws Exception
+ {
+ List<String> ids = new ArrayList<String>();
+ ids.add("id");
+
+ return createWorkspaceEntry(isMultiDb, dsName, ids);
+ }
+
+ /**
+ * Create workspace entry.
+ */
+ public WorkspaceEntry createWorkspaceEntry(boolean isMultiDb, String dsName, List<String> valueStorageIds)
+ throws Exception
+ {
if (dsName == null)
{
- dsName = getNewDataSource("");
+ dsName = createDatasource();
}
- List params = new ArrayList();
+ String id = IdGenerator.generate();
+ String wsName = "ws-" + id;
+ // container entry
+ List params = new ArrayList();
params.add(new SimpleParameterEntry("source-name", dsName));
- params.add(new SimpleParameterEntry("db-type", "generic"));
params.add(new SimpleParameterEntry("multi-db", isMultiDb ? "true" : "false"));
- params.add(new SimpleParameterEntry("update-storage", "true"));
params.add(new SimpleParameterEntry("max-buffer-size", "204800"));
+ params.add(new SimpleParameterEntry("dialect", "auto"));
+ params.add(new SimpleParameterEntry("swap-directory", "target/temp/swap/" + wsName));
- if (dbDialect != null)
- {
- params.add(new SimpleParameterEntry(JDBCWorkspaceDataContainer.DB_DIALECT, dbDialect));
- }
- else if (entry.getParameterValue(JDBCWorkspaceDataContainer.DB_DIALECT) != null)
- {
- params.add(new SimpleParameterEntry(JDBCWorkspaceDataContainer.DB_DIALECT, entry
- .getParameterValue(JDBCWorkspaceDataContainer.DB_DIALECT)));
- }
-
- String oldSwap = entry.getParameterValue("swap-directory");
- String newSwap = oldSwap.substring(0, oldSwap.lastIndexOf('/')) + '/' + wsName;
-
- params.add(new SimpleParameterEntry("swap-directory", newSwap));
-
ContainerEntry containerEntry =
new ContainerEntry("org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer",
(ArrayList)params);
@@ -156,9 +170,9 @@
// value storage
ArrayList list = new ArrayList();
- if (valueStorage != null)
+ if (valueStorageIds != null)
{
- for (ValueStorageEntry oldValueStorageEntry : valueStorage)
+ for (String vsId : valueStorageIds)
{
ArrayList<ValueStorageFilterEntry> vsparams = new ArrayList<ValueStorageFilterEntry>();
ValueStorageFilterEntry filterEntry = new ValueStorageFilterEntry();
@@ -169,14 +183,13 @@
new ValueStorageEntry("org.exoplatform.services.jcr.impl.storage.value.fs.SimpleFileValueStorage",
vsparams);
ArrayList<SimpleParameterEntry> spe = new ArrayList<SimpleParameterEntry>();
- spe.add(new SimpleParameterEntry("path", vsPath));
- valueStorageEntry.setId(oldValueStorageEntry.getId());
+ spe.add(new SimpleParameterEntry("path", "target/temp/values/" + wsName + "-" + vsId));
+ valueStorageEntry.setId(vsId);
valueStorageEntry.setParameters(spe);
valueStorageEntry.setFilters(vsparams);
// containerEntry.setValueStorages();
containerEntry.setParameters(params);
-
list.add(valueStorageEntry);
}
}
@@ -184,164 +197,49 @@
containerEntry.setValueStorages(list);
// Indexer
- ArrayList qParams = new ArrayList();
- qParams.add(new SimpleParameterEntry("index-dir", indexDir));
+ params = new ArrayList();
+ params.add(new SimpleParameterEntry("index-dir", "target/temp/index/" + wsName));
QueryHandlerEntry qEntry =
- new QueryHandlerEntry("org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex", qParams);
-
- WorkspaceEntry workspaceEntry =
- new WorkspaceEntry(wsName != null ? wsName : IdGenerator.generate(), "nt:unstructured");
- workspaceEntry.setContainer(containerEntry);
-
+ 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.setType("org.exoplatform.services.jcr.impl.dataflow.persistent.LinkedWorkspaceStorageCacheImpl");
+ WorkspaceEntry workspaceEntry = new WorkspaceEntry();
+ workspaceEntry.setContainer(containerEntry);
workspaceEntry.setCache(cacheEntry);
-
workspaceEntry.setQueryHandler(qEntry);
+ workspaceEntry.setName(wsName);
+ workspaceEntry.setUniqueName(wsName);
- LockManagerEntry lockManagerEntry = new LockManagerEntry();
- lockManagerEntry.setTimeout(900000);
- LockPersisterEntry persisterEntry = new LockPersisterEntry();
- persisterEntry.setType("org.exoplatform.services.jcr.impl.core.lock.FileSystemLockPersister");
- ArrayList lpParams = new ArrayList();
- lpParams.add(new SimpleParameterEntry("path", "../temp/lock"));
- persisterEntry.setParameters(lpParams);
- lockManagerEntry.setPersister(persisterEntry);
- workspaceEntry.setLockManager(lockManagerEntry);
-
- // workspaceEntry
return workspaceEntry;
}
- // public WorkspaceEntry getNewWsOnDataSource(String wsName, boolean isMultiDb, String dsName, String vsPath,
- // ContainerEntry entry) throws Exception
- // {
- //
- // String dbDialect = null;
- // if (dsName != null)
- // {
- // DataSource ds = (DataSource)new InitialContext().lookup(dsName);
- // if (ds != null)
- // {
- // Connection jdbcConn = null;
- //
- // jdbcConn = ds.getConnection();
- // dbDialect = DialectDetecter.detect(jdbcConn.getMetaData());
- // }
- // }
- //
- // List params = new ArrayList();
- //
- // if (isMultiDb && dsName == null)
- // {
- // dsName = getNewDataSource("");
- // }
- //
- // params.add(new SimpleParameterEntry("sourceName", dsName));
- // params.add(new SimpleParameterEntry("db-type", "generic"));
- // params.add(new SimpleParameterEntry("multi-db", isMultiDb ? "true" : "false"));
- // params.add(new SimpleParameterEntry("update-storage", "true"));
- // params.add(new SimpleParameterEntry("max-buffer-size", "204800"));
- //
- // if (dbDialect != null)
- // {
- // params.add(new SimpleParameterEntry(JDBCWorkspaceDataContainer.DB_DIALECT, dbDialect));
- // }
- // else if (entry.getParameterValue(JDBCWorkspaceDataContainer.DB_DIALECT) != null)
- // {
- // params.add(new SimpleParameterEntry(JDBCWorkspaceDataContainer.DB_DIALECT, entry
- // .getParameterValue(JDBCWorkspaceDataContainer.DB_DIALECT)));
- // }
- //
- // String oldSwap = entry.getParameterValue("swap-directory");
- // String newSwap = oldSwap.substring(0, oldSwap.lastIndexOf('/')) + '/' + wsName;
- //
- // params.add(new SimpleParameterEntry("swap-directory", newSwap));
- //
- // ContainerEntry containerEntry =
- // new ContainerEntry("org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer",
- // (ArrayList)params);
- // containerEntry.setParameters(params);
- //
- // if (vsPath != null)
- // {
- //
- // ArrayList<ValueStorageFilterEntry> vsparams = new ArrayList<ValueStorageFilterEntry>();
- // ValueStorageFilterEntry filterEntry = new ValueStorageFilterEntry();
- // filterEntry.setPropertyType("Binary");
- // vsparams.add(filterEntry);
- //
- // ValueStorageEntry valueStorageEntry =
- // new ValueStorageEntry("org.exoplatform.services.jcr.impl.storage.value.fs.SimpleFileValueStorage", vsparams);
- // ArrayList<SimpleParameterEntry> spe = new ArrayList<SimpleParameterEntry>();
- // spe.add(new SimpleParameterEntry("path", vsPath));
- // valueStorageEntry.setId(IdGenerator.generate());
- // valueStorageEntry.setParameters(spe);
- // valueStorageEntry.setFilters(vsparams);
- //
- // // containerEntry.setValueStorages();
- // containerEntry.setParameters(params);
- // ArrayList list = new ArrayList(1);
- // list.add(valueStorageEntry);
- //
- // containerEntry.setValueStorages(list);
- //
- // }
- //
- // // Indexer
- // ArrayList qParams = new ArrayList();
- // qParams.add(new SimpleParameterEntry("indexDir", "../temp/index/" + IdGenerator.generate()));
- // QueryHandlerEntry qEntry =
- // new QueryHandlerEntry("org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex", qParams);
- //
- // WorkspaceEntry workspaceEntry =
- // new WorkspaceEntry(wsName != null ? wsName : IdGenerator.generate(), "nt:unstructured");
- // workspaceEntry.setContainer(containerEntry);
- //
- // ArrayList cacheParams = new ArrayList();
- //
- // cacheParams.add(new SimpleParameterEntry("maxSize", "2000"));
- // cacheParams.add(new SimpleParameterEntry("liveTime", "20m"));
- // CacheEntry cacheEntry = new CacheEntry(cacheParams);
- // cacheEntry.setType("org.exoplatform.services.jcr.impl.dataflow.persistent.LinkedWorkspaceStorageCacheImpl");
- //
- // workspaceEntry.setCache(cacheEntry);
- //
- // workspaceEntry.setQueryHandler(qEntry);
- //
- // LockManagerEntry lockManagerEntry = new LockManagerEntry();
- // lockManagerEntry.setTimeout(900000);
- // LockPersisterEntry persisterEntry = new LockPersisterEntry();
- // persisterEntry.setType("org.exoplatform.services.jcr.impl.core.lock.FileSystemLockPersister");
- // ArrayList lpParams = new ArrayList();
- // lpParams.add(new SimpleParameterEntry("path", "../temp/lock"));
- // persisterEntry.setParameters(lpParams);
- // lockManagerEntry.setPersister(persisterEntry);
- // workspaceEntry.setLockManager(lockManagerEntry);
- //
- // // workspaceEntry
- // return workspaceEntry;
- // }
-
- private void createDatabase(DataSource ds, String dbName) throws SQLException
+ public List<String> getValueStorageIds(ArrayList<ValueStorageEntry> entries)
{
- Connection connection = ds.getConnection();
- PreparedStatement st = connection.prepareStatement("create database " + dbName);
- st.executeQuery();
+ List<String> ids = new ArrayList<String>();
+ if (entries != null)
+ {
+ for (ValueStorageEntry entry : entries)
+ {
+ ids.add(entry.getId());
+ }
+ }
+
+ return ids;
}
- public static TesterConfigurationHelper getInstence()
+ public static TesterConfigurationHelper getInstance()
{
- if (instence == null)
+ if (instance == null)
{
- instence = new TesterConfigurationHelper();
+ instance = new TesterConfigurationHelper();
}
- return instence;
+ return instance;
}
}
15 years, 1 month
exo-jcr SVN: r4158 - in jcr/trunk/exo.jcr.component.core/src: main/java/org/exoplatform/services/jcr/impl/config and 1 other directories.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-03-22 05:17:49 -0400 (Tue, 22 Mar 2011)
New Revision: 4158
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DirectoryRestor.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/config/JDBCConfigurationPersister.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java
Log:
EXOJCR-1081: * JDBCConfigurationPersister can write 1M data for HSQLDB
* Throw Exception if DirectoryResotre failed
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DirectoryRestor.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DirectoryRestor.java 2011-03-22 09:08:59 UTC (rev 4157)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DirectoryRestor.java 2011-03-22 09:17:49 UTC (rev 4158)
@@ -181,7 +181,7 @@
}
catch (IOException e)
{
- LOG.error("Can't remove temporary directory " + PrivilegedFileHelper.getAbsolutePath(tmpDir), e);
+ throw new BackupException(e);
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/config/JDBCConfigurationPersister.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/config/JDBCConfigurationPersister.java 2011-03-22 09:08:59 UTC (rev 4157)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/config/JDBCConfigurationPersister.java 2011-03-22 09:17:49 UTC (rev 4158)
@@ -162,7 +162,7 @@
if (DBConstants.DB_DIALECT_GENERIC.equalsIgnoreCase(dialect)
|| DBConstants.DB_DIALECT_HSQLDB.equalsIgnoreCase(dialect))
{
- binType = "VARBINARY(102400)"; // 100Kb
+ binType = "VARBINARY(1000000)"; // 1Mb
}
else if (DBConstants.DB_DIALECT_PGSQL.equalsIgnoreCase(dialect))
{
Modified: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java 2011-03-22 09:08:59 UTC (rev 4157)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java 2011-03-22 09:17:49 UTC (rev 4158)
@@ -59,7 +59,7 @@
{
private static Log log = ExoLogger.getLogger("exo.jcr.component.core.ConfigurationHelper");
- private static TesterConfigurationHelper instence;
+ private static TesterConfigurationHelper instance;
private TesterConfigurationHelper()
{
@@ -339,11 +339,11 @@
public static TesterConfigurationHelper getInstence()
{
- if (instence == null)
+ if (instance == null)
{
- instence = new TesterConfigurationHelper();
+ instance = new TesterConfigurationHelper();
}
- return instence;
+ return instance;
}
}
15 years, 1 month