Return-Path: Delivered-To: apmail-db-ojb-dev-archive@www.apache.org Received: (qmail 76709 invoked from network); 4 Oct 2006 11:14:46 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 4 Oct 2006 11:14:46 -0000 Received: (qmail 89946 invoked by uid 500); 4 Oct 2006 11:14:46 -0000 Delivered-To: apmail-db-ojb-dev-archive@db.apache.org Received: (qmail 89803 invoked by uid 500); 4 Oct 2006 11:14:46 -0000 Mailing-List: contact ojb-dev-help@db.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Help: List-Post: List-Id: "OJB Developers List" Reply-To: "OJB Developers List" Delivered-To: mailing list ojb-dev@db.apache.org Received: (qmail 89792 invoked by uid 500); 4 Oct 2006 11:14:46 -0000 Received: (qmail 89789 invoked by uid 99); 4 Oct 2006 11:14:46 -0000 Received: from idunn.apache.osuosl.org (HELO idunn.apache.osuosl.org) (140.211.166.84) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 04 Oct 2006 04:14:46 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=5.0 tests=ALL_TRUSTED,NO_REAL_NAME Received: from [140.211.166.113] ([140.211.166.113:58937] helo=eris.apache.org) by idunn.apache.osuosl.org (ecelerity 2.1.1.8 r(12930)) with ESMTP id 58/44-00170-A8793254 for ; Wed, 04 Oct 2006 04:14:20 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id EA6561A981C; Wed, 4 Oct 2006 04:13:41 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r452834 - /db/ojb/trunk/src/test/org/apache/ojb/broker/M2NTest.java Date: Wed, 04 Oct 2006 11:13:41 -0000 To: ojb-commits@db.apache.org From: arminw@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20061004111341.EA6561A981C@eris.apache.org> X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: arminw Date: Wed Oct 4 04:13:41 2006 New Revision: 452834 URL: http://svn.apache.org/viewvc?view=rev&rev=452834 Log: add test, use IdentityFactory Modified: db/ojb/trunk/src/test/org/apache/ojb/broker/M2NTest.java Modified: db/ojb/trunk/src/test/org/apache/ojb/broker/M2NTest.java URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/broker/M2NTest.java?view=diff&rev=452834&r1=452833&r2=452834 ============================================================================== --- db/ojb/trunk/src/test/org/apache/ojb/broker/M2NTest.java (original) +++ db/ojb/trunk/src/test/org/apache/ojb/broker/M2NTest.java Wed Oct 4 04:13:41 2006 @@ -6,11 +6,13 @@ import java.util.List; import org.apache.commons.lang.ClassUtils; +import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.time.StopWatch; import org.apache.ojb.broker.core.proxy.CollectionProxy; +import org.apache.ojb.broker.core.proxy.ProxyFactory; import org.apache.ojb.broker.metadata.CollectionDescriptor; import org.apache.ojb.broker.metadata.ObjectReferenceDescriptor; import org.apache.ojb.broker.query.Criteria; @@ -27,7 +29,6 @@ * are NOT recommended in multithreaded environments, because they are global * and each thread will be affected. * - * @author Armin Waibel * @version $Id$ */ public class M2NTest extends PBTestCase @@ -205,9 +206,13 @@ for (int i = 0;i < moviesArray.length; i++) { - CollectionProxy proxy = (CollectionProxy) moviesArray[i].getActors(); - proxy.load(); // materialize the proxy - assertTrue(proxy.isLoaded()); + ProxyFactory helper = broker.getProxyFactory(); + List result = moviesArray[i].getActors(); + assertTrue(helper.isCollectionProxy(result)); + // when prefetching for proxy is used the second object has an already materialized proxy + if(i==0) assertFalse(helper.getCollectionProxy(result).isLoaded()); + result.get(0); + assertTrue(helper.getCollectionProxy(result).isLoaded()); } assertEquals(10, moviesArray[0].getActors().size()); @@ -1131,7 +1136,7 @@ Collection resultActor = broker.getCollectionByQuery(queryActor); assertEquals(1, resultActor.size()); - Query queryRole = queryRole(actor, null); + Query queryRole = queryRole(actor, (Movie) null); Collection resultRole = broker.getCollectionByQuery(queryRole); assertEquals(3, resultRole.size()); @@ -1178,7 +1183,6 @@ all in all we expect 3 movie, 6 actor, 3 role entries after first store. */ - broker.beginTransaction(); broker.store(movie); broker.store(a_1); @@ -1207,16 +1211,14 @@ assertEquals(3, readMovie.getActors().size()); assertEquals(0, readMovie.getActors2().size()); - /* - we add 2 existing actor an movie object, thus we expect - 3 movie, 6 actor, 5 role entries after store. - And next lookup of movie we expect 5 dependend actor objects - */ + broker.beginTransaction(); + // delete Actor + Object removeActor = movie.getActors().remove(0); + //we add 2 existing actor to the movie object movie.getActors().add(a_1); movie.getActors().add(a_2); // add new actor object movie.getActors().add(a_4); - broker.beginTransaction(); broker.store(movie); broker.commitTransaction(); @@ -1232,13 +1234,13 @@ queryRole = queryRole(null, movie); resultRole = broker.getCollectionByQuery(queryRole); - assertEquals(6, resultRole.size()); + assertEquals(5, resultRole.size()); broker.clearCache(); oid = broker.serviceIdentity().buildIdentity(movie); readMovie = (Movie) broker.getObjectByIdentity(oid); assertNotNull(readMovie); - assertEquals(6, readMovie.getActors().size()); + assertEquals(5, readMovie.getActors().size()); /* on delete we expect that all entries are deleted except the single @@ -1246,6 +1248,140 @@ */ broker.beginTransaction(); broker.delete(movie); + // the previous unlinked Actor instance + broker.delete(removeActor); + broker.commitTransaction(); + + broker.clearCache(); + resultMovie = broker.getCollectionByQuery(queryMovie); + assertEquals(0, resultMovie.size()); + + resultActor = broker.getCollectionByQuery(queryActor); + assertEquals(1, resultActor.size()); + + resultRole = broker.getCollectionByQuery(queryRole); + assertEquals(0, resultRole.size()); + } + + public void testAddNewEntriesArray() + { + ojbChangeReferenceSetting(MovieWithArrayImpl.class, "actors", true, OBJECT, OBJECT, false); + ojbChangeReferenceSetting(ActorWithArray.class, "movies", true, OBJECT, OBJECT, false); + doTestAddNewEntriesArray(); + } + + public void testAddNewEntriesArrayProxyEnabled() + { + ojbChangeReferenceSetting(MovieWithArrayImpl.class, "actors", true, OBJECT, OBJECT, true); + ojbChangeReferenceSetting(ActorWithArray.class, "movies", true, OBJECT, OBJECT, true); + doTestAddNewEntriesArray(); + } + + public void doTestAddNewEntriesArray() + { + ojbChangeReferenceSetting(MovieWithArrayImpl.class, "actors", true, OBJECT, OBJECT, true); + ojbChangeReferenceSetting(MovieImpl.class, "actors2", true, OBJECT, OBJECT, true); + // default proxy does not work for user defined collection + ojbChangeReferenceSetting(Actor.class, "movies", true, OBJECT, OBJECT, false); + + String postfix = "doTestAddNewEntriesArray_" + System.currentTimeMillis(); + + /* + Returns 1 movie object with 3 actor objects and one actor + */ + MovieWithArray movie = buildMovieWithActorsArray(postfix, 3); + ActorWithArray a_1 = new ActorWithArray("testAddNewEntries_"+postfix); + ActorWithArray a_2 = new ActorWithArray("testAddNewEntries_"+postfix); + ActorWithArray a_3 = new ActorWithArray("testAddNewEntries_"+postfix); + /* + all in all we expect 1 movie, 5 actor, 3 role entries after first + store. + */ + broker.beginTransaction(); + broker.store(movie); + broker.store(a_1); + broker.store(a_2); + broker.commitTransaction(); + + broker.clearCache(); + + Query queryMovie = queryMovieWithArray(postfix); + Collection resultMovie = broker.getCollectionByQuery(queryMovie); + assertEquals(1, resultMovie.size()); + + Query queryActor = queryActorWithArray(postfix); + Collection resultActor = broker.getCollectionByQuery(queryActor); + assertEquals(5, resultActor.size()); + + Query queryRole = queryRole(null, movie); + Collection resultRole = broker.getCollectionByQuery(queryRole); + assertEquals(3, resultRole.size()); + + broker.clearCache(); + Identity oid = broker.serviceIdentity().buildIdentity(movie); + MovieWithArray readMovie = (MovieWithArray) broker.getObjectByIdentity(oid); + assertNotNull(readMovie); + assertEquals(3, readMovie.getActors().length); + ActorWithArray[] actors = readMovie.getActors(); + for(int i = 0; i < actors.length; i++) + { + ActorWithArray actor = actors[i]; + assertNotNull(actor.getMovies()); + assertEquals(1, actor.getMovies().length); + MovieWithArray result = actor.getMovies()[0]; + assertEquals(readMovie.getActors().length, result.getActors().length); + } + + + broker.beginTransaction(); + actors = movie.getActors(); + ActorWithArray deletedActor = actors[0]; + // remove one actor + actors = (ActorWithArray[]) ArrayUtils.remove(actors, 0); + // add one new and one existing Actor + a_2.addMovie(movie); + a_3.addMovie(movie); + actors = (ActorWithArray[]) ArrayUtils.add(actors, a_2); + actors = (ActorWithArray[]) ArrayUtils.add(actors, a_3); + movie.setActors(actors); + + broker.store(movie); + broker.commitTransaction(); + + broker.clearCache(); + + queryMovie = queryMovieWithArray(postfix); + resultMovie = broker.getCollectionByQuery(queryMovie); + assertEquals(1, resultMovie.size()); + + queryActor = queryActorWithArray(postfix); + resultActor = broker.getCollectionByQuery(queryActor); + assertEquals(6, resultActor.size()); + + queryRole = queryRole(null, movie); + resultRole = broker.getCollectionByQuery(queryRole); + assertEquals(4, resultRole.size()); + + //broker.clearCache(); + oid = broker.serviceIdentity().buildIdentity(deletedActor); + ActorWithArray result = (ActorWithArray) broker.getObjectByIdentity(oid); + assertNotNull(result); + assertTrue(result.getMovies() == null || result.getMovies().length == 0); + + //broker.clearCache(); + oid = broker.serviceIdentity().buildIdentity(movie); + readMovie = (MovieWithArray) broker.getObjectByIdentity(oid); + assertNotNull(readMovie); + assertEquals(4, readMovie.getActors().length); + + /* + on delete we expect that all entries are deleted except the single + actor which have no references to any movie object + */ + broker.beginTransaction(); + broker.delete(movie); + // the previous unlinked Actor instance + broker.delete(deletedActor); broker.commitTransaction(); broker.clearCache(); @@ -1269,6 +1405,13 @@ return QueryFactory.newQuery(Movie.class, c); } + QueryByCriteria queryMovieWithArray(String postfix) + { + Criteria c = new Criteria(); + c.addLike("idStr", "%" + postfix + "%"); + return QueryFactory.newQuery(MovieWithArray.class, c); + } + Query queryActor(String postfix) { Criteria c = new Criteria(); @@ -1276,6 +1419,13 @@ return QueryFactory.newQuery(Actor.class, c); } + Query queryActorWithArray(String postfix) + { + Criteria c = new Criteria(); + c.addLike("name", "%" + postfix + "%"); + return QueryFactory.newQuery(ActorWithArray.class, c); + } + Query queryRole(Actor actor, Movie movie) { Criteria c = new Criteria(); @@ -1295,6 +1445,25 @@ return QueryFactory.newQuery(Role.class, c); } + Query queryRole(ActorWithArray actor, MovieWithArray movie) + { + Criteria c = new Criteria(); + if(actor != null) c.addEqualTo("actorId", actor.getId()); + if(movie != null && actor != null) + { + Criteria c2 = new Criteria(); + c2.addEqualTo("movieIntId", movie.getIdInt()); + c2.addEqualTo("movieStrId", movie.getIdStr()); + c.addOrCriteria(c2); + } + else if(movie != null) + { + c.addEqualTo("movieIntId", movie.getIdInt()); + c.addEqualTo("movieStrId", movie.getIdStr()); + } + return QueryFactory.newQuery(Role.class, c); + } + Query roleQueryActorOrMovieMatch(Actor actor, Movie movie) { Criteria c_1 = new Criteria(); @@ -1377,11 +1546,10 @@ { MovieWithArray m = new MovieWithArrayImpl(postfixId, "Movie with "+ actorCount+" actors_" + postfixId, "none"); - Actor[] actors = new Actor[actorCount]; + ActorWithArray[] actors = new ActorWithArray[actorCount]; for(int i = 0; i < actorCount; i++) { - Actor a = new Actor("A bad actor_" + postfixId); - actors[i] = a; + actors[i] = new ActorWithArray("A array actor_" + postfixId); } m.setActors(actors); return m; @@ -1598,14 +1766,88 @@ //=================================================================== // inner class //=================================================================== + public static class ActorWithArray + { + private Integer id; + private Integer id2; + private String name; + private MovieWithArray[] movies; + + public ActorWithArray() + { + } + + public ActorWithArray(String name) + { + this.name = name; + } + + public MovieWithArray[] getMovies() + { + return movies; + } + + public void setMovies(MovieWithArray[] movies) + { + this.movies = movies; + } + + public void addMovie(MovieWithArray m) + { + if(movies == null) + { + movies = new MovieWithArray[]{}; + } + movies = (MovieWithArray[]) ArrayUtils.add(movies, m); + } + + public Integer getId() + { + return id; + } + + public void setId(Integer id) + { + this.id = id; + } + + public Integer getId2() + { + return id2; + } + + public void setId2(Integer id2) + { + this.id2 = id2; + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String toString() + { + return ToStringBuilder.reflectionToString(this); + } + } + + //=================================================================== + // inner class + //=================================================================== public static interface Movie { - public Collection getActors(); - public void setActors(Collection actors); + public List getActors(); + public void setActors(List actors); public void addActor(Actor a); - public Collection getActors2(); - public void setActors2(Collection actors); + public List getActors2(); + public void setActors2(List actors); public List getProducers(); public void setProducers(List producers); @@ -1632,9 +1874,9 @@ //=================================================================== public static interface MovieWithArray { - public Actor[] getActors(); + public ActorWithArray[] getActors(); - public void setActors(Actor[] actors); + public void setActors(ActorWithArray[] actors); public Integer getIdInt2(); public Integer getIdInt(); @@ -1666,8 +1908,8 @@ private String title; private String description; - private Collection actors; - private Collection actors2; + private List actors; + private List actors2; private List producers; public MovieImpl() @@ -1704,12 +1946,12 @@ } } - public Collection getActors() + public List getActors() { return actors; } - public void setActors(Collection actors) + public void setActors(List actors) { this.actors = actors; } @@ -1723,12 +1965,12 @@ actors.add(a); } - public Collection getActors2() + public List getActors2() { return actors2; } - public void setActors2(Collection actors) + public void setActors2(List actors) { this.actors2 = actors; } @@ -1812,7 +2054,7 @@ private String idStr; private String title; private String description; - private Actor[] actors; + private ActorWithArray[] actors; public MovieWithArrayImpl() { @@ -1825,12 +2067,12 @@ this.description = description; } - public Actor[] getActors() + public ActorWithArray[] getActors() { return actors; } - public void setActors(Actor[] actors) + public void setActors(ActorWithArray[] actors) { this.actors = actors; } --------------------------------------------------------------------- To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org For additional commands, e-mail: ojb-dev-help@db.apache.org