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]>

Reply via email to