| /* |
| * TestCheckConsistency.java |
| * |
| * Created on October 9, 2006, 6:23 PM |
| * |
| * To change this template, choose Tools | Template Manager |
| * and open the template in the editor. |
| */ |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| package org.apache.openjpa.persistence.kernel; |
| |
| |
| |
| import org.apache.openjpa.persistence.kernel.common.apps.RuntimeTest1; |
| |
| import org.apache.openjpa.persistence.JPAFacadeHelper; |
| import org.apache.openjpa.persistence.OpenJPAEntityManager; |
| |
| public class TestCheckConsistency extends BaseKernelTest { |
| |
| private Object _oid = null; |
| |
| /** |
| * Creates a new instance of TestCheckConsistency |
| */ |
| public TestCheckConsistency(String name) { |
| super(name); |
| } |
| |
| public void setUp() { |
| deleteAll(RuntimeTest1.class); |
| |
| RuntimeTest1 pc = new RuntimeTest1(); |
| pc.setIntField(1); |
| pc.setIntField1(1); |
| _oid = persist(pc); |
| } |
| |
| public void testConsistentDatastoreTransaction() { |
| |
| OpenJPAEntityManager pm = getPM(); |
| pm.setOptimistic(false); |
| pm.validateChanges(); // no-op outside trans |
| startTx(pm); |
| |
| RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class, _oid); |
| pc.setIntField1(100); |
| |
| RuntimeTest1 npc = new RuntimeTest1(); |
| npc.setIntField(2); |
| npc.setIntField1(2); |
| pm.persist(npc); |
| pm.validateChanges(); |
| |
| assertEquals(100, pc.getIntField1()); |
| assertTrue(pm.isPersistent(npc)); |
| |
| pc.setIntField1(200); |
| npc.setIntField1(300); |
| endTx(pm); |
| |
| assertEquals(200, pc.getIntField1()); |
| assertTrue(pm.isPersistent(npc)); |
| assertEquals(300, npc.getIntField1()); |
| endEm(pm); |
| } |
| |
| public void testConsistentDatastoreTransactionWithRollback() { |
| OpenJPAEntityManager pm = getPM(); |
| pm.setOptimistic(false); |
| pm.validateChanges(); // no-op outside trans |
| startTx(pm); |
| |
| RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class, _oid); |
| pc.setIntField1(100); |
| |
| RuntimeTest1 npc = new RuntimeTest1(); |
| pm.persist(npc); |
| Object noid = pm.getObjectId(npc); |
| |
| pm.validateChanges(); |
| assertEquals(100, pc.getIntField1()); |
| assertTrue(pm.isPersistent(npc)); |
| |
| pc.setIntField1(200); |
| npc.setIntField1(300); |
| rollbackTx(pm); |
| |
| assertEquals(1, pc.getIntField1()); |
| assertFalse(pm.isPersistent(npc)); |
| assertEquals(0, npc.getIntField1()); |
| endEm(pm); |
| |
| pm = getPM(); |
| try { |
| RuntimeTest1 temp = |
| (RuntimeTest1) pm.find(RuntimeTest1.class, noid); |
| fail("Object should not exist." + temp.getIntField() + "::" + |
| temp.getIntField1()); |
| } catch (Exception jonfe) { |
| } |
| endEm(pm); |
| } |
| |
| //FIXME jthomas |
| /* |
| public void testInconsistentDatastoreTransaction() { |
| OpenJPAEntityManager pm = getPM(); |
| FetchPlan fetch = (FetchPlan) pm.getFetchPlan(); |
| pm.setOptimistic(false); |
| pm.setRetainState(false); |
| pm.validateChanges(); // no-op outside trans |
| pm.begin(); |
| */ |
| //FIXME jthomas |
| /* |
| fetch.setReadLockLevel(pm.LOCK_NONE); |
| fetch.setWriteLockLevel(pm.LOCK_NONE); |
| */ |
| /* |
| RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class,_oid); |
| pc.setIntField(100); |
| |
| OpenJPAEntityManager pm2 = getPM(); |
| pm2.begin(); |
| RuntimeTest1 copy = (RuntimeTest1) pm2.find(RuntimeTest1.class,_oid); |
| copy.setIntField(-1); |
| pm2.commit(); |
| pm2.close(); |
| |
| RuntimeTest1 npc = new RuntimeTest1(); |
| pm.persist(npc); |
| |
| try { |
| pm.validateChanges(); |
| fail("Didn't find inconsistency."); |
| } catch (Exception jove) { |
| //FIXME |
| /* |
| Throwable[] t = jove.getNestedExceptions(); |
| assertEquals(1, t.length); |
| assertEquals(pc, (((JDOException) t[0]).getFailedObject())); |
| */ |
| // } |
| |
| /* assertTrue(pm.getRollbackOnly()); |
| pm.rollback(); |
| |
| assertEquals(-1, pc.getIntField()); |
| assertFalse(pm.isPersistent(npc)); |
| endEm(pm,()); |
| } |
| */ |
| public void testConsistentOptimisticTransaction() { |
| OpenJPAEntityManager pm = getPM(); |
| pm.setOptimistic(true); |
| pm.validateChanges(); // no-op outside trans |
| startTx(pm); |
| boolean hasConn = hasConnection(pm); |
| |
| RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class, _oid); |
| pc.setIntField1(100); |
| |
| RuntimeTest1 npc = new RuntimeTest1(); |
| npc.setIntField(2); |
| npc.setIntField1(2); |
| pm.persist(npc); |
| |
| pm.validateChanges(); |
| if (!hasConn) |
| assertFalse(hasConnection(pm)); |
| |
| assertEquals(100, pc.getIntField1()); |
| assertTrue(pm.isPersistent(npc)); |
| |
| pc.setIntField1(200); |
| npc.setIntField1(300); |
| endTx(pm); |
| |
| assertEquals(200, pc.getIntField1()); |
| assertTrue(pm.isPersistent(npc)); |
| assertEquals(300, npc.getIntField1()); |
| endEm(pm); |
| } |
| |
| private boolean hasConnection(OpenJPAEntityManager pm) { |
| return JPAFacadeHelper.toBroker(pm).hasConnection(); |
| } |
| |
| public void testConsistentOptimisticTransactionWithRollback() { |
| OpenJPAEntityManager pm = getPM(); |
| pm.setOptimistic(true); |
| pm.validateChanges(); // no-op outside trans |
| startTx(pm); |
| boolean hasConn = hasConnection(pm); |
| |
| RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class, _oid); |
| pc.setIntField1(100); |
| |
| RuntimeTest1 npc = new RuntimeTest1(); |
| pm.persist(npc); |
| Object noid = pm.getObjectId(npc); |
| |
| pm.validateChanges(); |
| if (!hasConn) |
| assertFalse(hasConnection(pm)); |
| |
| assertEquals(100, pc.getIntField1()); |
| assertTrue(pm.isPersistent(npc)); |
| |
| pc.setIntField1(200); |
| npc.setIntField1(300); |
| rollbackTx(pm); |
| |
| assertEquals(1, pc.getIntField1()); |
| assertFalse(pm.isPersistent(npc)); |
| assertEquals(0, npc.getIntField1()); |
| endEm(pm); |
| |
| pm = getPM(); |
| try { |
| RuntimeTest1 temp = |
| (RuntimeTest1) pm.find(RuntimeTest1.class, noid); |
| |
| fail("Object should not exist." + temp.getIntField() + "::" + |
| temp.getIntField1()); |
| } catch (Exception jonfe) { |
| } |
| } |
| //FIXME |
| /* |
| public void testInconsistentOptimisticTransactionWithoutRefresh() { |
| OpenJPAEntityManager pm = getPM(); |
| pm.setRetainState(false); |
| pm.setOptimistic(true); |
| pm.validateChanges(); // no-op outside trans |
| pm.begin(); |
| |
| RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class,_oid); |
| pc.setIntField(100); |
| |
| OpenJPAEntityManager pm2 = getPM(); |
| pm2.begin(); |
| RuntimeTest1 copy = (RuntimeTest1) pm2.find(RuntimeTest1.class,_oid); |
| copy.setIntField(-1); |
| pm2.commit(); |
| pm2.close(); |
| |
| RuntimeTest1 npc = new RuntimeTest1(); |
| pm.persist(npc); |
| Object noid = pm.getObjectId(npc); |
| |
| try { |
| pm.validateChanges(); |
| fail("Didn't find inconsistency."); |
| } catch (Exception jove) { |
| //FIXME jthomas |
| /* |
| Throwable[] t = jove.getNestedExceptions(); |
| assertEquals(1, t.length); |
| assertEquals(pc, (((JDOException) t[0]).getFailedObject())); |
| */ |
| // } |
| /* assertFalse(pm.getRollbackOnly()); |
| |
| try { |
| pm.commit(); |
| fail("Committed inconsistent transaction."); |
| } catch (Exception je) { |
| } |
| |
| assertEquals(-1, pc.getIntField()); |
| assertFalse(pm.isPersistent(npc)); |
| endEm(pm,()); |
| |
| pm = getPM(); |
| try { |
| pm.find(RuntimeTest1.class,noid); |
| fail("Object should not exist."); |
| } catch (Exception jonfe) { |
| } |
| endEm(pm,()); |
| } |
| */ |
| |
| //FIXME |
| /* |
| public void testInconsistentOptimisticTransactionWithRefresh() { |
| OpenJPAEntityManager pm = getPM(); |
| pm.setOptimistic(true); |
| pm.validateChanges(); // no-op outside trans |
| pm.begin(); |
| |
| RuntimeTest1 pc = pm.find(RuntimeTest1.class,_oid); |
| pc.setIntField(100); |
| |
| OpenJPAEntityManager pm2 = getPM(); |
| pm2.begin(); |
| RuntimeTest1 copy = pm2.find(RuntimeTest1.class,_oid); |
| copy.setIntField(-1); |
| pm2.commit(); |
| pm2.close(); |
| |
| RuntimeTest1 npc = new RuntimeTest1(); |
| pm.persist(npc); |
| try { |
| pm.validateChanges(); |
| fail("Didn't find inconsistency."); |
| } catch (Exception jove) { |
| //FIXME jthomas |
| /* |
| Throwable[] t = jove.getNestedExceptions(); |
| assertEquals(1, t.length); |
| assertEquals(pc, (((JDOException) t[0]).getFailedObject())); |
| */ |
| // } |
| /* assertFalse(pm.getRollbackOnly()); |
| pm.refresh(pc); |
| |
| assertEquals(-1, pc.getIntField()); |
| assertTrue(pm.isPersistent(npc)); |
| |
| pc.setIntField(200); |
| npc.setIntField(300); |
| pm.commit(); |
| |
| assertEquals(200, pc.getIntField()); |
| assertTrue(pm.isPersistent(npc)); |
| assertEquals(300, npc.getIntField()); |
| endEm(pm,()); |
| } |
| */ |
| |
| //FIXME |
| |
| /* |
| public void testInconsistentOptimisticTransactionWithRollback() { |
| OpenJPAEntityManager pm = getPM(); |
| pm.setRetainState(false); |
| pm.setOptimistic(true); |
| pm.validateChanges(); // no-op outside trans |
| pm.begin(); |
| |
| RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class,_oid); |
| pc.setIntField(100); |
| |
| OpenJPAEntityManager pm2 = getPM(); |
| pm2.begin(); |
| RuntimeTest1 copy = (RuntimeTest1) pm2.find(RuntimeTest1.class,_oid); |
| copy.setIntField(-1); |
| pm2.commit(); |
| pm2.close(); |
| |
| RuntimeTest1 npc = new RuntimeTest1(); |
| pm.persist(npc); |
| Object noid = pm.getObjectId(npc); |
| |
| try { |
| pm.validateChanges(); |
| fail("Didn't find inconsistency."); |
| } catch (Exception jove) { |
| //FIXME jthomas |
| /* |
| Throwable[] t = jove.getNestedExceptions(); |
| assertEquals(1, t.length); |
| assertEquals(pc, (((JDOException) t[0]).getFailedObject())); |
| */ |
| // } |
| /* assertFalse(pm.getRollbackOnly()); |
| pm.rollback(); |
| |
| assertEquals(-1, pc.getIntField()); |
| assertFalse(pm.isPersistent(npc)); |
| endEm(pm,()); |
| |
| pm = getPM(); |
| try { |
| pm.find(RuntimeTest1.class,_oid); |
| fail("Object should not exist."); |
| } catch (Exception jonfe) { |
| } |
| endEm(pm,()); |
| } |
| |
| */ |
| } |