diff options
author | Eike Stepper | 2011-10-24 11:14:07 +0000 |
---|---|---|
committer | Eike Stepper | 2011-10-24 11:14:07 +0000 |
commit | 319c0208589562f4bf9dd3f873f478ddc7c5ee8c (patch) | |
tree | 1e96244f9dbfdf0c1d54ca80753b4a95c9980097 | |
parent | 0b1d19496e4707306c0b44a1ed3711dc44104b73 (diff) | |
parent | 2afc318a7b9ca4337fca7e73b3b006c960140a52 (diff) | |
download | cdo-319c0208589562f4bf9dd3f873f478ddc7c5ee8c.tar.gz cdo-319c0208589562f4bf9dd3f873f478ddc7c5ee8c.tar.xz cdo-319c0208589562f4bf9dd3f873f478ddc7c5ee8c.zip |
Merge branch 'master' of ssh://git.eclipse.org/gitroot/cdo/cdo
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(); + } +} |