blob: 3bc650c39d51efe3f790a5b7a90bb8bfe54ec68c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. 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:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.testing.tests.aggregate;
import org.eclipse.persistence.sessions.*;
import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.testing.models.aggregate.*;
/**
* Bug 3443738
* Test to ensure that inserts work in a UnitOfWork with objects that have their
* optimistic locking version stored in an aggregate.
*/
public class AggregateVersionOpimisticLockingTest extends TestCase {
protected Exception insertException = null;
protected Exception updateException = null;
protected Exception forceUpdateException = null;
protected int initialVersion = -1;
protected int forcedUpdateVersion = -1;
protected int finalVersion = -1;
public AggregateVersionOpimisticLockingTest() {
super();
setDescription("Test to ensure that inserting objects with the optimistic locking " +
" version in an aggregate works when inserting in a UnitOfWork");
}
public void setup() {
beginTransaction();
}
public void test() {
UnitOfWork uow = getSession().acquireUnitOfWork();
Client client = new Client();
client.setName("Michael Ryder");
client.setAddressDescription(AddressDescription.example1());
uow.registerObject(client);
// test an insert
try {
uow.commit();
} catch (NullPointerException exception) {
insertException = exception;
}
initialVersion = client.getVersion().getVersion();
uow = getSession().acquireUnitOfWork();
client = (Client)uow.readObject(Client.class);
uow.forceUpdateToVersionField(client, true);
// test a forced update
try {
uow.commit();
} catch (NullPointerException exception) {
forceUpdateException = exception;
}
forcedUpdateVersion = client.getVersion().getVersion();
uow = getSession().acquireUnitOfWork();
client = (Client)uow.readObject(client);
client.setName("Mike Ribero");
// test an update
try {
uow.commit();
} catch (NullPointerException exception) {
updateException = exception;
}
finalVersion = client.getVersion().getVersion();
}
public void verify() {
if (insertException != null) {
throw new TestErrorException("An exception was thrown when trying to insert an object " +
"with it's optimistic locking version stored in an aggregate: " +
insertException.toString());
}
if (updateException != null) {
throw new TestErrorException("An exception was thrown when trying to update an object " +
"with it's optimistic locking version stored in an aggregate: " +
updateException.toString());
}
if (forceUpdateException != null) {
throw new TestErrorException("An exception was thrown when trying to use an optimistic read lock on an object " +
"with it's optimistic locking version stored in an aggregate: " +
forceUpdateException.toString());
}
if ((initialVersion + 1) != forcedUpdateVersion) {
throw new TestErrorException("Forced Updates did not merge the version field into the original.");
}
if ((initialVersion + 2) != finalVersion) {
throw new TestErrorException("Updates did not merge the version field into the original.");
}
}
public void reset() {
rollbackTransaction();
insertException = null;
updateException = null;
forceUpdateException = null;
}
}