Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Taal2012-11-24 13:36:11 +0000
committerMartin Taal2012-11-24 13:36:11 +0000
commitb90d0af5da43dfd67bd50393c4064a1313459c83 (patch)
tree0d94cfb6dd2b5aa580dacb75509af7ff8835a350 /plugins/org.eclipse.emf.cdo.tests.hibernate
parent1c86acebf8d4a65cc0da2cff41f6467dd22b7a7f (diff)
downloadcdo-b90d0af5da43dfd67bd50393c4064a1313459c83.tar.gz
cdo-b90d0af5da43dfd67bd50393c4064a1313459c83.tar.xz
cdo-b90d0af5da43dfd67bd50393c4064a1313459c83.zip
Combine hibernate and CDO versioning, use optimistic locking in hibernate
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests.hibernate')
-rw-r--r--plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java20
-rw-r--r--plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/CDOObjectHistoryTest.java351
2 files changed, 369 insertions, 2 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java b/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java
index 27e7683562..8f7d4f46c2 100644
--- a/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java
+++ b/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java
@@ -36,6 +36,7 @@ import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_279982_Test;
import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_303466_Test;
import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_306998_Test;
import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_322804_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_329254_Test;
import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_334995_Test;
import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_347964_Test;
import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_351393_Test;
@@ -75,8 +76,8 @@ public class AllTestsHibernate extends AllConfigs
@Override
protected void initTestClasses(List<Class<? extends ConfigTest>> testClasses, IScenario scenario)
{
- testClasses.clear();
- // testClasses.add(Bugzilla_306998_Test.class);
+ // testClasses.clear();
+ // testClasses.add(RevisionDeltaTest.class);
// if (true)
// {
// return;
@@ -109,6 +110,8 @@ public class AllTestsHibernate extends AllConfigs
if (scenario.getCapabilities().contains(IRepositoryConfig.CAPABILITY_AUDITING))
{
+ testClasses.add(CDOObjectHistoryTest.class);
+
// the security model inherits from the ecore model
// not so well supported for now
testClasses.remove(SecurityManagerTest.class);
@@ -122,6 +125,8 @@ public class AllTestsHibernate extends AllConfigs
}
else
{
+ testClasses.remove(Bugzilla_329254_Test.class);
+ testClasses.remove(Hibernate_Bugzilla_329254_Test.class);
testClasses.remove(CommitInfoTest.class);
}
@@ -306,4 +311,15 @@ public class AllTestsHibernate extends AllConfigs
}
}
+
+ public static class Hibernate_Bugzilla_329254_Test extends Bugzilla_329254_Test
+ {
+
+ // does not work for non audited cases
+ @Override
+ public void testCommitTimeStampUpdateOnError() throws Exception
+ {
+ }
+
+ }
}
diff --git a/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/CDOObjectHistoryTest.java b/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/CDOObjectHistoryTest.java
new file mode 100644
index 0000000000..0071f8fc8d
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/CDOObjectHistoryTest.java
@@ -0,0 +1,351 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.CDOObjectHistory;
+import org.eclipse.emf.cdo.common.commit.CDOCommitHistory;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
+import org.eclipse.emf.cdo.common.revision.CDOIDAndVersion;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionKey;
+import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
+import org.eclipse.emf.cdo.tests.legacy.model1.Model1Package;
+import org.eclipse.emf.cdo.tests.model1.Company;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.view.CDOView;
+
+import org.eclipse.net4j.util.concurrent.ConcurrencyUtil;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+
+import java.util.List;
+
+/**
+ * @author Martin Taal
+ * @author Eike Stepper
+ */
+@Requires(IRepositoryConfig.CAPABILITY_AUDITING)
+public class CDOObjectHistoryTest extends AbstractCDOTest
+{
+ protected CDOSession session1;
+
+ private boolean finishedLoadingHistory = false;
+
+ @Override
+ protected void doTearDown() throws Exception
+ {
+ LifecycleUtil.deactivate(session1);
+ session1 = null;
+ super.doTearDown();
+ }
+
+ protected CDOSession openSession1()
+ {
+ session1 = openSession();
+ return session1;
+ }
+
+ protected void closeSession1()
+ {
+ session1.close();
+ }
+
+ protected CDOSession openSession2()
+ {
+ return openSession();
+ }
+
+ public void testChangedAudit() throws Exception
+ {
+ CDOSession session = openSession1();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/res1"));
+
+ Company company = getModel1Factory().createCompany();
+ company.setName("ESC");
+ resource.getContents().add(company);
+ long commitTime1 = transaction.commit().getTimeStamp();
+ assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime1);
+ assertEquals("ESC", company.getName());
+
+ company.setName("Sympedia");
+ long commitTime2 = transaction.commit().getTimeStamp();
+ assertEquals(true, commitTime1 < commitTime2);
+ assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2);
+ assertEquals("Sympedia", company.getName());
+
+ company.setName("Eclipse");
+ long commitTime3 = transaction.commit().getTimeStamp();
+ assertEquals(true, commitTime2 < commitTime3);
+ assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2);
+ assertEquals("Eclipse", company.getName());
+
+ resource.getContents().remove(company);
+ long commitTime4 = transaction.commit().getTimeStamp();
+
+ closeSession1();
+ session = openSession2();
+
+ CDOView audit = session.openView(commitTime1);
+ {
+ CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
+ Company auditCompany = (Company)auditResource.getContents().get(0);
+ assertEquals("ESC", auditCompany.getName());
+
+ final CDOObjectHistory cdoObjectHistory = getCDOObjectHistory(audit, auditCompany);
+ assertEquals(1, cdoObjectHistory.getElements().length);
+ for (CDOCommitInfo cdoCommitInfo : cdoObjectHistory.getElements())
+ {
+ if (cdoCommitInfo.getTimeStamp() == commitTime1)
+ {
+ checkCommitInfo1(cdoCommitInfo);
+ }
+ else
+ {
+ fail();
+ }
+ }
+ audit.close();
+ }
+
+ audit = session.openView(commitTime2);
+ {
+ CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
+ Company auditCompany = (Company)auditResource.getContents().get(0);
+ assertEquals("Sympedia", auditCompany.getName());
+
+ final CDOObjectHistory cdoObjectHistory = getCDOObjectHistory(audit, auditCompany);
+ assertEquals(2, cdoObjectHistory.getElements().length);
+ for (CDOCommitInfo cdoCommitInfo : cdoObjectHistory.getElements())
+ {
+ if (cdoCommitInfo.getTimeStamp() == commitTime1)
+ {
+ checkCommitInfo1(cdoCommitInfo);
+ }
+ else if (cdoCommitInfo.getTimeStamp() == commitTime2)
+ {
+ checkCommitInfo2(cdoCommitInfo);
+ }
+ else
+ {
+ fail();
+ }
+ }
+ audit.close();
+ }
+
+ audit = session.openView(commitTime3);
+ {
+ CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
+ Company auditCompany = (Company)auditResource.getContents().get(0);
+ assertEquals("Eclipse", auditCompany.getName());
+
+ final CDOObjectHistory cdoObjectHistory = getCDOObjectHistory(audit, auditCompany);
+ assertEquals(3, cdoObjectHistory.getElements().length);
+ for (CDOCommitInfo cdoCommitInfo : cdoObjectHistory.getElements())
+ {
+ if (cdoCommitInfo.getTimeStamp() == commitTime1)
+ {
+ checkCommitInfo1(cdoCommitInfo);
+ }
+ else if (cdoCommitInfo.getTimeStamp() == commitTime2)
+ {
+ checkCommitInfo2(cdoCommitInfo);
+ }
+ else if (cdoCommitInfo.getTimeStamp() == commitTime3)
+ {
+ checkCommitInfo3(cdoCommitInfo);
+ }
+ else
+ {
+ fail();
+ }
+ }
+ audit.close();
+ }
+
+ audit = session.openView(commitTime4);
+ {
+ final CDOCommitHistory cdoCommitHistory = getCDOCommitHistory(audit);
+ assertEquals(5, cdoCommitHistory.getElements().length);
+ for (CDOCommitInfo cdoCommitInfo : cdoCommitHistory.getElements())
+ {
+ if (cdoCommitInfo.getTimeStamp() == commitTime1)
+ {
+ checkCommitInfo1(cdoCommitInfo);
+ }
+ else if (cdoCommitInfo.getTimeStamp() == commitTime2)
+ {
+ checkCommitInfo2(cdoCommitInfo);
+ }
+ else if (cdoCommitInfo.getTimeStamp() == commitTime3)
+ {
+ checkCommitInfo3(cdoCommitInfo);
+ }
+ else if (cdoCommitInfo.getTimeStamp() == commitTime4)
+ {
+ checkCommitInfo4(cdoCommitInfo);
+ }
+ else if (cdoCommitInfo.getComment() != null && cdoCommitInfo.getComment().equals("<initialize>"))
+ {
+ // as expected
+ }
+ else
+ {
+ fail();
+ }
+ }
+ audit.close();
+ }
+
+ session.close();
+ }
+
+ private void checkCommitInfo1(CDOCommitInfo cdoCommitInfo)
+ {
+ final List<CDOIDAndVersion> newObjects = cdoCommitInfo.getNewObjects();
+ final List<CDORevisionKey> changedObjects = cdoCommitInfo.getChangedObjects();
+ final List<CDOIDAndVersion> detachedObjects = cdoCommitInfo.getDetachedObjects();
+ assertEquals(0, detachedObjects.size());
+ assertEquals(3, newObjects.size());
+ assertEquals(1, changedObjects.size());
+ for (Object o : changedObjects)
+ {
+ final CDORevisionDelta cdoRevisionDelta = (CDORevisionDelta)o;
+ final CDOFeatureDelta cdoFeatureDelta = cdoRevisionDelta.getFeatureDelta(EresourcePackage.eINSTANCE
+ .getCDOResource_Contents());
+ assertNotNull(cdoFeatureDelta);
+ assertEquals(CDOFeatureDelta.Type.LIST, cdoFeatureDelta.getType());
+ }
+ int resourceCnt = 0;
+ int resourceFolderCnt = 0;
+ int companyCnt = 0;
+ for (Object o : newObjects)
+ {
+ final CDORevision cdoRevision = (CDORevision)o;
+ if (cdoRevision.getEClass().getName().equals(Model1Package.eINSTANCE.getCompany().getName()))
+ {
+ companyCnt++;
+ }
+ if (cdoRevision.getEClass() == EresourcePackage.eINSTANCE.getCDOResource())
+ {
+ resourceCnt++;
+ }
+ if (cdoRevision.getEClass() == EresourcePackage.eINSTANCE.getCDOResourceFolder())
+ {
+ resourceFolderCnt++;
+ }
+ }
+ assertEquals(1, companyCnt);
+ assertEquals(1, resourceCnt);
+ assertEquals(1, resourceFolderCnt);
+ }
+
+ private void checkCommitInfo2(CDOCommitInfo cdoCommitInfo)
+ {
+ final List<CDOIDAndVersion> newObjects = cdoCommitInfo.getNewObjects();
+ final List<CDORevisionKey> changedObjects = cdoCommitInfo.getChangedObjects();
+ final List<CDOIDAndVersion> detachedObjects = cdoCommitInfo.getDetachedObjects();
+ assertEquals(0, detachedObjects.size());
+ assertEquals(0, newObjects.size());
+ assertEquals(1, changedObjects.size());
+ for (Object o : changedObjects)
+ {
+ final CDORevisionDelta cdoRevisionDelta = (CDORevisionDelta)o;
+ final CDOSetFeatureDelta cdoFeatureDelta = (CDOSetFeatureDelta)cdoRevisionDelta.getFeatureDelta(cdoRevisionDelta
+ .getEClass().getEStructuralFeature("name"));
+ assertNotNull(cdoFeatureDelta);
+ assertEquals("Sympedia", cdoFeatureDelta.getValue());
+ }
+ }
+
+ private void checkCommitInfo3(CDOCommitInfo cdoCommitInfo)
+ {
+ final List<CDOIDAndVersion> newObjects = cdoCommitInfo.getNewObjects();
+ final List<CDORevisionKey> changedObjects = cdoCommitInfo.getChangedObjects();
+ final List<CDOIDAndVersion> detachedObjects = cdoCommitInfo.getDetachedObjects();
+ assertEquals(0, detachedObjects.size());
+ assertEquals(0, newObjects.size());
+ assertEquals(1, changedObjects.size());
+ for (Object o : changedObjects)
+ {
+ final CDORevisionDelta cdoRevisionDelta = (CDORevisionDelta)o;
+ final CDOSetFeatureDelta cdoFeatureDelta = (CDOSetFeatureDelta)cdoRevisionDelta.getFeatureDelta(cdoRevisionDelta
+ .getEClass().getEStructuralFeature("name"));
+ assertNotNull(cdoFeatureDelta);
+ assertEquals("Eclipse", cdoFeatureDelta.getValue());
+ }
+ }
+
+ private void checkCommitInfo4(CDOCommitInfo cdoCommitInfo)
+ {
+ final List<CDOIDAndVersion> newObjects = cdoCommitInfo.getNewObjects();
+ final List<CDORevisionKey> changedObjects = cdoCommitInfo.getChangedObjects();
+ final List<CDOIDAndVersion> detachedObjects = cdoCommitInfo.getDetachedObjects();
+ assertEquals(1, detachedObjects.size());
+ assertEquals(0, newObjects.size());
+ assertEquals(1, changedObjects.size());
+ for (Object o : changedObjects)
+ {
+ final CDORevisionDelta cdoRevisionDelta = (CDORevisionDelta)o;
+ final CDOFeatureDelta cdoFeatureDelta = cdoRevisionDelta.getFeatureDelta(EresourcePackage.eINSTANCE
+ .getCDOResource_Contents());
+ assertNotNull(cdoFeatureDelta);
+ assertEquals(CDOFeatureDelta.Type.LIST, cdoFeatureDelta.getType());
+ }
+ }
+
+ private synchronized CDOObjectHistory getCDOObjectHistory(CDOView audit, Object object)
+ {
+ CDOObjectHistory cdoObjectHistory = audit.getHistory((CDOObject)object);
+
+ cdoObjectHistory.triggerLoad();
+ long startTime = System.currentTimeMillis();
+ while (cdoObjectHistory.isLoading())
+ {
+ ConcurrencyUtil.sleep(10);
+
+ // waited too long
+ if (System.currentTimeMillis() - startTime > 5000)
+ {
+ throw new IllegalStateException("commit info could not be loaded");
+ }
+ }
+ return cdoObjectHistory;
+ }
+
+ private synchronized CDOCommitHistory getCDOCommitHistory(CDOView audit)
+ {
+ CDOCommitHistory cdoCommitHistory = audit.getHistory();
+
+ cdoCommitHistory.triggerLoad();
+ long startTime = System.currentTimeMillis();
+ while (cdoCommitHistory.isLoading())
+ {
+ ConcurrencyUtil.sleep(10);
+
+ // waited too long
+ if (System.currentTimeMillis() - startTime > 5000)
+ {
+ throw new IllegalStateException("commit info could not be loaded");
+ }
+ }
+ return cdoCommitHistory;
+ }
+}

Back to the top