mirror of https://github.com/apache/openjpa.git
OPENJPA-1562 Committing code and test updates contributed by Dianne Richards. Refresh after remove was not throwing exception dictated by spec.
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@923849 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
845f9b5018
commit
6d87bbdbb0
|
@ -116,6 +116,23 @@ public class TestRefresh extends SingleEMTestCase {
|
|||
assertEquals(mode, CacheStoreMode.USE);
|
||||
}
|
||||
|
||||
public void testRefreshAfterRemove() {
|
||||
try {
|
||||
em.getTransaction().begin();
|
||||
Item item = new Item();
|
||||
item.setItemData("Test Data");
|
||||
em.persist(item);
|
||||
em.flush();
|
||||
em.remove(item);
|
||||
em.flush();
|
||||
em.refresh(item);
|
||||
em.getTransaction().commit();
|
||||
fail("Did not catch expected IllegalArgumentException for refresh() of removed entity");
|
||||
} catch (IllegalArgumentException e) {
|
||||
// Expected exception
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void assertCached(Class<?> cls, Object oid) {
|
||||
assertTrue(cls + ":" + oid + " should be in L2 cache, but not", emf.getCache().contains(cls, oid));
|
||||
|
|
|
@ -255,28 +255,28 @@ public class TestMixedLockManagerRefreshException extends SequencedActionsTest {
|
|||
{Act.Remove},
|
||||
|
||||
{Act.Refresh, 1, LockModeType.NONE },
|
||||
{Act.TestException},
|
||||
{Act.TestException, 1, IllegalArgumentException.class },
|
||||
|
||||
{Act.Refresh, 1, LockModeType.READ },
|
||||
{Act.TestException},
|
||||
{Act.TestException, 1, IllegalArgumentException.class },
|
||||
|
||||
{Act.Refresh, 1, LockModeType.WRITE },
|
||||
{Act.TestException},
|
||||
{Act.TestException, 1, IllegalArgumentException.class },
|
||||
|
||||
{Act.Refresh, 1, LockModeType.OPTIMISTIC },
|
||||
{Act.TestException},
|
||||
{Act.TestException, 1, IllegalArgumentException.class },
|
||||
|
||||
{Act.Refresh, 1, LockModeType.OPTIMISTIC_FORCE_INCREMENT },
|
||||
{Act.TestException},
|
||||
{Act.TestException, 1, IllegalArgumentException.class },
|
||||
|
||||
{Act.Refresh, 1, LockModeType.PESSIMISTIC_READ },
|
||||
{Act.TestException},
|
||||
{Act.TestException, 1, IllegalArgumentException.class },
|
||||
|
||||
{Act.Refresh, 1, LockModeType.PESSIMISTIC_WRITE },
|
||||
{Act.TestException},
|
||||
{Act.TestException, 1, IllegalArgumentException.class },
|
||||
|
||||
{Act.Refresh, 1, LockModeType.PESSIMISTIC_FORCE_INCREMENT },
|
||||
{Act.TestException},
|
||||
{Act.TestException, 1, IllegalArgumentException.class },
|
||||
|
||||
{Act.RollbackTx},
|
||||
};
|
||||
|
|
|
@ -102,6 +102,10 @@ public class EntityManagerImpl
|
|||
private static final Localizer _loc = Localizer.forPackage(EntityManagerImpl.class);
|
||||
private static final Object[] EMPTY_OBJECTS = new Object[0];
|
||||
|
||||
private static final String GET_LOCK_MODE = "getLockMode";
|
||||
private static final String LOCK = "lock";
|
||||
private static final String REFRESH = "refresh";
|
||||
|
||||
private DelegatingBroker _broker;
|
||||
private EntityManagerFactoryImpl _emf;
|
||||
private Map<FetchConfiguration,FetchPlan> _plans = new IdentityHashMap<FetchConfiguration,FetchPlan>(1);
|
||||
|
@ -742,7 +746,7 @@ public class EntityManagerImpl
|
|||
|
||||
public void refresh(Object entity, LockModeType mode, Map<String, Object> properties) {
|
||||
assertNotCloseInvoked();
|
||||
assertValidAttchedEntity("refresh", entity);
|
||||
assertValidAttchedEntity(REFRESH, entity);
|
||||
|
||||
_broker.assertWriteOperation();
|
||||
configureCurrentFetchPlan(pushFetchPlan(), properties, mode, true);
|
||||
|
@ -1144,7 +1148,7 @@ public class EntityManagerImpl
|
|||
public LockModeType getLockMode(Object entity) {
|
||||
assertNotCloseInvoked();
|
||||
_broker.assertActiveTransaction();
|
||||
assertValidAttchedEntity("getLockMode", entity);
|
||||
assertValidAttchedEntity(GET_LOCK_MODE, entity);
|
||||
return MixedLockLevelsHelper.fromLockLevel(
|
||||
_broker.getLockLevel(entity));
|
||||
}
|
||||
|
@ -1155,13 +1159,13 @@ public class EntityManagerImpl
|
|||
|
||||
public void lock(Object entity) {
|
||||
assertNotCloseInvoked();
|
||||
assertValidAttchedEntity("lock", entity);
|
||||
assertValidAttchedEntity(LOCK, entity);
|
||||
_broker.lock(entity, this);
|
||||
}
|
||||
|
||||
public void lock(Object entity, LockModeType mode, int timeout) {
|
||||
assertNotCloseInvoked();
|
||||
assertValidAttchedEntity("lock", entity);
|
||||
assertValidAttchedEntity(LOCK, entity);
|
||||
|
||||
configureCurrentFetchPlan(pushFetchPlan(), null, mode, false);
|
||||
try {
|
||||
|
@ -1173,7 +1177,7 @@ public class EntityManagerImpl
|
|||
|
||||
public void lock(Object entity, LockModeType mode, Map<String, Object> properties) {
|
||||
assertNotCloseInvoked();
|
||||
assertValidAttchedEntity("lock", entity);
|
||||
assertValidAttchedEntity(LOCK, entity);
|
||||
_broker.assertActiveTransaction();
|
||||
configureCurrentCacheModes(getFetchPlan(), properties);
|
||||
configureCurrentFetchPlan(pushFetchPlan(), properties, mode, false);
|
||||
|
@ -1341,7 +1345,7 @@ public class EntityManagerImpl
|
|||
*/
|
||||
void assertValidAttchedEntity(String call, Object entity) {
|
||||
OpenJPAStateManager sm = _broker.getStateManager(entity);
|
||||
if (sm == null || !sm.isPersistent() || sm.isDetached()) {
|
||||
if (sm == null || !sm.isPersistent() || sm.isDetached() || (call.equals(REFRESH) && sm.isDeleted())) {
|
||||
throw new IllegalArgumentException(_loc.get("invalid_entity_argument",
|
||||
call, entity == null ? "null" : Exceptions.toString(entity)).getMessage());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue