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 2004/12/06 15:15:34 UTC

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

arminw      2004/12/06 06:15:33

  Modified:    src/test/org/apache/ojb/broker Tag: OJB_1_0_RELEASE
                        ProxyExamples.java
  Log:
  update test
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.12.2.3  +218 -211  db-ojb/src/test/org/apache/ojb/broker/ProxyExamples.java
  
  Index: ProxyExamples.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/ProxyExamples.java,v
  retrieving revision 1.12.2.2
  retrieving revision 1.12.2.3
  diff -u -r1.12.2.2 -r1.12.2.3
  --- ProxyExamples.java	4 Dec 2004 14:36:21 -0000	1.12.2.2
  +++ ProxyExamples.java	6 Dec 2004 14:15:33 -0000	1.12.2.3
  @@ -1,12 +1,8 @@
   package org.apache.ojb.broker;
   
   //#ifdef JDK13
  +
   import java.lang.reflect.Proxy;
  -//#else
  -/*
  -import com.develop.java.lang.reflect.Proxy;
  -*/
  -//#endif
   import java.util.Collection;
   import java.util.Iterator;
   import java.util.Vector;
  @@ -22,66 +18,79 @@
    */
   public class ProxyExamples extends PBTestCase
   {
  -	public static void main(String[] args)
  -	{
  -		String[] arr = {ProxyExamples.class.getName()};
  -		junit.textui.TestRunner.main(arr);
  -	}
  -
  -	public ProxyExamples(String name)
  -	{
  -		super(name);
  -	}
  -
  -	/**
  -	 * This example shows how the PersistenceBroker can be used with a highly configurable proxy concept.
  -	 * The main idea is, not to return materialized objects but rather lazy proxies, that defer materialization
  -	 * until it is definitely neccesary (e.g. reading an Objects attribute).
  -	 *
  -	 * To achieve such a behaviour, you can define proxies for each persistent class.
  -	 * As an example see the Repository.xml file in this examples directory.
  -	 *
  -	 * It is not always the best option to use lazy materialization. The usage of proxies can be completely configured
  -	 * in the xml repository. That is, if you decide not to use proxies, you don't have to change program-code,
  -	 * but only out-comment the corresponding entry in the repos
  -	 * itory.
  -	 */
  -	public void testProgrammedProxies() throws Exception
  -	{
  +    public static void main(String[] args)
  +    {
  +        String[] arr = {ProxyExamples.class.getName()};
  +        junit.textui.TestRunner.main(arr);
  +    }
  +
  +    public ProxyExamples(String name)
  +    {
  +        super(name);
  +    }
  +
  +    /**
  +     * This example shows how the PersistenceBroker can be used with a highly configurable proxy concept.
  +     * The main idea is, not to return materialized objects but rather lazy proxies, that defer materialization
  +     * until it is definitely neccesary (e.g. reading an Objects attribute).
  +     * <p/>
  +     * To achieve such a behaviour, you can define proxies for each persistent class.
  +     * As an example see the Repository.xml file in this examples directory.
  +     * <p/>
  +     * It is not always the best option to use lazy materialization. The usage of proxies can be completely configured
  +     * in the xml repository. That is, if you decide not to use proxies, you don't have to change program-code,
  +     * but only out-comment the corresponding entry in the repos
  +     * itory.
  +     */
  +    public void testProgrammedProxies() throws Exception
  +    {
  +        String name = "testDynamicProxies_" + System.currentTimeMillis();
           Vector myArticles = new Vector();
  -        // In the following code we will generate 10 Proxy-objects.
  -        // There is no need for DB Access,
  -        // uUntil their reals subjects attributes are referenced,
  -        for (int i = 1; i < 10; i++)
  -        {
  -            Object[] pkvals = new Object[1];
  -            pkvals[0] = new Integer(i);
  -            Identity id = new Identity(Article.class, InterfaceArticle.class, pkvals);
  -            InterfaceArticle A = (InterfaceArticle) VirtualProxy.createProxy(broker.getPBKey(), ArticleProxy.class, id);
  +// In the following code we will generate 10 Proxy-objects.
  +        ProductGroup pg = new ProductGroup();
  +        pg.setGroupName(name);
  +        broker.beginTransaction();
  +        broker.store(pg);
  +        broker.commitTransaction();
  +
  +        for(int i = 1; i < 10; i++)
  +        {
  +            Article a = new Article();
  +            a.setArticleName(name);
  +            a.setProductGroup(pg);
  +            broker.beginTransaction();
  +            broker.store(a);
  +            broker.commitTransaction();
  +            Identity id = broker.serviceIdentity().buildIdentity(a);
  +            InterfaceArticle A =
  +                    (InterfaceArticle) VirtualProxy.createProxy(broker.getPBKey(),
  +                            getDynamicProxyClass(Article.class), id);
               myArticles.add(A);
  -            //System.out.println(A);
  +//System.out.println(A);
           }
  -        // Until now no DB access !
  -        // In the following code we call methods that reference the real subjects attributes.
  -        // To access an articles name as in getArticleName(), the proxy object has to materialze the real subjects from db.
  -        // but note: the references to an Articles productgroup are not materialized immediately,
  -        // but contain proxy objects, representing ProductGroups.
  -        for (int i = 0; i < 9; i++)
  +// In the following code we call methods that reference the real subjects attributes.
  +// To access an articles name as in getArticleName(), the proxy object has to materialze the real subjects from db.
  +// but note: the references to an Articles productgroup are not materialized immediately,
  +// but contain proxy objects, representing ProductGroups.
  +        for(int i = 0; i < 9; i++)
           {
               InterfaceArticle a = (InterfaceArticle) myArticles.get(i);
  -            //System.out.println("Article[" + a.getArticleId() + "] : " + a.getArticleName());
  +//System.out.println("Article[" + a.getArticleId() + "] : " + a.getArticleName());
               assertNotNull(a);
           }
  -        // In the following code we will access the real ProductGroup objects.
  -        // thus the Proxies have to materialize them.
  -        for (int i = 0; i < 9; i++)
  +// In the following code we will access the real ProductGroup objects.
  +// thus the Proxies have to materialize them.
  +        for(int i = 0; i < 9; i++)
           {
               InterfaceArticle a = (InterfaceArticle) myArticles.get(i);
  -            //System.out.println("Article[" + a.getArticleId() + "] is in group " + a.getProductGroup().getName());
  +            assertNotNull(a.getProductGroup());
  +            assertNotNull(a.getProductGroup().getName());
  +
  +//System.out.println("Article[" + a.getArticleId() + "] is in group " + a.getProductGroup().getName());
           }
  -        // in the following code we will touch fields of the ProductGroup references.
  -        // Now proxies in the AllArticlesInGroup collection need to be materialized
  -        //System.out.println("now playing with product group no. 2");
  +// in the following code we will touch fields of the ProductGroup references.
  +// Now proxies in the AllArticlesInGroup collection need to be materialized
  +//System.out.println("now playing with product group no. 2");
           Object[] pkvals = new Object[1];
           pkvals[0] = new Integer(2);
           Identity id = new Identity(ProductGroup.class, ProductGroup.class, pkvals);
  @@ -90,90 +99,97 @@
           {
               group2 = (InterfaceProductGroup) VirtualProxy.createProxy(broker.getPBKey(), ProductGroupProxy.class, id);
           }
  -        catch (Exception ignored)
  +        catch(Exception ignored)
           {
           }
  -        //System.out.println(group2.toString());
  +//System.out.println(group2.toString());
           broker.beginTransaction();
  -        for (int i = 0; i < group2.getAllArticles().size(); i++)
  +        for(int i = 0; i < group2.getAllArticles().size(); i++)
           {
               InterfaceArticle a = (InterfaceArticle) group2.getAllArticles().get(i);
  -            //System.out.println(a.getArticleName());
  +//System.out.println(a.getArticleName());
               assertNotNull(a);
               broker.store(a);
           }
           broker.store(group2);
           broker.commitTransaction();
  -	}
  +    }
   
  -	private Class getDynamicProxyClass(Class clazz)
  -	{
  -		try
  -		{
  -			Class[] interfaces = clazz.getInterfaces();
  -			Class proxyClass = Proxy.getProxyClass(clazz.getClassLoader(), interfaces);
  -			return proxyClass;
  -		}
  -		catch (Throwable t)
  -		{
  -			System.out.println(
  -				"OJB Warning: can not use dynamic proxy for class " + clazz.getName() + ": " + t.getMessage());
  -			return null;
  -		}
  -
  -	}
  -
  -	/**
  -	 * This example shows how the PersistenceBroker can be used with a highly configurable proxy concept.
  -	 * The main idea is, not to return materialized objects but rather lazy proxies, that defer materialization
  -	 * until it is definitely neccesary (e.g. reading an Objects attribute).
  -	 *
  -	 * To achieve such a behaviour, you can define proxies for each persistent class.
  -	 * As an example see the Repository.xml file in this examples directory.
  -	 *
  -	 * It is not always the best option to use lazy materialization. The usage of proxies can be completely configured
  -	 * in the xml repository. That is, if you decide not to use proxies, you don't have to change program-code,
  -	 * but only out-comment the corresponding entry in the repos
  -	 * itory.
  -	 */
  -	public void testDynamicProxies()
  -	{
  +    private Class getDynamicProxyClass(Class clazz)
  +    {
  +        try
  +        {
  +            Class[] interfaces = clazz.getInterfaces();
  +            Class proxyClass = Proxy.getProxyClass(clazz.getClassLoader(), interfaces);
  +            return proxyClass;
  +        }
  +        catch(Throwable t)
  +        {
  +            System.out.println("OJB Warning: can not use dynamic proxy for class " + clazz.getName() + ": " + t.getMessage());
  +            return null;
  +        }
  +
  +    }
  +
  +    /**
  +     * This example shows how the PersistenceBroker can be used with a highly configurable proxy concept.
  +     * The main idea is, not to return materialized objects but rather lazy proxies, that defer materialization
  +     * until it is definitely neccesary (e.g. reading an Objects attribute).
  +     * <p/>
  +     * To achieve such a behaviour, you can define proxies for each persistent class.
  +     * As an example see the Repository.xml file in this examples directory.
  +     * <p/>
  +     * It is not always the best option to use lazy materialization. The usage of proxies can be completely configured
  +     * in the xml repository. That is, if you decide not to use proxies, you don't have to change program-code,
  +     * but only out-comment the corresponding entry in the repos
  +     * itory.
  +     */
  +    public void testDynamicProxies()
  +    {
  +        String name = "testDynamicProxies_" + System.currentTimeMillis();
           Vector myArticles = new Vector();
  -        // In the following code we will generate 10 Proxy-objects.
  -        // There is no need for DB Access,
  -        // uUntil their reals subjects attributes are referenced,
  -        for (int i = 1; i < 10; i++)
  -        {
  -            Object[] pkvals = new Object[1];
  -            pkvals[0] = new Integer(i);
  -            Identity id = new Identity(Article.class, InterfaceArticle.class, pkvals);
  +// In the following code we will generate 10 Proxy-objects.
  +        ProductGroup pg = new ProductGroup();
  +        pg.setGroupName(name);
  +        broker.beginTransaction();
  +        broker.store(pg);
  +        broker.commitTransaction();
  +
  +        for(int i = 1; i < 10; i++)
  +        {
  +            Article a = new Article();
  +            a.setArticleName(name);
  +            a.setProductGroup(pg);
  +            broker.beginTransaction();
  +            broker.store(a);
  +            broker.commitTransaction();
  +            Identity id = broker.serviceIdentity().buildIdentity(a);
               InterfaceArticle A =
  -                (InterfaceArticle) VirtualProxy.createProxy(broker.getPBKey(),
  -                        getDynamicProxyClass(Article.class), id);
  +                    (InterfaceArticle) VirtualProxy.createProxy(broker.getPBKey(),
  +                            getDynamicProxyClass(Article.class), id);
               myArticles.add(A);
  -            //System.out.println(A);
  +//System.out.println(A);
           }
  -        // Until now no DB access !
  -        // In the following code we call methods that reference the real subjects attributes.
  -        // To access an articles name as in getArticleName(), the proxy object has to materialze the real subjects from db.
  -        // but note: the references to an Articles productgroup are not materialized immediately,
  -        // but contain proxy objects, representing ProductGroups.
  -        for (int i = 0; i < 9; i++)
  +// In the following code we call methods that reference the real subjects attributes.
  +// To access an articles name as in getArticleName(), the proxy object has to materialze the real subjects from db.
  +// but note: the references to an Articles productgroup are not materialized immediately,
  +// but contain proxy objects, representing ProductGroups.
  +        for(int i = 0; i < 9; i++)
           {
               InterfaceArticle a = (InterfaceArticle) myArticles.get(i);
  -            //System.out.println("Article[" + a.getArticleId() + "] : " + a.getArticleName());
  +//System.out.println("Article[" + a.getArticleId() + "] : " + a.getArticleName());
           }
  -        // In the following code we will access the real ProductGroup objects.
  -        // thus the Proxies have to materialize them.
  -        for (int i = 0; i < 9; i++)
  +// In the following code we will access the real ProductGroup objects.
  +// thus the Proxies have to materialize them.
  +        for(int i = 0; i < 9; i++)
           {
               InterfaceArticle a = (InterfaceArticle) myArticles.get(i);
  -            //System.out.println("Article[" + a.getArticleId() + "] is in group " + a.getProductGroup().getName());
  +//System.out.println("Article[" + a.getArticleId() + "] is in group " + a.getProductGroup().getName());
           }
  -	}
  +    }
   
  -	public void testCollectionProxies() throws Exception
  -	{
  +    public void testCollectionProxies() throws Exception
  +    {
           ProductGroupWithCollectionProxy org_pg = new ProductGroupWithCollectionProxy();
           org_pg.setId(new Integer(7));
           Identity pgOID = broker.serviceIdentity().buildIdentity(org_pg);
  @@ -184,119 +200,110 @@
           Collection col = pg.getAllArticles();
           int countedSize = col.size(); // force count query
           Iterator iter = col.iterator();
  -        while (iter.hasNext())
  +        while(iter.hasNext())
           {
               InterfaceArticle a = (InterfaceArticle) iter.next();
           }
   
           assertEquals("compare counted and loaded size", countedSize, col.size());
  -	}
  +    }
  +
  +    public void testCollectionProxiesAndExtents() throws Exception
  +    {
  +        ProductGroupWithCollectionProxy pg = new ProductGroupWithCollectionProxy();
  +        pg.setId(new Integer(5));
  +        Identity pgOID = broker.serviceIdentity().buildIdentity(pg);
  +
  +        pg = (ProductGroupWithCollectionProxy) broker.getObjectByIdentity(pgOID);
  +        assertEquals(5, pg.getId().intValue());
  +
  +        Collection col = pg.getAllArticles();
  +        int countedSize = col.size(); // force count query
  +        Iterator iter = col.iterator();
  +        while(iter.hasNext())
  +        {
  +            InterfaceArticle a = (InterfaceArticle) iter.next();
  +        }
   
  -	public void testCollectionProxiesAndExtents()
  -	{
  -		try
  -		{
  -			ProductGroupWithCollectionProxy pg = new ProductGroupWithCollectionProxy();
  -			pg.setId(new Integer(5));
  -			Identity pgOID = broker.serviceIdentity().buildIdentity(pg);
  -
  -			pg = (ProductGroupWithCollectionProxy) broker.getObjectByIdentity(pgOID);
  -			assertEquals(5, pg.getId().intValue());
  -
  -			Collection col = pg.getAllArticles();
  -			int countedSize = col.size(); // force count query
  -			Iterator iter = col.iterator();
  -			while (iter.hasNext())
  -			{
  -				InterfaceArticle a = (InterfaceArticle) iter.next();
  -			}
  -
  -			assertEquals("compare counted and loaded size", countedSize, col.size());
  -
  -			// 7 Articles, 2 Books, 3 Cds
  -			assertEquals("check size", col.size(), 12);
  -
  -		}
  -		catch (Throwable t)
  -		{
  -			t.printStackTrace();
  -			fail(t.getMessage());
  -		}
  -	}
  -
  -	public void testReferenceProxies()
  -	{
  -		ArticleWithReferenceProxy a = new ArticleWithReferenceProxy();
  +        assertEquals("compare counted and loaded size", countedSize, col.size());
  +
  +        // 7 Articles, 2 Books, 3 Cds
  +        assertEquals("check size", col.size(), 12);
  +    }
  +
  +    public void testReferenceProxies()
  +    {
  +        ArticleWithReferenceProxy a = new ArticleWithReferenceProxy();
   //		a.setArticleId(8888);
           a.setArticleName("ProxyExamples.testReferenceProxy article");
   
  -		Query q = QueryFactory.newQuery(a);
  +        Query q = QueryFactory.newQuery(a);
   
  -		ProductGroup pg = new ProductGroup();
  +        ProductGroup pg = new ProductGroup();
   //		pg.setId(10);
           pg.setGroupName("ProxyExamples test group");
   
  -		a.setProductGroup(pg);
  -		broker.beginTransaction();
  -		broker.store(a);
  -		broker.commitTransaction();
  +        a.setProductGroup(pg);
  +        broker.beginTransaction();
  +        broker.store(a);
  +        broker.commitTransaction();
           int id = pg.getGroupId().intValue();
   
  -		broker.clearCache();
  -		ArticleWithReferenceProxy ar = (ArticleWithReferenceProxy) broker.getObjectByQuery(q);
  +        broker.clearCache();
  +        ArticleWithReferenceProxy ar = (ArticleWithReferenceProxy) broker.getObjectByQuery(q);
   
  -		assertEquals(id, ar.getProductGroup().getId().intValue());
  -	}
  +        assertEquals(id, ar.getProductGroup().getId().intValue());
  +    }
   
  -	/**
  -	 * Default the transaction isolation level of a JDBC connection is
  -	 * READ-COMMITED.
  -	 * So if a proxy uses another broker instance (i.e. JDBC connecction)
  -	 * than the current one, it's possible that program blocks.
  -	 */
  -	public void testProxiesAndJDBCTransactionIsolation()
  -	{
  -		boolean commit = false;
  -		try
  -		{
  -			// Start transaction
  -			broker.beginTransaction();
  +    /**
  +     * Default the transaction isolation level of a JDBC connection is
  +     * READ-COMMITED.
  +     * So if a proxy uses another broker instance (i.e. JDBC connecction)
  +     * than the current one, it's possible that program blocks.
  +     */
  +    public void testProxiesAndJDBCTransactionIsolation()
  +    {
  +        boolean commit = false;
  +        try
  +        {
  +            // Start transaction
  +            broker.beginTransaction();
   
  -			// Create productgroup
  +            // Create productgroup
               ProductGroupWithCollectionProxy pg = new ProductGroupWithCollectionProxy();
  -			pg.setGroupName("TESTPRODUCTGROUP");
  -			broker.store(pg);
  +            pg.setGroupName("TESTPRODUCTGROUP");
  +            broker.store(pg);
   
  -			// Create 2 articles for this productgroup
  -			for (int j = 1; j <= 2; j++)
  -			{
  -				Article ar = new Article();
  -				ar.setArticleName("ARTICLE " + j);
  -				ar.setProductGroup(pg);
  -				broker.store(ar);
  -			}
  -
  -			// Reload the productgroup
  -			broker.clearCache();
  -			pg = (ProductGroupWithCollectionProxy) broker.getObjectByQuery(QueryFactory.newQuery(pg));
  -			assertTrue(pg != null);
  -
  -			// Try to load the articles
  -			// The proxy is using another broker instance (i.e. JDBC cconnection).
  -			// Default the JDBC transaction isolationlevel is READ_COMMITTED.
  -			// So the program will wait until the inserted articles are committed.
  -			Collection articles = pg.getAllArticlesInGroup();
  -			assertEquals(2, articles.size());
  -
  -			// Commit
  -			broker.commitTransaction();
  -			commit = true;
  -		}
  -		finally
  -		{
  -			if (!commit)
  -				broker.abortTransaction();
  -		}
  -	}
  +            // Create 2 articles for this productgroup
  +            for(int j = 1; j <= 2; j++)
  +            {
  +                Article ar = new Article();
  +                ar.setArticleName("ARTICLE " + j);
  +                ar.setProductGroup(pg);
  +                broker.store(ar);
  +            }
  +
  +            // Reload the productgroup
  +            broker.clearCache();
  +            pg = (ProductGroupWithCollectionProxy) broker.getObjectByQuery(QueryFactory.newQuery(pg));
  +            assertTrue(pg != null);
  +
  +            // Try to load the articles
  +            // The proxy is using another broker instance (i.e. JDBC cconnection).
  +            // Default the JDBC transaction isolationlevel is READ_COMMITTED.
  +            // So the program will wait until the inserted articles are committed.
  +            Collection articles = pg.getAllArticlesInGroup();
  +            assertEquals(2, articles.size());
  +
  +            // Commit
  +            broker.commitTransaction();
  +            commit = true;
  +        }
  +        finally
  +        {
  +            if(!commit)
  +                broker.abortTransaction();
  +        }
  +    }
   
   }
  
  
  

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