blob: 74f247e142afe5a41cf8de628e6a8d846c153940 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2008 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* dclarke - initial JPA Employee example using XML (bug 217884)
******************************************************************************/
package org.eclipse.persistence.testing.tests.dynamic.employee;
import static junit.framework.Assert.*;
import javax.persistence.PersistenceContext;
import org.eclipse.persistence.dynamic.DynamicEntity;
import org.eclipse.persistence.dynamic.DynamicHelper;
import org.eclipse.persistence.sessions.*;
import org.eclipse.persistence.testing.models.dynamic.employee.*;
import org.eclipse.persistence.testing.tests.dynamic.EclipseLinkORMTest;
import org.eclipse.persistence.tools.schemaframework.DynamicSchemaManager;
import org.junit.Test;
@PersistenceContext(unitName = "empty")
public class TransactionTests extends EclipseLinkORMTest {
Transactions transactions = new Transactions();
Queries queries = new Queries();
private static Sample samplePopulation;
@Test
public void pessimisticLocking() throws Exception {
DynamicHelper helper = new DynamicHelper(getSharedSession());
transactions.pessimisticLocking(helper, getSession());
}
@Test
public void createUsingPersist() throws Exception {
DynamicHelper helper = new DynamicHelper(getSharedSession());
Session session = getSession();
DynamicEntity emp = transactions.createUsingPersist(helper, session);
assertNotNull(emp);
assertTrue(emp.<Integer> get("id") > 0);
UnitOfWork uow = session.acquireUnitOfWork();
DynamicEntity empWC = (DynamicEntity) uow.readObject(emp);
// Delete assuming private owned relationships;
uow.deleteObject(empWC);
uow.commit();
getSample().verifyCounts(session);
}
@Test
public void createUsingMerge() throws Exception {
DynamicHelper helper = new DynamicHelper(getSharedSession());
Session session = getSession();
DynamicEntity emp = transactions.createUsingMerge(helper, session);
assertNotNull(emp);
assertTrue(emp.<Integer> get("id") > 0);
UnitOfWork uow = session.acquireUnitOfWork();
DynamicEntity empWC = (DynamicEntity) uow.readObject(emp);
// Delete assuming private owned relationships;
uow.deleteObject(empWC);
uow.commit();
getSample().verifyCounts(session);
}
@Test
public void mergeDetached_UOW() throws Exception {
DynamicHelper helper = new DynamicHelper(getSharedSession());
Session session = getSession();
// get shared copy
DynamicEntity emp = this.queries.minimumEmployee(helper, session);
assertNotNull(emp);
// Create detached copy using separate UOW
UnitOfWork detachUOW = session.acquireUnitOfWork();
DynamicEntity detachedEmp = (DynamicEntity) detachUOW.readObject(emp);
detachUOW.release();
detachedEmp.set("salary", emp.<Integer> get("salary") + 1);
getQuerySQLTracker(session).reset();
assertEquals(0, getQuerySQLTracker(session).getTotalSQLUPDATECalls());
UnitOfWork uow = session.acquireUnitOfWork();
uow.deepMergeClone(detachedEmp);
uow.writeChanges();
assertEquals(1, getQuerySQLTracker(session).getTotalSQLUPDATECalls());
uow.release();
}
@Test
public void mergeDetached_Copy() throws Exception {
DynamicHelper helper = new DynamicHelper(getSharedSession());
Session session = getSession();
// get shared copy
DynamicEntity emp = this.queries.minimumEmployee(helper, session);
assertNotNull(emp);
// Create detached copy using session.copyObject
ObjectCopyingPolicy policy = new ObjectCopyingPolicy();
policy.setShouldResetPrimaryKey(false);
policy.setDepth(2);
DynamicEntity detachedEmp = (DynamicEntity) session.copyObject(emp, policy);
detachedEmp.set("salary", emp.<Integer> get("salary") + 1);
getQuerySQLTracker(session).reset();
assertEquals(0, getQuerySQLTracker(session).getTotalSQLUPDATECalls());
UnitOfWork uow = session.acquireUnitOfWork();
uow.deepMergeClone(detachedEmp);
uow.writeChanges();
assertEquals(1, getQuerySQLTracker(session).getTotalSQLUPDATECalls());
uow.release();
}
public Sample getSample() {
if (samplePopulation == null) {
samplePopulation = new Sample(getSharedSession());
}
return samplePopulation;
}
@Override
protected DatabaseSession createSharedSession() {
DatabaseSession shared = super.createSharedSession();
EmployeeDynamicMappings.createTypes(shared, "example.model.employee", true);
DynamicSchemaManager dsm = new DynamicSchemaManager(shared);
dsm.replaceDefaultTables(true, true);
getSample().persistAll(shared);
return shared;
}
}