I found something weird in the log:
INFO: Performing appengine-specific metadata validation for
com.testgae.xp.domain.B
9 déc. 2009 20:59:57 org.datanucleus.store.appengine.MetaDataValidator
warn
ATTENTION: Meta-data warning for com.testgae.xp.domain.B._cUpdates:
The datastore does not support joins and therefore cannot honor
requests to place child objects in the default fetch group. The field
will be fetched lazily on first access. ...
ATTENTION: Meta-data warning for com.testgae.xp.domain.B._parent: The
datastore does not support joins and therefore cannot honor requests
to place child objects in the default fetch group. The field will be
fetched lazily on first access. ...
3- For problem 3, It looks like it's written but not loaded. getting
the persistenceManager only once does not change anything. On the
following link is an extract of my Log when I persist my entity ("A a2
= _aDao.update(a); ") in testBug3:
http://tinypaste.com/c2590
Here is the following line in testBug3 when I try to get load the
object ("_aDao.loadByKey(a.getKey());"):
http://tinypaste.com/9c850
1- Here is the full exception I get for problem 1 (and this
http://tinypaste.com/98f5a is the log when I persist my entity):
org.springframework.orm.jdo.JdoSystemException: can't update the same
entity twice in a transaction or operation; nested exception is
javax.jdo.JDOException: can't update the same entity twice in a
transaction or operation
NestedThrowables:
java.lang.IllegalArgumentException: can't update the same entity twice
in a transaction or operation
at
org.springframework.orm.jdo.PersistenceManagerFactoryUtils.convertJdoAccessException
(PersistenceManagerFactoryUtils.java:247)
at org.springframework.orm.jdo.DefaultJdoDialect.translateException
(DefaultJdoDialect.java:230)
at
org.springframework.orm.jdo.JdoTransactionManager.convertJdoAccessException
(JdoTransactionManager.java:503)
at org.springframework.orm.jdo.JdoTransactionManager.doCommit
(JdoTransactionManager.java:427)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit
(AbstractPlatformTransactionManager.java:732)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit
(AbstractPlatformTransactionManager.java:701)
at
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning
(TransactionAspectSupport.java:321)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke
(TransactionInterceptor.java:116)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed
(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke
(JdkDynamicAopProxy.java:204)
at $Proxy9.update(Unknown Source)
at TestDao.testBug(TestDao.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at org.springframework.test.ConditionalTestCase.runBare
(ConditionalTestCase.java:69)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at
org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run
(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run
(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests
(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests
(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run
(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main
(RemoteTestRunner.java:197)
Caused by: javax.jdo.JDOException: can't update the same entity twice
in a transaction or operation
NestedThrowables:
java.lang.IllegalArgumentException: can't update the same entity twice
in a transaction or operation
at
org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException
(NucleusJDOHelper.java:419)
at org.datanucleus.jdo.JDOTransaction.commit(JDOTransaction.java:132)
at org.springframework.orm.jdo.JdoTransactionManager.doCommit
(JdoTransactionManager.java:423)
... 27 more
Caused by: java.lang.IllegalArgumentException: can't update the same
entity twice in a transaction or operation
at
com.google.appengine.api.datastore.DatastoreApiHelper.translateError
(DatastoreApiHelper.java:33)
at com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall
(DatastoreApiHelper.java:60)
at com.google.appengine.api.datastore.DatastoreServiceImpl$2.run
(DatastoreServiceImpl.java:173)
at
com.google.appengine.api.datastore.TransactionRunner.runInTransaction
(TransactionRunner.java:30)
at com.google.appengine.api.datastore.DatastoreServiceImpl.put
(DatastoreServiceImpl.java:161)
at com.google.appengine.api.datastore.DatastoreServiceImpl.put
(DatastoreServiceImpl.java:141)
at com.google.appengine.api.datastore.DatastoreServiceImpl.put
(DatastoreServiceImpl.java:137)
at
org.datanucleus.store.appengine.RuntimeExceptionWrappingDatastoreService.put
(RuntimeExceptionWrappingDatastoreService.java:105)
at org.datanucleus.store.appengine.DatastorePersistenceHandler.put
(DatastorePersistenceHandler.java:172)
at org.datanucleus.store.appengine.DatastorePersistenceHandler.put
(DatastorePersistenceHandler.java:124)
at org.datanucleus.store.appengine.DatastorePersistenceHandler.put
(DatastorePersistenceHandler.java:119)
at
org.datanucleus.store.appengine.DatastorePersistenceHandler.updateObject
(DatastorePersistenceHandler.java:492)
at org.datanucleus.state.JDOStateManagerImpl.flush
(JDOStateManagerImpl.java:4576)
at org.datanucleus.ObjectManagerImpl.flushInternal
(ObjectManagerImpl.java:2814)
at org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl.java:
2754)
at org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:
2893)
at org.datanucleus.TransactionImpl.internalPreCommit
(TransactionImpl.java:369)
at org.datanucleus.TransactionImpl.commit(TransactionImpl.java:256)
at org.datanucleus.jdo.JDOTransaction.commit(JDOTransaction.java:83)
... 28 more
Except this story of join (but B should be a child entity?), I don't
see where it can come from... I don't remember if I said it anywhere
but I tried with bidirectional links everywhere instead of
unidirectional (A&B, B&C, etc.) and it does not work neither.
Thanks a lot for your help
On 9 déc, 15:04, datanucleus <[email protected]> wrote:
> > 1- The transaction is really a JDO/datastore exception encapsulated by
> > Spring (as I am using the transactional components of Spring). To be
> > sure, I tried to execute these tests with manual transactions instead
> > of not Spring and the result was the same (except that it was not a
> > Spring exception but the message was the same).
>
> Yes but the exception means nothing to me. The stack trace maybe
> would ;-)
>
> > 3- You're right my comment is a bit imprecise:
>
> > Sorry for the confusions or imprecisions :D. My problem is when I load
> > an object A which contains a list of B. Although one B was added to A,
> > it does not get loaded when I load A. But it is in the object returned
> > by makePersistent within my DAO:
>
> So look in the log when you want to load some object, and see what
> happens.
--
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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine-java?hl=en.