[appengine-java] Re: Bulk update throws exception

2009-09-16 Thread Jason (Google)
Hi Anita. I don't understand your data model -- if you are modeling the
relationship between entities of type A and entities of type B using
entities of type C, why do entities of type A have direct references to
entities of type B and vice versa?

Either way, the reason you're getting this error is because you're
inadvertently attempting to set an owned relationship between entities of
types A and B under type C, and doing this tries to modify the keys of types
A and B after they've been persisted, which you can't do. Try changing the
following:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class TableC implements Serializable{
 @PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 private Key id;

 @Persistent
 private Key tablea;

 @Persistent
 private Key tableb;
 .

This should just store a reference to the entity's key (unowned
relationship) rather than trying to modify the keys of the A and B entities.

- Jason

On Tue, Sep 15, 2009 at 1:34 AM, Anita an...@ensarm.com wrote:


 Hi Jason,

 I could solve my previous problem. But now i am facing some other
 problem with many to many relationship tables.

 My schema looks as follows:

  TableA --- TableC - TableB
 which means there is many to many relationship between TableA 
 TableB. So i want TableA and TableB primary keys  into TableC as
 foreign key.

 TableA class looks as follows:

 @PersistenceCapable(identityType = IdentityType.APPLICATION)
 public class TableA implements Serializable{
  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private Key id;
   ..
  @Persistent(defaultFetchGroup=true)
  private SetKey tableB = new HashSetKey();
  ..
  (some getter  setter)

 TableB class looks as follows:

 @PersistenceCapable(identityType = IdentityType.APPLICATION)
 public class TableB implements Serializable{
  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private Key id;
   ..
  @Persistent(defaultFetchGroup=true)
  private SetKey tableA = new HashSetKey();
  ..
  (some getter  setter)

 TableC class looks as follows:
 @PersistenceCapable(identityType = IdentityType.APPLICATION)
 public class TableC implements Serializable{
  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private Key id;

  @Persistent
  private TableA tablea;

  @Persistent
  private TableB tableb;
  .
  (some getter  setter)

  While adding data into TableC i use following code:

  Query query1 = pm.newQuery(TableA.class);
  ListTableA results1 = (ListTableA) query1.execute();
  TableA tableA= results1.get(0);

 Query query2 = pm.newQuery(TableB.class);
 ListTableB results2 = (ListTableB) query2.execute();
 TableB tableB= results2.get(0);

 tableA.add(tableB);
 tableB.add(tableA);

 At this point TableA and TableB values are getting update but while
 entering data into TableC the problem comes.
 TableC tableC = new TableC();
 tableC.setTableA(tableA);
 tableC.setTableB(tableB);
 pm.makePersistent(tableC);  -- at this point it gives me A parent
 cannot be established or changed once an object has been persisted.

 Can you please tell me were i am going wrong?

 Thanks
 Anita

 On Sep 15, 3:54 am, Jason (Google) apija...@google.com wrote:
  From the error message, it sounds like the parent isn't getting set
  correctly. You'll need to share some of your code in order for me to help
  you further -- what does your Release class look like and how are you
  persisting it?
 
  - Jason
 
  On Sat, Sep 12, 2009 at 4:36 AM, Anita an...@ensarm.com wrote:
 
   Hi Jason,
 
   Our schema looks as follows:
ProductType 1-M Product 1M Release
 
   Data is inserting into Release table. But while fetching data from
   release table i am getting following exception:
 
   Field com.ensarm.server.domain.Release.products should be able to
   provide a reference to its parent but the entity does not have a
   parent.  Did you perhaps try to establish an instance of
   com.ensarm.server.domain.Release as the child of an instance of
   com.ensarm.server.domain.Products after the child had already been
   persisted?
   org.datanucleus.exceptions.NucleusUserException: Field
   com.ensarm.server.domain.Release.products should be able to provide a
   reference to its parent but the entity does not have a parent.  Did
   you perhaps try to establish an instance of
   com.ensarm.server.domain.Release as the child of an instance of
   com.ensarm.server.domain.Products after the child had already been
   persisted?
  at
  
 org.datanucleus.store.appengine.DatastoreRelationFieldManager.lookupParent
   (DatastoreRelationFieldManager.java:302)
  at
 
  
 org.datanucleus.store.appengine.DatastoreRelationFieldManager.fetchRelationField
   (DatastoreRelationFieldManager.java:289)
  at
   org.datanucleus.store.appengine.DatastoreFieldManager.fetchObjectField
   (DatastoreFieldManager.java:271)
  at
 

[appengine-java] Re: Bulk update throws exception

2009-09-14 Thread Jason (Google)
From the error message, it sounds like the parent isn't getting set
correctly. You'll need to share some of your code in order for me to help
you further -- what does your Release class look like and how are you
persisting it?

- Jason

On Sat, Sep 12, 2009 at 4:36 AM, Anita an...@ensarm.com wrote:


 Hi Jason,

 Our schema looks as follows:
  ProductType 1-M Product 1M Release

 Data is inserting into Release table. But while fetching data from
 release table i am getting following exception:

 Field com.ensarm.server.domain.Release.products should be able to
 provide a reference to its parent but the entity does not have a
 parent.  Did you perhaps try to establish an instance of
 com.ensarm.server.domain.Release as the child of an instance of
 com.ensarm.server.domain.Products after the child had already been
 persisted?
 org.datanucleus.exceptions.NucleusUserException: Field
 com.ensarm.server.domain.Release.products should be able to provide a
 reference to its parent but the entity does not have a parent.  Did
 you perhaps try to establish an instance of
 com.ensarm.server.domain.Release as the child of an instance of
 com.ensarm.server.domain.Products after the child had already been
 persisted?
at
 org.datanucleus.store.appengine.DatastoreRelationFieldManager.lookupParent
 (DatastoreRelationFieldManager.java:302)
at

 org.datanucleus.store.appengine.DatastoreRelationFieldManager.fetchRelationField
 (DatastoreRelationFieldManager.java:289)
at
 org.datanucleus.store.appengine.DatastoreFieldManager.fetchObjectField
 (DatastoreFieldManager.java:271)
at org.datanucleus.state.AbstractStateManager.replacingObjectField
 (AbstractStateManager.java:1197)
at com.ensarm.server.domain.Release.jdoReplaceField(Release.java)
at com.ensarm.server.domain.Release.jdoReplaceFields(Release.java)
at org.datanucleus.state.JDOStateManagerImpl.replaceFields
 (JDOStateManagerImpl.java:2772)
at org.datanucleus.state.JDOStateManagerImpl.replaceFields
 (JDOStateManagerImpl.java:2791)
at
 org.datanucleus.store.appengine.DatastorePersistenceHandler.fetchObject
 (DatastorePersistenceHandler.java:349)
at org.datanucleus.store.appengine.query.DatastoreQuery.entityToPojo
 (DatastoreQuery.java:384)
at org.datanucleus.store.appengine.query.DatastoreQuery.entityToPojo
 (DatastoreQuery.java:345)
at org.datanucleus.store.appengine.query.DatastoreQuery.access$700
 (DatastoreQuery.java:96)
at org.datanucleus.store.appengine.query.DatastoreQuery$5.apply
 (DatastoreQuery.java:454)
at org.datanucleus.store.appengine.query.DatastoreQuery$5.apply
 (DatastoreQuery.java:453)
at
 org.datanucleus.store.appengine.query.StreamingQueryResult.resolveNext
 (StreamingQueryResult.java:137)
at org.datanucleus.store.appengine.query.StreamingQueryResult
 $1.computeNext(StreamingQueryResult.java:163)
at
 org.datanucleus.store.appengine.query.AbstractIterator.tryToComputeNext
 (AbstractIterator.java:132)
at org.datanucleus.store.appengine.query.AbstractIterator.hasNext
 (AbstractIterator.java:127)
at org.datanucleus.store.appengine.query.StreamingQueryResult
 $AbstractListIterator.hasNext(StreamingQueryResult.java:229)
at com.ensarm.server.servlet.GetData.getRelease(GetData.java:87)
at com.ensarm.server.servlet.GetData.doGet(GetData.java:32)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at
 org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
 487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
 (ServletHandler.java:1093)
 at
 com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter
 (TransactionCleanupFilter.java:43)
 at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
 (ServletHandler.java:1084)
at com.google.appengine.tools.development.StaticFileFilter.doFilter
 (StaticFileFilter.java:124)
 at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
 (ServletHandler.java:1084)
 at org.mortbay.jetty.servlet.ServletHandler.handle
 (ServletHandler.java:360)
at org.mortbay.jetty.security.SecurityHandler.handle
 (SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle
 (SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle
 (ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
 405)
at
 com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle
 (DevAppEngineWebAppContext.java:54)
 at org.mortbay.jetty.handler.HandlerWrapper.handle
 (HandlerWrapper.java:139)
at com.google.appengine.tools.development.JettyContainerService
 $ApiProxyHandler.handle(JettyContainerService.java:313)
 at 

[appengine-java] Re: Bulk update throws exception

2009-09-14 Thread Larry Cable

nope you are right ... it's not useless ... apologies

I *think* the problem is in mapping (conceptually) from a mental RDBMS
model
to a GAE DS model ... where entity group might be mistaken for
table ...

:)

On Aug 26, 3:02 pm, Jason (Google) apija...@google.com wrote:
 Why do you indicate that the documentation is useless? The links I included
 above state this quite clearly: two entities will be in separate entity
 groups by default, even if they're the same kind. Entity groups DO NOT
 collect entities of the same kind. If you need transaction support, you'll
 need to explicitly set one entity as the parent of the other, which
 basically creates a hierarchy (tree) of entities -- this is an entity group.
 In JDO/JPA, you do this using owned relationships which is covered in my
 second link above.
 - Jason



 On Tue, Aug 25, 2009 at 2:33 PM, Larry Cable larry.ca...@gmail.com wrote:

  I have exactly the same problem, I instantiate a number of @Entity
  objects
  (all of the same type) persist them, and flush them in the context of
  the same
  transaction.

  Since they are all of the same type, and their are no relationships
  (although there is
  an @Embedded class/field) I would imagine that they are all modelled
  as being in the
  same entity group .. but apparently not.

  The documentation is basically useless at this point ...

  On Aug 15, 1:09 pm, Foreigner foreigne...@gmail.com wrote:
   While trying to do a bulk update on my entities using JPA I get the
   exception bellow.
   I understand that you can't do a bulk update on different entity groups
  in
   the same transaction but I guess I don't quite understand what an entity
   group is and how I go about making all entities part of the same group I
   want.

   Thanks for the help.

   fbr

   Illegal argument
   org.datanucleus.exceptions.NucleusUserException: Illegal argument
           at
  org.datanucleus.store.appengine.DatastoreExceptionTranslator.wrapIllegalArg­­umentException(DatastoreExceptionTranslator.java:42)
           at
  org.datanucleus.store.appengine.RuntimeExceptionWrappingDatastoreService.pu­­t(RuntimeExceptionWrappingDatastoreService.java:106)
           at
  org.datanucleus.store.appengine.DatastorePersistenceHandler.put(DatastorePe­­rsistenceHandler.java:125)
           at
  org.datanucleus.store.appengine.DatastorePersistenceHandler.put(DatastorePe­­rsistenceHandler.java:94)
           at
  org.datanucleus.store.appengine.DatastorePersistenceHandler.updateObject(Da­­tastorePersistenceHandler.java:398)
           at
  org.datanucleus.state.JDOStateManagerImpl.flush(JDOStateManagerImpl.java:44­­58)
           at
  org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:2807­­)
           at
  org.datanucleus.ObjectManagerImpl.markDirty(ObjectManagerImpl.java:2617)
           at
  org.datanucleus.state.JDOStateManagerImpl.postWriteField(JDOStateManagerImp­­l.java:4241)
           at
  org.datanucleus.state.JDOStateManagerImpl.setObjectField(JDOStateManagerImp­­l.java:2287)
           at
  com.yicook.entities.TwitterDailyTip.jdoSetlastSet(TwitterDailyTip.java)
           at
  com.yicook.entities.TwitterDailyTip.setLastSet(TwitterDailyTip.java:36)
           at
  com.yicook.control.bco.TwitterStatusSetterBCO.resetTDT(TwitterStatusSetterB­­CO.java:60)
           at
  com.yicook.control.bco.TwitterStatusSetterBCO.execute(TwitterStatusSetterBC­­O.java:40)
           at
  com.yicook.control.ApplicationController.executeControllers(ApplicationCont­­roller.java:61)
           at
  com.yicook.control.ApplicationController.dispatch(ApplicationController.jav­­a:41)
           at
  com.yicook.servlets.FrontController.doPost(FrontController.java:31)
           at
  com.yicook.servlets.FrontController.doGet(FrontController.java:25)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
           at
  org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
           at
  org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandle­­r.java:1093)
           at
  com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(Trans­­actionCleanupFilter.java:43)
           at
  org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandle­­r.java:1084)
           at
  org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
           at
  org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
           at
  org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
           at
  org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
           at
  org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
           at
  com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEn­­gineWebAppContext.java:54)
           at
  

[appengine-java] Re: Bulk update throws exception

2009-09-12 Thread Anita

Hi Jason,

Our schema looks as follows:
 ProductType 1-M Product 1M Release

Data is inserting into Release table. But while fetching data from
release table i am getting following exception:

Field com.ensarm.server.domain.Release.products should be able to
provide a reference to its parent but the entity does not have a
parent.  Did you perhaps try to establish an instance of
com.ensarm.server.domain.Release as the child of an instance of
com.ensarm.server.domain.Products after the child had already been
persisted?
org.datanucleus.exceptions.NucleusUserException: Field
com.ensarm.server.domain.Release.products should be able to provide a
reference to its parent but the entity does not have a parent.  Did
you perhaps try to establish an instance of
com.ensarm.server.domain.Release as the child of an instance of
com.ensarm.server.domain.Products after the child had already been
persisted?
at
org.datanucleus.store.appengine.DatastoreRelationFieldManager.lookupParent
(DatastoreRelationFieldManager.java:302)
at
org.datanucleus.store.appengine.DatastoreRelationFieldManager.fetchRelationField
(DatastoreRelationFieldManager.java:289)
at
org.datanucleus.store.appengine.DatastoreFieldManager.fetchObjectField
(DatastoreFieldManager.java:271)
at org.datanucleus.state.AbstractStateManager.replacingObjectField
(AbstractStateManager.java:1197)
at com.ensarm.server.domain.Release.jdoReplaceField(Release.java)
at com.ensarm.server.domain.Release.jdoReplaceFields(Release.java)
at org.datanucleus.state.JDOStateManagerImpl.replaceFields
(JDOStateManagerImpl.java:2772)
at org.datanucleus.state.JDOStateManagerImpl.replaceFields
(JDOStateManagerImpl.java:2791)
at
org.datanucleus.store.appengine.DatastorePersistenceHandler.fetchObject
(DatastorePersistenceHandler.java:349)
at org.datanucleus.store.appengine.query.DatastoreQuery.entityToPojo
(DatastoreQuery.java:384)
at org.datanucleus.store.appengine.query.DatastoreQuery.entityToPojo
(DatastoreQuery.java:345)
at org.datanucleus.store.appengine.query.DatastoreQuery.access$700
(DatastoreQuery.java:96)
at org.datanucleus.store.appengine.query.DatastoreQuery$5.apply
(DatastoreQuery.java:454)
at org.datanucleus.store.appengine.query.DatastoreQuery$5.apply
(DatastoreQuery.java:453)
at
org.datanucleus.store.appengine.query.StreamingQueryResult.resolveNext
(StreamingQueryResult.java:137)
at org.datanucleus.store.appengine.query.StreamingQueryResult
$1.computeNext(StreamingQueryResult.java:163)
at
org.datanucleus.store.appengine.query.AbstractIterator.tryToComputeNext
(AbstractIterator.java:132)
at org.datanucleus.store.appengine.query.AbstractIterator.hasNext
(AbstractIterator.java:127)
at org.datanucleus.store.appengine.query.StreamingQueryResult
$AbstractListIterator.hasNext(StreamingQueryResult.java:229)
at com.ensarm.server.servlet.GetData.getRelease(GetData.java:87)
at com.ensarm.server.servlet.GetData.doGet(GetData.java:32)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1093)
at
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter
(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
at com.google.appengine.tools.development.StaticFileFilter.doFilter
(StaticFileFilter.java:124)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
at org.mortbay.jetty.servlet.ServletHandler.handle
(ServletHandler.java:360)
at org.mortbay.jetty.security.SecurityHandler.handle
(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle
(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle
(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
405)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle
(DevAppEngineWebAppContext.java:54)
at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
at com.google.appengine.tools.development.JettyContainerService
$ApiProxyHandler.handle(JettyContainerService.java:313)
at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:313)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
506)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete
(HttpConnection.java:830)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
at 

[appengine-java] Re: Bulk update throws exception

2009-08-25 Thread Larry Cable

I have exactly the same problem, I instantiate a number of @Entity
objects
(all of the same type) persist them, and flush them in the context of
the same
transaction.

Since they are all of the same type, and their are no relationships
(although there is
an @Embedded class/field) I would imagine that they are all modelled
as being in the
same entity group .. but apparently not.

The documentation is basically useless at this point ...

On Aug 15, 1:09 pm, Foreigner foreigne...@gmail.com wrote:
 While trying to do a bulk update on my entities using JPA I get the
 exception bellow.
 I understand that you can't do a bulk update on different entity groups in
 the same transaction but I guess I don't quite understand what an entity
 group is and how I go about making all entities part of the same group I
 want.

 Thanks for the help.

 fbr

 Illegal argument
 org.datanucleus.exceptions.NucleusUserException: Illegal argument
         at 
 org.datanucleus.store.appengine.DatastoreExceptionTranslator.wrapIllegalArg­umentException(DatastoreExceptionTranslator.java:42)
         at 
 org.datanucleus.store.appengine.RuntimeExceptionWrappingDatastoreService.pu­t(RuntimeExceptionWrappingDatastoreService.java:106)
         at 
 org.datanucleus.store.appengine.DatastorePersistenceHandler.put(DatastorePe­rsistenceHandler.java:125)
         at 
 org.datanucleus.store.appengine.DatastorePersistenceHandler.put(DatastorePe­rsistenceHandler.java:94)
         at 
 org.datanucleus.store.appengine.DatastorePersistenceHandler.updateObject(Da­tastorePersistenceHandler.java:398)
         at 
 org.datanucleus.state.JDOStateManagerImpl.flush(JDOStateManagerImpl.java:44­58)
         at 
 org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:2807­)
         at 
 org.datanucleus.ObjectManagerImpl.markDirty(ObjectManagerImpl.java:2617)
         at 
 org.datanucleus.state.JDOStateManagerImpl.postWriteField(JDOStateManagerImp­l.java:4241)
         at 
 org.datanucleus.state.JDOStateManagerImpl.setObjectField(JDOStateManagerImp­l.java:2287)
         at 
 com.yicook.entities.TwitterDailyTip.jdoSetlastSet(TwitterDailyTip.java)
         at 
 com.yicook.entities.TwitterDailyTip.setLastSet(TwitterDailyTip.java:36)
         at 
 com.yicook.control.bco.TwitterStatusSetterBCO.resetTDT(TwitterStatusSetterB­CO.java:60)
         at 
 com.yicook.control.bco.TwitterStatusSetterBCO.execute(TwitterStatusSetterBC­O.java:40)
         at 
 com.yicook.control.ApplicationController.executeControllers(ApplicationCont­roller.java:61)
         at 
 com.yicook.control.ApplicationController.dispatch(ApplicationController.jav­a:41)
         at com.yicook.servlets.FrontController.doPost(FrontController.java:31)
         at com.yicook.servlets.FrontController.doGet(FrontController.java:25)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
         at 
 org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
         at 
 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandle­r.java:1093)
         at 
 com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(Trans­actionCleanupFilter.java:43)
         at 
 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandle­r.java:1084)
         at 
 org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
         at 
 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
         at 
 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
         at 
 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
         at 
 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
         at 
 com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEn­gineWebAppContext.java:54)
         at 
 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
         at 
 com.google.appengine.tools.development.JettyContainerService$ApiProxyHandle­r.handle(JettyContainerService.java:306)
         at 
 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
         at org.mortbay.jetty.Server.handle(Server.java:313)
         at 
 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
         at 
 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnecti­on.java:830)
         at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
         at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
         at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
         at 
 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396­)
         at 
 org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:­442)
 Caused by: java.lang.IllegalArgumentException: can't operate on
 multiple entity groups in a single transaction. found both 

[appengine-java] Re: Bulk update throws exception

2009-08-25 Thread Larry Cable

h' ... so it would seem that 2 or more entity (instances)
persisted in the same tx cause this error ...

this cannot be so ... how is the mapping from instance to entity
(group) made?

On Aug 25, 2:33 pm, Larry Cable larry.ca...@gmail.com wrote:
 I have exactly the same problem, I instantiate a number of @Entity
 objects
 (all of the same type) persist them, and flush them in the context of
 the same
 transaction.

 Since they are all of the same type, and their are no relationships
 (although there is
 an @Embedded class/field) I would imagine that they are all modelled
 as being in the
 sameentitygroup.. but apparently not.

 The documentation is basically useless at this point ...

 On Aug 15, 1:09 pm, Foreigner foreigne...@gmail.com wrote:



  While trying to do a bulk update on my entities using JPA I get the
  exception bellow.
  I understand that you can't do a bulk update on differententitygroups in
  the same transaction but I guess I don't quite understand what anentity
 groupis and how I go about making all entities part of the samegroupI
  want.

  Thanks for the help.

  fbr

  Illegal argument
  org.datanucleus.exceptions.NucleusUserException: Illegal argument
          at 
  org.datanucleus.store.appengine.DatastoreExceptionTranslator.wrapIllegalArg­­umentException(DatastoreExceptionTranslator.java:42)
          at 
  org.datanucleus.store.appengine.RuntimeExceptionWrappingDatastoreService.pu­­t(RuntimeExceptionWrappingDatastoreService.java:106)
          at 
  org.datanucleus.store.appengine.DatastorePersistenceHandler.put(DatastorePe­­rsistenceHandler.java:125)
          at 
  org.datanucleus.store.appengine.DatastorePersistenceHandler.put(DatastorePe­­rsistenceHandler.java:94)
          at 
  org.datanucleus.store.appengine.DatastorePersistenceHandler.updateObject(Da­­tastorePersistenceHandler.java:398)
          at 
  org.datanucleus.state.JDOStateManagerImpl.flush(JDOStateManagerImpl.java:44­­58)
          at 
  org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:2807­­)
          at 
  org.datanucleus.ObjectManagerImpl.markDirty(ObjectManagerImpl.java:2617)
          at 
  org.datanucleus.state.JDOStateManagerImpl.postWriteField(JDOStateManagerImp­­l.java:4241)
          at 
  org.datanucleus.state.JDOStateManagerImpl.setObjectField(JDOStateManagerImp­­l.java:2287)
          at 
  com.yicook.entities.TwitterDailyTip.jdoSetlastSet(TwitterDailyTip.java)
          at 
  com.yicook.entities.TwitterDailyTip.setLastSet(TwitterDailyTip.java:36)
          at 
  com.yicook.control.bco.TwitterStatusSetterBCO.resetTDT(TwitterStatusSetterB­­CO.java:60)
          at 
  com.yicook.control.bco.TwitterStatusSetterBCO.execute(TwitterStatusSetterBC­­O.java:40)
          at 
  com.yicook.control.ApplicationController.executeControllers(ApplicationCont­­roller.java:61)
          at 
  com.yicook.control.ApplicationController.dispatch(ApplicationController.jav­­a:41)
          at 
  com.yicook.servlets.FrontController.doPost(FrontController.java:31)
          at 
  com.yicook.servlets.FrontController.doGet(FrontController.java:25)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
          at 
  org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
          at 
  org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandle­­r.java:1093)
          at 
  com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(Trans­­actionCleanupFilter.java:43)
          at 
  org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandle­­r.java:1084)
          at 
  org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
          at 
  org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
          at 
  org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
          at 
  org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
          at 
  org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
          at 
  com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEn­­gineWebAppContext.java:54)
          at 
  org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
          at 
  com.google.appengine.tools.development.JettyContainerService$ApiProxyHandle­­r.handle(JettyContainerService.java:306)
          at 
  org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
          at org.mortbay.jetty.Server.handle(Server.java:313)
          at 
  org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
          at 
  org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnecti­­on.java:830)
          at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
          at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
          at