Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2011-10-24 11:14:07 +0000
committerEike Stepper2011-10-24 11:14:07 +0000
commit319c0208589562f4bf9dd3f873f478ddc7c5ee8c (patch)
tree1e96244f9dbfdf0c1d54ca80753b4a95c9980097
parent0b1d19496e4707306c0b44a1ed3711dc44104b73 (diff)
parent2afc318a7b9ca4337fca7e73b3b006c960140a52 (diff)
downloadcdo-319c0208589562f4bf9dd3f873f478ddc7c5ee8c.tar.gz
cdo-319c0208589562f4bf9dd3f873f478ddc7c5ee8c.tar.xz
cdo-319c0208589562f4bf9dd3f873f478ddc7c5ee8c.zip
Merge branch 'master' of ssh://git.eclipse.org/gitroot/cdo/cdo
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEntityMapper.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/.settings/.api_filters32
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/META-INF/MANIFEST.MF3
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateBranchPointImpl.java33
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateConstants.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java1
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampGetter.java46
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampSetter.java56
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java9
-rw-r--r--plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java14
-rw-r--r--plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateTimeStampTest.java62
11 files changed, 248 insertions, 14 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEntityMapper.java b/plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEntityMapper.java
index b340b5478b..702a233b49 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEntityMapper.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEntityMapper.java
@@ -80,6 +80,10 @@ public class CDOEntityMapper extends EntityMapper
versionElement.addElement("column").addAttribute("name", getHbmContext().getVersionColumnName()); //$NON-NLS-1$//$NON-NLS-2$
versionElement.addAttribute("type", Integer.class.getName()); //$NON-NLS-1$
+ final Element timeStampElement = entityElement.addElement("property"); //$NON-NLS-1$
+ timeStampElement.addAttribute("name", CDOHibernateConstants.COMMITTIMESTAMP_PROPERTY); //$NON-NLS-1$
+ timeStampElement.addAttribute("type", Long.class.getName()); //$NON-NLS-1$
+
if (getHbmContext().getCurrentEClass() == EresourcePackage.eINSTANCE.getCDOResourceNode())
{
// not nice but teneo will assign the first unique-key the number c0
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/.settings/.api_filters b/plugins/org.eclipse.emf.cdo.server.hibernate/.settings/.api_filters
index b2ad589455..2bf9014e4f 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/.settings/.api_filters
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/.settings/.api_filters
@@ -1,12 +1,20 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<component id="org.eclipse.emf.cdo.server.hibernate" version="2">
- <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.WrappedHibernateList">
- <filter id="574660632">
- <message_arguments>
- <message_argument value="InternalCDOList"/>
- <message_argument value="CDOList"/>
- <message_argument value="WrappedHibernateList"/>
- </message_arguments>
- </filter>
- </resource>
-</component>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.emf.cdo.server.hibernate" version="2">
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateBranchPointImpl.java" type="org.eclipse.emf.cdo.server.internal.hibernate.CDOHibernateBranchPointImpl">
+ <filter comment="Need to implement own version of branch point to store commit information" id="574619656">
+ <message_arguments>
+ <message_argument value="CDOBranchPoint"/>
+ <message_argument value="CDOHibernateBranchPointImpl"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.WrappedHibernateList">
+ <filter id="574660632">
+ <message_arguments>
+ <message_argument value="InternalCDOList"/>
+ <message_argument value="CDOList"/>
+ <message_argument value="WrappedHibernateList"/>
+ </message_arguments>
+ </filter>
+ </resource>
+</component>
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.server.hibernate/META-INF/MANIFEST.MF
index 5387a53c0b..4cb8a659a8 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/META-INF/MANIFEST.MF
@@ -18,7 +18,8 @@ Export-Package: org.eclipse.emf.cdo.server.hibernate;version="4.0.100",
org.eclipse.emf.cdo.server.internal.hibernate.bundle;version="4.0.100";x-internal:=true,
org.eclipse.emf.cdo.server.internal.hibernate.info;version="4.0.100";x-friends:="org.eclipse.emf.cdo.server.hibernate.teneo,org.eclipse.emf.cdo.tests.hibernate",
org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;version="4.0.100";x-friends:="org.eclipse.emf.cdo.server.hibernate.teneo,org.eclipse.emf.cdo.tests.hibernate"
-Import-Package: org.hibernate;version="[3.6.0,4.0.0)",
+Import-Package: org.apache.log4j;version="[1.2.12, 1.3.0)",
+ org.hibernate;version="[3.6.0,4.0.0)",
org.hibernate.cfg;version="[3.6.0,4.0.0)",
org.hibernate.collection;version="[3.6.0,4.0.0)",
org.hibernate.criterion;version="[3.6.0,4.0.0)",
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateBranchPointImpl.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateBranchPointImpl.java
new file mode 100644
index 0000000000..87505f39de
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateBranchPointImpl.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2011 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:
+ * Martin Taal
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.internal.common.branch.CDOBranchPointImpl;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOBranchTimeStampGetter;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOBranchTimeStampSetter;
+
+/**
+ * Used to get the timestamp from the db into the revision branchpoint.
+ *
+ * @see CDOBranchTimeStampGetter
+ * @see CDOBranchTimeStampSetter
+ * @author Martin Taal
+ */
+@SuppressWarnings("restriction")
+public class CDOHibernateBranchPointImpl extends CDOBranchPointImpl
+{
+
+ public CDOHibernateBranchPointImpl(long timeStamp)
+ {
+ super(HibernateThreadContext.getCurrentStoreAccessor().getStore().getRepository().getBranchManager()
+ .getMainBranch(), timeStamp);
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateConstants.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateConstants.java
index b6646b82c0..5f61b83427 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateConstants.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateConstants.java
@@ -20,6 +20,8 @@ public class CDOHibernateConstants
{
public static final String ID_PROPERTY = "id"; //$NON-NLS-1$
+ public static final String COMMITTIMESTAMP_PROPERTY = "commit_TimeStamp"; //$NON-NLS-1$
+
public static final String RESOURCE_PROPERTY = "resourceID"; //$NON-NLS-1$
public static final String RESOURCE_PROPERTY_COLUMN = "resource_id"; //$NON-NLS-1$
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
index df5e3cd7de..b647ccce59 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
@@ -699,6 +699,7 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS
try
{
final CDORevision revision = HibernateUtil.getInstance().getCDORevision(id);
+
// maybe deleted in parallell?
if (revision != null)
{
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampGetter.java
new file mode 100644
index 0000000000..da7d49fba7
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampGetter.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2011 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:
+ * Martin Taal
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.CDOHibernateBranchPointImpl;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+
+/**
+ * Gets the time stamp value to store in the database.
+ *
+ * @see CDOHibernateBranchPointImpl
+ * @author Martin Taal
+ */
+public class CDOBranchTimeStampGetter extends CDOPropertyGetter
+{
+ private static final long serialVersionUID = 1L;
+
+ public CDOBranchTimeStampGetter(CDORevisionTuplizer tuplizer, String propertyName)
+ {
+ super(tuplizer, propertyName);
+ }
+
+ @Override
+ public Object get(Object target) throws HibernateException
+ {
+ final InternalCDORevision revision = (InternalCDORevision)target;
+ final Object value = revision.getTimeStamp();
+ return value;
+ }
+
+ @Override
+ protected boolean isVirtualPropertyAllowed()
+ {
+ return true;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampSetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampSetter.java
new file mode 100644
index 0000000000..39effb161c
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampSetter.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2011 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:
+ * Martin Taal
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.CDOHibernateBranchPointImpl;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.SessionFactoryImplementor;
+
+/**
+ * Sets the time stamp information in the revision.
+ *
+ * @see CDOHibernateBranchPointImpl
+ * @author Martin Taal
+ */
+public class CDOBranchTimeStampSetter extends CDOPropertySetter
+{
+ private static final long serialVersionUID = 1L;
+
+ public CDOBranchTimeStampSetter(CDORevisionTuplizer tuplizer, String propertyName)
+ {
+ super(tuplizer, propertyName);
+ }
+
+ @Override
+ public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+ {
+ final InternalCDORevision revision = (InternalCDORevision)target;
+ final long timeStamp;
+ if (value == null)
+ {
+ timeStamp = 0;
+ }
+ else
+ {
+ timeStamp = (Long)value;
+ }
+ final CDOHibernateBranchPointImpl branchPoint = new CDOHibernateBranchPointImpl(timeStamp);
+ revision.setBranchPoint(branchPoint);
+ }
+
+ @Override
+ protected boolean isVirtualPropertyAllowed()
+ {
+ return true;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
index db07d4fcc0..e1448589aa 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
@@ -210,6 +210,10 @@ public class CDORevisionTuplizer extends AbstractEntityTuplizer
{
return new CDOContainerGetter(this, mappedProperty.getName());
}
+ else if (mappedProperty.getName().compareTo(CDOHibernateConstants.COMMITTIMESTAMP_PROPERTY) == 0)
+ {
+ return new CDOBranchTimeStampGetter(this, mappedProperty.getName());
+ }
EStructuralFeature feature = getEClass().getEStructuralFeature(mappedProperty.getName());
if (feature instanceof EReference && feature.isMany())
@@ -263,6 +267,11 @@ public class CDORevisionTuplizer extends AbstractEntityTuplizer
return new CDOContainerSetter(this, mappedProperty.getName());
}
+ if (mappedProperty.getName().compareTo(CDOHibernateConstants.COMMITTIMESTAMP_PROPERTY) == 0)
+ {
+ return new CDOBranchTimeStampSetter(this, mappedProperty.getName());
+ }
+
EStructuralFeature feature = getEClass().getEStructuralFeature(mappedProperty.getName());
if (feature instanceof EReference && feature.isMany())
{
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 6f5e5c2ef3..1b173105f2 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
@@ -21,7 +21,11 @@ import org.eclipse.emf.cdo.tests.CommitInfoTest;
import org.eclipse.emf.cdo.tests.ComplexTest;
import org.eclipse.emf.cdo.tests.ContainmentTest;
import org.eclipse.emf.cdo.tests.ExternalReferenceTest;
+import org.eclipse.emf.cdo.tests.LockingManagerRestartRepositoryTest;
+import org.eclipse.emf.cdo.tests.LockingManagerRestartSessionTest;
+import org.eclipse.emf.cdo.tests.LockingManagerRestartTransactionTest;
import org.eclipse.emf.cdo.tests.LockingManagerTest;
+import org.eclipse.emf.cdo.tests.LockingNotificationsTest;
import org.eclipse.emf.cdo.tests.MEMStoreQueryTest;
import org.eclipse.emf.cdo.tests.MergingTest;
import org.eclipse.emf.cdo.tests.MultiValuedOfAttributeTest;
@@ -76,12 +80,13 @@ public class AllTestsHibernate extends AllConfigs
protected void initTestClasses(List<Class<? extends ConfigTest>> testClasses, IScenario scenario)
{
// testClasses.clear();
- // testClasses.add(XRefTest.class);
+ // testClasses.add(HibernateTimeStampTest.class);
// if (true)
// {
// return;
// }
+ testClasses.add(HibernateTimeStampTest.class);
testClasses.add(Hibernate_Bugzilla_279982_Test.class);
testClasses.add(Hibernate_ContainmentTest.class);
testClasses.add(HibernateXATransactionTest.class);
@@ -109,6 +114,13 @@ public class AllTestsHibernate extends AllConfigs
testClasses.remove(Bugzilla_279982_Test.class);
+ // locking not supported
+ testClasses.remove(LockingManagerRestartRepositoryTest.class);
+ testClasses.remove(LockingManagerRestartSessionTest.class);
+ testClasses.remove(LockingManagerRestartTransactionTest.class);
+ testClasses.remove(LockingNotificationsTest.class);
+ testClasses.remove(LockingManagerRestartRepositoryTest.class);
+
// are replaced by Hibernate specific ones, mostly
// to prevent tests doing move from one container to another
testClasses.remove(ContainmentTest.class);
diff --git a/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateTimeStampTest.java b/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateTimeStampTest.java
new file mode 100644
index 0000000000..aa34e6bcc7
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateTimeStampTest.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2004 - 2011 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:
+ * Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.Product1;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+/**
+ * Simple test to check that the timestamp is indeed stored. https://bugs.eclipse.org/bugs/show_bug.cgi?id=361792
+ *
+ * @author Martin Taal
+ */
+public class HibernateTimeStampTest extends AbstractCDOTest
+{
+
+ public void testTimeStamp() throws Exception
+ {
+ msg("Opening session");
+ CDOSession session = openSession();
+
+ CDOID cdoId = null;
+ {
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+ Product1 product = getModel1Factory().createProduct1();
+ product.setDescription("Description");
+ product.setName("name");
+ resource.getContents().add(product);
+ transaction.commit();
+ cdoId = ((CDOObject)product).cdoID();
+ }
+ session.close();
+
+ Thread.sleep(500);
+
+ final long checkTimeStamp = System.currentTimeMillis();
+
+ session = openSession();
+
+ CDOTransaction transaction = session.openTransaction();
+ final CDOObject cdoObject = transaction.getObject(cdoId);
+ final long timeStamp = cdoObject.cdoRevision().getTimeStamp();
+ if (checkTimeStamp < timeStamp)
+ {
+ fail("Timestamp not stored");
+ }
+ transaction.commit();
+ }
+}

Back to the top