blob: 62179dfb1dd42e7e8a6d44a9923b6b6b2a71cd27 [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.queries;
import org.eclipse.persistence.queries.*;
import org.eclipse.persistence.testing.models.employee.domain.*;
/**
* Tests the decoupling of bean-level pessimistic locking and refresh queries.
* <p>
*
* @author smcritch
*/
public class PessimisticLockRefreshTest extends PessimisticLockFineGrainedTest {
public PessimisticLockRefreshTest(short lockMode) {
super(lockMode);
setDescription("This test verifies the pessimistic locking feature works " +
"properly when set on the descriptor. And especially only for queries " +
" executed inside a UnitOfWork, not outside. Outside the query should " +
" be a regular NO_LOCK query.");
}
public void test() throws Exception {
checkSelectForUpateSupported();
if (this.lockMode == ObjectLevelReadQuery.LOCK_NOWAIT) {
checkNoWaitSupported();
}
// If this did not work, would have had thrown a fetch out of sequence exception.
ReadObjectQuery query = new ReadObjectQuery(Address.class);
uow = getSession().acquireUnitOfWork();
Address address = (Address)uow.executeQuery(query);
String oldCity = address.getCity();
address.setCity("Naboo");
query.setShouldRefreshIdentityMapResult(true);
query.setSelectionObject(address);
Address newAddress = (Address)uow.executeQuery(query);
strongAssert(newAddress.getCity().equals(oldCity),
"A pessimistically locked object could not be refreshed.");
// Part II: Now make sure that when lock it for the first time, that
// it is refreshed.
uow.release();
uow = getSession().acquireUnitOfWork();
query = new ReadObjectQuery(Address.class);
query.dontAcquireLocks();
address = (Address)uow.executeQuery(query);
address.setCity("Naboo");
query = new ReadObjectQuery(Address.class);
query.setSelectionObject(address);
newAddress = (Address)uow.executeQuery(query);
strongAssert(!newAddress.getCity().equals("Naboo"),
"A pessimistically locked object should be refreshed when read for the first time.");
}
}