You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2003/09/09 15:37:14 UTC

cvs commit: db-ojb/src/test/org/apache/ojb/broker OptimisticLockingTest.java

arminw      2003/09/09 06:37:14

  Modified:    src/test/org/apache/ojb/broker OptimisticLockingTest.java
  Log:
  add more checks, remove try/catch block
  
  Revision  Changes    Path
  1.6       +115 -129  db-ojb/src/test/org/apache/ojb/broker/OptimisticLockingTest.java
  
  Index: OptimisticLockingTest.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/OptimisticLockingTest.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- OptimisticLockingTest.java	5 Feb 2003 20:03:41 -0000	1.5
  +++ OptimisticLockingTest.java	9 Sep 2003 13:37:14 -0000	1.6
  @@ -3,7 +3,7 @@
   import junit.framework.TestCase;
   import org.apache.ojb.broker.util.logging.LoggerFactory;
   
  -/** 
  +/**
    * This TestClass tests OJB facilities for optimistic locking.
    */
   public class OptimisticLockingTest extends TestCase
  @@ -54,144 +54,130 @@
   	}
   
   	/** Test optimistic Lock by version.*/
  -	public void testVersionLock()
  +	public void testVersionLock() throws Exception
   	{
  -		try
  -		{
  -		    LockedByVersion obj = new LockedByVersion();
  -		    obj.setValue("original");
  -		    Identity oid = new Identity(obj, broker);		    
  -		    broker.store(obj);		    
  -		    
  -		    broker.clearCache();
  -		    LockedByVersion copy1 = (LockedByVersion) broker.getObjectByIdentity(oid);
  -		    broker.clearCache();
  -		    LockedByVersion copy2 = (LockedByVersion) broker.getObjectByIdentity(oid);
  -		    
  -		    copy1.setValue("copy 1");
  -		    broker.store(copy1);
  -		    
  -		    copy2.setValue("copy 2");
  -		    try
  -		    {
  -		        // as copy1 has already been stored the version info of copy2 
  -		        // is out of sync with the database !		        
  -		    	broker.store(copy2);
  -		    }
  -		    catch (OptimisticLockException ex)
  -		    {
  -		        //LoggerFactory.getDefaultLogger().debug(ex);
  -		    	return;    
  -		    }
  -		    
  -		    fail("Should throw an Optimistic Lock exception");
  -		    
  -
  -		}
  -		catch (Throwable t)
  -		{
  -			fail(t.getMessage());
  -		}
  +        LockedByVersion obj = new LockedByVersion();
  +        obj.setValue("original");
  +        Identity oid = new Identity(obj, broker);
  +        broker.beginTransaction();
  +        broker.store(obj);
  +        broker.commitTransaction();
  +
  +        broker.clearCache();
  +        LockedByVersion copy1 = (LockedByVersion) broker.getObjectByIdentity(oid);
  +        broker.clearCache();
  +        LockedByVersion copy2 = (LockedByVersion) broker.getObjectByIdentity(oid);
  +
  +        copy1.setValue("copy 1");
  +        copy2.setValue("copy 2");
  +        assertEquals("Expect same version number", copy1.getVersion(), copy2.getVersion());
  +
  +        broker.beginTransaction();
  +        broker.store(copy1);
  +        broker.commitTransaction();
  +        assertTrue("Expect different version number", copy1.getVersion() != copy2.getVersion());
  +        try
  +        {
  +            // as copy1 has already been stored the version info of copy2
  +            // is out of sync with the database !
  +            broker.store(copy2);
  +        }
  +        catch (OptimisticLockException ex)
  +        {
  +            assertTrue(true);
  +            //LoggerFactory.getDefaultLogger().debug(ex);
  +            return;
  +        }
  +        fail("Should throw an Optimistic Lock exception");
   	}
  -	
  -	/** 
  +
  +	/**
   	 * demonstrates how OptimisticLockExceptions can be used
   	 * to handle resynchronization of conflicting instances.
   	 */
  -	public void testLockHandling()
  +	public void testLockHandling() throws Exception
   	{
  -		try
  -		{
  -		    LockedByVersion obj = new LockedByVersion();
  -		    obj.setValue("original");
  -		    Identity oid = new Identity(obj, broker);
  -		    
  -		    broker.store(obj);
  -		    
  -		    broker.clearCache();
  -		    LockedByVersion copy1 = (LockedByVersion) broker.getObjectByIdentity(oid);
  -		    broker.clearCache();
  -		    LockedByVersion copy2 = (LockedByVersion) broker.getObjectByIdentity(oid);
  -		    
  -		    copy1.setValue("copy 1");
  -		    broker.store(copy1);
  -		    
  -		    copy2.setValue("copy 2");
  -		    try
  -		    {
  -		        // as copy1 has already been stored the version info of copy2 
  -		        // is out of sync with the database !
  -		    	broker.store(copy2);
  -		    }
  -		    catch (OptimisticLockException ex)
  -		    {
  -		        // obtain conflicting object from exception
  -		        Object conflictingObject = ex.getSourceObject();
  -		        
  -		        // get a synchronized instance
  -		        broker.removeFromCache(conflictingObject);
  -		        Object syncronizedObject = broker.getObjectByIdentity(new Identity(conflictingObject, broker));
  -		        
  -		        // modify synchronized copy and call store again without trouble
  -		        ((LockedByVersion) syncronizedObject).setValue("copy 3");
  -		       	broker.store(syncronizedObject);		       
  -		    	return;    
  -		    }
  -		    
  -		    fail("Should throw an Optimistic Lock exception");
  -		    
  +        LockedByVersion obj = new LockedByVersion();
  +        obj.setValue("original");
  +        Identity oid = new Identity(obj, broker);
  +        broker.beginTransaction();
  +        broker.store(obj);
  +        broker.commitTransaction();
  +
  +        broker.clearCache();
  +        LockedByVersion copy1 = (LockedByVersion) broker.getObjectByIdentity(oid);
  +        broker.clearCache();
  +        LockedByVersion copy2 = (LockedByVersion) broker.getObjectByIdentity(oid);
  +
  +        copy1.setValue("copy 1");
  +        copy2.setValue("copy 2");
  +        assertEquals("Expect same version number", copy1.getVersion(), copy2.getVersion());
  +
  +        broker.beginTransaction();
  +        broker.store(copy1);
  +        broker.commitTransaction();
  +        assertTrue("Expect different version number", copy1.getVersion() != copy2.getVersion());
  +        try
  +        {
  +            // as copy1 has already been stored the version info of copy2
  +            // is out of sync with the database !
  +            broker.store(copy2);
  +        }
  +        catch (OptimisticLockException ex)
  +        {
  +            // obtain conflicting object from exception
  +            Object conflictingObject = ex.getSourceObject();
  +
  +            // get a synchronized instance
  +            broker.removeFromCache(conflictingObject);
  +            Object syncronizedObject = broker.getObjectByIdentity(new Identity(conflictingObject, broker));
  +
  +            // modify synchronized copy and call store again without trouble
  +            ((LockedByVersion) syncronizedObject).setValue("copy 3");
  +            broker.store(syncronizedObject);
  +            return;
  +        }
  +        fail("Should throw an Optimistic Lock exception");
  +	}
   
  -		}
  -		catch (Throwable t)
  -		{
  -			fail(t.getMessage());
  -		}
  -	}	
  -	
   
   /** Test optimistic Lock by timestamp.*/
  -	public void testTimestampLock()
  +	public void testTimestampLock() throws Exception
   	{
  -		try
  -		{
  -		    LockedByTimestamp obj = new LockedByTimestamp();
  -		    obj.setValue("original");
  -		    Identity oid = new Identity(obj, broker);
  -		    
  -		    broker.store(obj);
  -		    
  -		    broker.clearCache();
  -		    LockedByTimestamp copy1 = (LockedByTimestamp) broker.getObjectByIdentity(oid);
  -		    broker.clearCache();
  -		    LockedByTimestamp copy2 = (LockedByTimestamp) broker.getObjectByIdentity(oid);
  -		    
  -		    Thread.sleep(1000);	//mysql timestamp does not support milliseconds
  -
  -		    copy1.setValue("copy 1");
  -		    broker.store(copy1);
  -		    
  -		    copy2.setValue("copy 2");
  -		    try
  -		    {
  -		        // as copy1 has already been stored the timestamp info 
  -		        // of copy2  is out of sync with the database !
  -		    	broker.store(copy2);
  -		    }
  -		    catch (OptimisticLockException ex)
  -		    {
  -		        LoggerFactory.getDefaultLogger().debug(ex);
  -		    	return;    
  -		    }
  -		    
  -		    fail("Should throw an Optimistic Lock exception");
  -		    
  +		LockedByTimestamp obj = new LockedByTimestamp();
  +        obj.setValue("original");
  +        Identity oid = new Identity(obj, broker);
  +        broker.beginTransaction();
  +        broker.store(obj);
  +        broker.commitTransaction();
  +
  +        broker.clearCache();
  +        LockedByTimestamp copy1 = (LockedByTimestamp) broker.getObjectByIdentity(oid);
  +        broker.clearCache();
  +        LockedByTimestamp copy2 = (LockedByTimestamp) broker.getObjectByIdentity(oid);
  +
  +        Thread.sleep(1000);	//mysql timestamp does not support milliseconds
  +
  +        copy1.setValue("copy 1");
  +        copy2.setValue("copy 2");
  +        assertEquals("Expect same version number", copy1.getTimestamp(), copy2.getTimestamp());
  +
  +        broker.beginTransaction();
  +        broker.store(copy1);
  +        broker.commitTransaction();
  +        assertTrue("Expect different version number", copy1.getTimestamp() != copy2.getTimestamp());
  +        try
  +        {
  +            // as copy1 has already been stored the timestamp info
  +            // of copy2  is out of sync with the database !
  +            broker.store(copy2);
  +        }
  +        catch (OptimisticLockException ex)
  +        {
  +            LoggerFactory.getDefaultLogger().debug(ex);
  +            return;
  +        }
   
  -		}
  -		catch (Throwable t)
  -		{
  -			fail(t.getMessage());
  -		}
  +        fail("Should throw an Optimistic Lock exception");
   	}
  -
  -
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org