[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  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 Set tableB = new HashSet();
>  ..
>  (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 Set tableA = new HashSet();
>  ..
>  (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);
>  List results1 = (List) query1.execute();
>  TableA tableA= results1.get(0);
>
> Query query2 = pm.newQuery(TableB.class);
> List results2 = (List) 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)"  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  wrote:
> >
> > > Hi Jason,
> >
> > > Our schema looks as follows:
> > >  ProductType 1->M Product 1>M 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.appe

[appengine-java] Re: Bulk update throws exception

2009-09-15 Thread Anita

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 Set tableB = new HashSet();
 ..
  (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 Set tableA = new HashSet();
 ..
 (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);
 List results1 = (List) query1.execute();
 TableA tableA= results1.get(0);

Query query2 = pm.newQuery(TableB.class);
List results2 = (List) 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)"  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  wrote:
>
> > Hi Jason,
>
> > Our schema looks as follows:
> >  ProductType 1->M Product 1>M 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

[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)"  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  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  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.goog

[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  wrote:

>
> Hi Jason,
>
> Our schema looks as follows:
>  ProductType 1->M Product 1>M 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
> $ApiProxyHandle

[appengine-java] Re: Bulk update throws exception

2009-09-12 Thread Anita

Hi Jason,

Our schema looks as follows:
 ProductType 1->M Product 1>M 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-26 Thread Jason (Google)
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  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  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(

[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  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  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.pars

[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  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 

[appengine-java] Re: Bulk update throws exception

2009-08-17 Thread Jason (Google)
Have you read the documentation on entity groups?
http://code.google.com/appengine/docs/python/datastore/keysandentitygroups.html#Entity_Groups_Ancestors_and_Paths
http://code.google.com/appengine/docs/java/datastore/relationships.html

In JDO/JPA, entity groups are expressed using owned relationships between
entities -- in JPA, this would be annotated using @OneToOne, @OneToMany, and
so forth. If you have any specific questions after reading through the docs
on entity groups and relationships, let me know.

- Jason

On Sat, Aug 15, 2009 at 1:09 PM, Foreigner  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.wrapIllegalArgumentException(DatastoreExceptionTranslator.java:42)
>
>   at 
> org.datanucleus.store.appengine.RuntimeExceptionWrappingDatastoreService.put(RuntimeExceptionWrappingDatastoreService.java:106)
>   at 
> org.datanucleus.store.appengine.DatastorePersistenceHandler.put(DatastorePersistenceHandler.java:125)
>
>   at 
> org.datanucleus.store.appengine.DatastorePersistenceHandler.put(DatastorePersistenceHandler.java:94)
>   at 
> org.datanucleus.store.appengine.DatastorePersistenceHandler.updateObject(DatastorePersistenceHandler.java:398)
>
>   at 
> org.datanucleus.state.JDOStateManagerImpl.flush(JDOStateManagerImpl.java:4458)
>   at 
> org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:2807)
>   at 
> org.datanucleus.ObjectManagerImpl.markDirty(ObjectManagerImpl.java:2617)
>
>   at 
> org.datanucleus.state.JDOStateManagerImpl.postWriteField(JDOStateManagerImpl.java:4241)
>   at 
> org.datanucleus.state.JDOStateManagerImpl.setObjectField(JDOStateManagerImpl.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(TwitterStatusSetterBCO.java:60)
>   at 
> com.yicook.control.bco.TwitterStatusSetterBCO.execute(TwitterStatusSetterBCO.java:40)
>
>   at 
> com.yicook.control.ApplicationController.executeControllers(ApplicationController.java:61)
>   at 
> com.yicook.control.ApplicationController.dispatch(ApplicationController.java: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(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 
> 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: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(HttpConnection.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.IllegalArgumentExcepti