thanks for the detailed response didier.

the layout of the entities is fine, as transactions are not used in
the application itself, but as a artefact for unit testing.
i only placed the unit tests into a transaction for the purposes of
flushing the to entityManager.

since txn dont work for multiple entities how can i structure my unit
tests to ensure that the entity manager can perform a query on
populated data?

ie.

@Test
public void mytest(){

//populate ds with data... some how ??

Query query = em.createNamedQuery(PositionUser.FIND_FRIENDS)
List resultList = query.getResultList();
assertEquals( 2, resultList.size() );

}


thanks

-lp
On Nov 10, 8:44 pm, Didier Durand <durand.did...@gmail.com> wrote:
> Hi,
>
> Entities that you persist in the datastore are grouped in so called
> entity groups for reason of scalability and transactionality
>
> That means that the ds groups your entities on various data servers
> according to their keys: this mechanism is not transparent -> it
> generates the exception that you encounter when you touch entities
> belonging to more than 1 group in a single transaction.
>
> This mechanism is specific to GAE: it means that it is not transparent
> when you migrate the source code an already existing JPA app. You may
> have to rethink your data architecture and modify code accordingly.
>
> You should read the dev docs and articles:
>
> 1)http://code.google.com/appengine/docs/python/datastore/keysandentityg...
>
> 2)http://code.google.com/appengine/docs/java/datastore/transactions.html
>
> 3)http://blog.dantup.com/2010/01/app-engine-entity-groups-contention-an...
>
> 4)http://hoangle.info/2010/08/01/datastore-in-google-app-engine-entity-...
>
> hope it helps
>
> On Nov 10, 10:37 am, lp <lucio.picc...@gmail.com> wrote:
>
> > hi all,
>
> > i have been attempting to convert my existing JPA code over to GAE.
>
> > All is working so far except for the unit tests.
>
> > i read
> > code.google.com/appengine/docs/java/tools/localunittesting.html
>
> > but it doesnt describe how to get an entityManager involved in usefull
> > unit tests.
>
> > so this is my test. please advise how to achieve the functionality in
> > this test.
>
> > @Test
> > public void findFriendsSimple() {
>
> > PositionUser user1 = new PositionUser();
> > user1.setFirstName("john");
> > user1.setLastName("smith");
>
> > PositionUser user2 = new PositionUser();
> > user2.setFirstName("mary");
> > user2.setLastName("smith");
>
> > PositionUser user3 = new PositionUser();
> > user3.setFirstName("barney");
> > user3.setLastName("smith");
>
> > em.persist(user2);
> > em.persist(user3);
> > //em.flush(); <--- can use flush for non transaction test
>
> > user1.getFriends().add(user2.getKey());
> > user1.getFriends().add(user3.getKey());
>
> > em.persist(user1);
> > //em.flush(); <--- can use flush for non transaction test
>
> > Query query = em.createNamedQuery(PositionUser.FIND_FRIENDS);
> > query.setParameter("userKey", user1.getKey());
> > List resultList = query.getResultList();
> > assertEquals( 2, resultList.size() );
>
> > }
>
> > the assert is triggered
> > java.lang.AssertionError: expected:<2> but was:<0>
>
> > this is because the entitymanager wont detect the persisted entities
> > that arent in a transaction.
>
> > ok no problem, i will add transactions.
>
> > But when i do it complains that i am adding multiple groups in a single
> > transaction.
>
> > So besides the simple gae sample unit test, how are others writting
> > useful unit tests in gae?
>
> > any help is most appreciated
>
> > -lp

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to