/* * Copyright (c) 2012, 2013, 2015 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.eresource.CDOResource; import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.spi.server.InternalRepository; 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.model1.Customer; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.cdo.util.CDOUtil; import org.eclipse.emf.cdo.view.CDOView; import org.eclipse.net4j.util.concurrent.ConcurrencyUtil; /** * @author Martin Taal */ @Requires(IRepositoryConfig.CAPABILITY_AUDITING) public class Hibernate_Missing_Version_Test extends AbstractCDOTest { @Override protected void doSetUp() throws Exception { disableConsole(); super.doSetUp(); skipStoreWithoutRawAccess(); } @Override protected void doTearDown() throws Exception { disableConsole(); super.doTearDown(); } public void testVersionChange() throws Exception { CDOSession session = openSession(); Customer lastCustomer = null; { CDOTransaction transaction = session.openTransaction(); CDOResource resource = transaction.createResource(getResourcePath("/res1")); Customer customer = getModel1Factory().createCustomer(); customer.setName("Martin"); resource.getContents().add(customer); transaction.commit(); lastCustomer = customer; } { CDOTransaction transaction = session.openTransaction(); Customer customer = transaction.getObject(lastCustomer);// (Customer)resource.getContents().get(0); customer.setName("Eike"); assertEquals(1, CDOUtil.getCDOObject(customer).cdoRevision().getVersion()); transaction.commit(); assertEquals(2, CDOUtil.getCDOObject(customer).cdoRevision().getVersion()); lastCustomer = customer; } { CDOTransaction transaction = session.openTransaction(); Customer customer = lastCustomer; // transaction.getObject(lastCustomer);// // (Customer)resource.getContents().get(0); customer.setName("Peter"); assertEquals(2, CDOUtil.getCDOObject(customer).cdoRevision().getVersion()); transaction.commit(); // assertEquals(3, CDOUtil.getCDOObject(customer).cdoRevision().getVersion()); lastCustomer = customer; } getRepository().getRevisionManager().getCache().clear(); // now go to another repo InternalRepository repo2 = getRepository("repo2", true); repo2.getRevisionManager().getCache().clear(); { CDOSession session2 = openSession("repo2"); CDOTransaction transaction = session2.openTransaction(); CDOResource resource = transaction.getResource(getResourcePath("/res1")); Customer customer = (Customer)resource.getContents().get(0); customer.setName("John"); assertEquals(3, CDOUtil.getCDOObject(customer).cdoRevision().getVersion()); transaction.commit(); assertEquals(4, CDOUtil.getCDOObject(customer).cdoRevision().getVersion()); session2.close(); } { CDOSession session2 = openSession("repo2"); CDOTransaction transaction = session2.openTransaction(); CDOResource resource = transaction.getResource(getResourcePath("/res1")); Customer customer = (Customer)resource.getContents().get(0); customer.setName("Mike"); assertEquals(4, CDOUtil.getCDOObject(customer).cdoRevision().getVersion()); transaction.commit(); assertEquals(5, CDOUtil.getCDOObject(customer).cdoRevision().getVersion()); session2.close(); } { CDOSession session2 = openSession("repo2"); CDOView view = session2.openView(); CDOResource resource = view.getResource(getResourcePath("/res1")); Customer customer = (Customer)resource.getContents().get(0); assertNotNull(CDOUtil.getRevisionByVersion(CDOUtil.getCDOObject(customer), 4)); assertNotNull(CDOUtil.getRevisionByVersion(CDOUtil.getCDOObject(customer), 3)); assertNotNull(CDOUtil.getRevisionByVersion(CDOUtil.getCDOObject(customer), 2)); assertNotNull(CDOUtil.getRevisionByVersion(CDOUtil.getCDOObject(customer), 1)); CDOObjectHistory history = getCDOObjectHistory(view, customer); assertEquals(5, history.getElements().length); // for (CDOCommitInfo cdoCommitInfo : history.getElements()) // { // // } view.close(); session2.close(); } } 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; } }