baliuka 02/02/23 04:11:30 Modified: simplestore/src/java/org/apache/commons/simplestore/persistence MetaObject.java simplestore/src/java/org/apache/commons/simplestore/persistence/impl PersistentProxy.java simplestore/src/test/org/apache/commons/simplestore TestSample.java Log: Test for roolback fixed bugs in roolback Added "clean" state for persistent Revision Changes Path 1.2 +3 -1 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/MetaObject.java Index: MetaObject.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/MetaObject.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- MetaObject.java 11 Feb 2002 20:23:30 -0000 1.1 +++ MetaObject.java 23 Feb 2002 12:11:30 -0000 1.2 @@ -59,7 +59,7 @@ /** *@author Juozas Baliuka <a href="mailto:[EMAIL PROTECTED]"> * [EMAIL PROTECTED]</a> - *@version $Id: MetaObject.java,v 1.1 2002/02/11 20:23:30 froehlich Exp $ + *@version $Id: MetaObject.java,v 1.2 2002/02/23 12:11:30 baliuka Exp $ */ public interface MetaObject extends Cloneable { @@ -79,6 +79,8 @@ public boolean isNew(); public boolean isDeleted(); + + public boolean isClean(); public void remove(); 1.7 +38 -18 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/PersistentProxy.java Index: PersistentProxy.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/PersistentProxy.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- PersistentProxy.java 21 Feb 2002 21:03:33 -0000 1.6 +++ PersistentProxy.java 23 Feb 2002 12:11:30 -0000 1.7 @@ -74,7 +74,7 @@ * [EMAIL PROTECTED]</a> *@author Gerhard Froehlich <a href="mailto:[EMAIL PROTECTED]"> * [EMAIL PROTECTED]</a> - *@version $Id: PersistentProxy.java,v 1.6 2002/02/21 21:03:33 baliuka Exp $ + *@version $Id: PersistentProxy.java,v 1.7 2002/02/23 12:11:30 baliuka Exp $ */ public class PersistentProxy implements MetaObject, InvocationHandler, Cloneable, Serializable { @@ -87,15 +87,17 @@ private static Method GET_META_OBJECT; - private Map m_map = new HashMap(); - private Object m_oid = null; - private boolean m_dirty = false; - private boolean m_deleted = false; + private Map m_map = new HashMap(); + private Object m_oid = null; + private boolean m_dirty = false; + private boolean m_deleted = false; + private boolean m_newCreated = false; + private boolean m_clean = false; + private TypeConverter m_typeConverter = new DefaultTypeConverter(); private Persistent m_object; private Class m_clazz; private Context m_context; - private boolean m_newCreated; public PersistentProxy(Class clazz, Object oid, @@ -124,8 +126,10 @@ handler.m_object = p; if ( newCreated ) { - MetaObject mo = p.getMetaObject(); - context.getTransactionManager().getTransaction().add(mo); + handler.m_clean = true; + context.getTransactionManager().getTransaction().add( handler ); + handler.m_clean = false; + } return p; } @@ -161,7 +165,7 @@ if (old == null || !old.equals(value)) { m_dirty = true; m_context.getTransactionManager().getTransaction().add(this); - m_map.put(name, value); + m_map.put(name, value); } } @@ -215,8 +219,7 @@ if (GET_META_OBJECT.equals(method)) { return this; } else if (TO_STRING.equals(method)) { - return m_oid + ""; - + return toString(); } else if (GET_OID.equals(method)) { return m_oid; @@ -234,8 +237,20 @@ } } + public String toString(){ + return + "OID=" + m_oid + + ";dirty=" + m_dirty + + ";newCreated=" + m_newCreated + + ";deleted=" + m_deleted + + ";clean=" + m_clean; + + } + public Object handleProperty(Object obj, Method method, Object[] obj2) throws Throwable { String name = method.getName(); + if( m_clean || m_deleted ) + throw new IllegalStateException("Object properties invalidated"); if (name.startsWith("set")) { setProperty(name.substring(3), obj2[0]); @@ -262,26 +277,31 @@ } public void remove() { + m_context.getTransactionManager().getTransaction().add(this); m_deleted = true; } public Object clone() throws CloneNotSupportedException { PersistentProxy cln = (PersistentProxy) super.clone(); - cln.m_dirty = false; - cln.m_map = (Map) ((HashMap) m_map).clone(); + cln.m_map = (Map) ((HashMap) m_map).clone(); return cln; } public void assign(MetaObject mo) { m_map.clear(); m_map.putAll( mo.getProperties() ); - m_oid = mo.getOID(); - m_object = mo.getObject(); - m_clazz = mo.getPersistentClass(); - m_dirty = mo.isDirty(); - m_deleted = mo.isDeleted(); + m_oid = mo.getOID(); + m_object = mo.getObject(); + m_clazz = mo.getPersistentClass(); + m_dirty = mo.isDirty(); + m_deleted = mo.isDeleted(); m_newCreated = mo.isNew(); + m_clean = mo.isClean(); + } + + public boolean isClean() { + return m_clean; } static { 1.7 +69 -41 jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestSample.java Index: TestSample.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestSample.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- TestSample.java 21 Feb 2002 21:03:33 -0000 1.6 +++ TestSample.java 23 Feb 2002 12:11:30 -0000 1.7 @@ -72,39 +72,39 @@ /** *@author Juozas Baliuka <a href="mailto:[EMAIL PROTECTED]"> * [EMAIL PROTECTED]</a> - *@version $Id: TestSample.java,v 1.6 2002/02/21 21:03:33 baliuka Exp $ + *@version $Id: TestSample.java,v 1.7 2002/02/23 12:11:30 baliuka Exp $ */ public class TestSample extends TestCase { - + PersistenceManager pm; - + public TestSample(String testName) { super(testName); } - + public static Test suite() { return new TestSuite(TestSample.class); } - + public static void main(String args[]) { String[] testCaseName = {TestSample.class.getName()}; junit.textui.TestRunner.main(testCaseName); } - + public void testCreate() throws java.lang.Exception { for (int i = 0; i < 10; i++) { - + Transaction transaction = pm.getTransaction(); - + transaction.begin(); TestPersistent object1 = (TestPersistent) pm.createInstance(TestPersistent.class); Object oid = pm.getOID(object1); transaction.commit(); - + transaction.begin(); TestPersistent object2 = (TestPersistent) pm.findInstance(TestPersistent.class, oid); transaction.commit(); - + transaction.begin(); TestPersistent object3 = (TestPersistent) pm.createInstance(TestPersistent.class); object3.setDateVal(new java.util.Date()); @@ -113,25 +113,25 @@ object3.setStrVal("" + i); object3.setBoolVal(true); transaction.commit(); - + assertEquals("Equals " + oid, object2, object1); assertTrue(" == " + oid, object2 == object1); - + } - + } - + public void testRetrieve() throws java.lang.Exception { - + Transaction transaction = pm.getTransaction(); - + transaction.begin(); java.util.Set objects = pm.findAll(TestPersistent.class); System.out.println("retrieved " + objects.size()); java.util.Iterator i = objects.iterator(); - + while (i.hasNext()) { - + TestPersistent object = (TestPersistent) i.next(); System.out.println("ID = " + object); System.out.println("BoolVal = " + object.getBoolVal()); @@ -139,42 +139,70 @@ System.out.println("IntVal = " + object.getIntVal()); System.out.println("FloatVal = " + object.getFloatVal()); System.out.println("StrVal = " + object.getStrVal()); - + } - + transaction.commit(); - + } public void testRollback() throws java.lang.Exception { - + Transaction transaction = pm.getTransaction(); - + transaction.begin(); java.util.Set objects = pm.findAll(TestPersistent.class); transaction.commit(); java.util.Iterator i = objects.iterator(); - + while (i.hasNext()) { transaction.begin(); - TestPersistent object = (TestPersistent) i.next(); - String val = object.getStrVal(); - object.setStrVal( i + ""); - transaction.rollback(); - transaction.begin(); - assertEquals("After rollback ", val, object.getStrVal()); - transaction.commit(); + TestPersistent object = (TestPersistent) i.next(); + String val = object.getStrVal(); + object.setStrVal( i + ""); + transaction.rollback(); + transaction.begin(); + assertEquals("After rollback ", val, object.getStrVal()); + transaction.commit(); } - - + + transaction.begin(); + TestPersistent object = (TestPersistent) pm.createInstance(TestPersistent.class); + object.setStrVal("Test roolback on new created " + object); + System.out.println(object.getStrVal()); + transaction.rollback(); + + transaction.begin(); + try{ + System.out.println(object.getStrVal()); + fail("Exception expected " + object); + }catch( Exception e ){ + } + transaction.commit(); + + transaction.begin(); + object = (TestPersistent) pm.createInstance(TestPersistent.class); + object.setIntVal(777); + transaction.commit(); + + transaction.begin(); + pm.removeInstance(object); + transaction.rollback(); + + transaction.begin(); + assertEquals( object + " Not modified ", 777, object.getIntVal() ); + transaction.commit(); + + + } - - + + protected void setUp() throws java.lang.Exception { super.setUp(); - + // this datasource is for reentrant connections only !!! DriverDataSource ds = new DriverDataSource(); ds.setDriver("org.hsqldb.jdbcDriver"); @@ -183,8 +211,8 @@ ds.setUser("sa"); ds.setPassword(""); String sql = "CREATE TABLE TEST_PERSISTENT ( ID bigint not null primary key, Bool_Val smallint," + - " Int_Val integer, Float_Val float, Date_Val date, Str_Val longVarChar ) "; - + " Int_Val integer, Float_Val float, Date_Val date, Str_Val longVarChar ) "; + java.sql.Connection con = ds.getConnection(); try { java.sql.Statement stmt = con.createStatement(); @@ -197,11 +225,11 @@ } finally { con.close(); } - + DBStorage storage = new DBStorage(ds); - ContextImpl context = new ContextImpl(new MetaClassImpl(),storage,SoftRefMemoryCache.getInstance(new java.util.HashMap(),0xFF),storage); + ContextImpl context = new ContextImpl(new MetaClassImpl(),storage,SoftRefMemoryCache.getInstance(new java.util.HashMap(),0xFF),storage); pm = PersistenceManager.getPersistenceManager(context); } - + }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>