Re: [appengine-java] Re: Problem with persistance

2010-02-25 Thread Stephan Hartmann
I think in your Offer class you should use getter/setter for mOfferDetail
(not a constructor to set the field).


2010/2/25 Anton Klotz dipl.ing.akl...@googlemail.com

 Hi Jake,

 thanks a lot for your answer.

 After changing the mappedBy statement to child like this:

@Persistent(mappedBy = mOfferDetails)
private Offer mOffer;

 and removing mappedBy from parent, Offer object seems to be persisted.
 But when I get this object from the database with:

public Offer getOfferWithId (long id)
{
return pm.getObjectById(Offer.class, id);
}

 and try to access child with

System.out.printf(String.format (Title %s,
 mOffer.getOfferDetails().getOfferDescription() ));

 I get following error:

  java.lang.NullPointerException
at

 com.sparradar.server.action.actioncommands.ShowOfferDetailsActionCommand.execute(ShowOfferDetailsActionCommand.java:
 41)
 at

 info.rk.vaadinapp.manager.urldispatching.URLActionDispatcher.handleURI(URLActionDispatcher.java:
 90)
at com.vaadin.ui.Window.handleURI(Window.java:358)
at

 com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleURI(AbstractCommunicationManager.java:
 1830)
at

 com.vaadin.terminal.gwt.server.CommunicationManager.handleURI(CommunicationManager.java:
 311)
at

 com.vaadin.terminal.gwt.server.AbstractApplicationServlet.handleURI(AbstractApplicationServlet.java:
 912)
at

 com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:
 471)
at

 com.vaadin.terminal.gwt.server.GAEApplicationServlet.service(GAEApplicationServlet.java:
 231)
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.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:
 51)
at org.mortbay.jetty.servlet.ServletHandler
 $CachedChain.doFilter(ServletHandler.java:1084)
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:
 121)
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:
 70)
at
 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
 139)
at com.google.appengine.tools.development.JettyContainerService
 $ApiProxyHandler.handle(JettyContainerService.java:352)
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)


 I don't get the error if I try to access eg mOffer.getId(). So my
 interpretation of this error is that either the child object was not
 saved in the database, or it was not fetched from the database. I
 don't know how to verify this.

 Thanks,

 Anton


 On 24 Feb., 20:17, Jake jbrooko...@cast.org wrote:
  http://code.google.com/appengine/docs/java/datastore/relationships.ht...
 
  You create a bidirectional one-to-one relationship using fields on
  both classes, with an annotation on the child class's field to declare
  that the fields represent a bidirectional relationship. The field of
  the child class must have a @Persistent annotation with the argument
  mappedBy = ..., where the value is the name of the field on the
  parent class.
 
  From what I see, you have it backwards, with the annotation in the
  parent class.
 
  Jake
 
  On Feb 24, 4:26 am, Anton Klotz 

[appengine-java] Re: Problem with persistance

2010-02-25 Thread datanucleus
 I think in your Offer class you should use getter/setter for mOfferDetail
 (not a constructor to set the field).

Can't see why that would make the slightest difference. What does
appear iffy is that if you have a bidirectional relation then the user
is responsible for setting both sides. I only see Offer.mOfferDetails
being set and not the other side.

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



Re: [appengine-java] Re: Problem with persistance

2010-02-25 Thread Stephan Hartmann
2010/2/25 datanucleus andy_jeffer...@yahoo.com

  I think in your Offer class you should use getter/setter for mOfferDetail
  (not a constructor to set the field).

 Can't see why that would make the slightest difference. What does
 appear iffy is that if you have a bidirectional relation then the user
 is responsible for setting both sides. I only see Offer.mOfferDetails
 being set and not the other side.


isn't setting Offer.mOfferDetails enough for making Offer.getOfferDetails()
returning not null, even if it is a bidirectional relation?


 --
 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.comgoogle-appengine-java%2bunsubscr...@googlegroups.com
 .
 For more options, visit this group at
 http://groups.google.com/group/google-appengine-java?hl=en.



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



[appengine-java] Re: Problem with persistance

2010-02-25 Thread Anton Klotz
Hi Stephan,

no, this was not the solution. As I understand only lazy fetching is
supported by GAE. What do I have to do to get all child objects? Now I
wrote such procedure, to keep the persistanceManager open, but it did
not help either:

public OfferDetails getOfferWithId (long id)
{
OfferDetails offerDetail;
pm = PMF.get().getPersistenceManager();
try {
Offer offer = pm.getObjectById(Offer.class, id);
offerDetail = offer.getOfferDetails();
} finally {
pm.close();
}

return offerDetail;

On 25 Feb., 09:07, Stephan Hartmann hartm...@metamesh.de wrote:
 I think in your Offer class you should use getter/setter for mOfferDetail
 (not a constructor to set the field).

 2010/2/25 Anton Klotz dipl.ing.akl...@googlemail.com



  Hi Jake,

  thanks a lot for your answer.

  After changing the mappedBy statement to child like this:

        �...@persistent(mappedBy = mOfferDetails)
         private Offer mOffer;

  and removing mappedBy from parent, Offer object seems to be persisted.
  But when I get this object from the database with:

         public Offer getOfferWithId (long id)
         {
                 return pm.getObjectById(Offer.class, id);
         }

  and try to access child with

                 System.out.printf(String.format (Title %s,
  mOffer.getOfferDetails().getOfferDescription() ));

  I get following error:

   java.lang.NullPointerException
         at

  com.sparradar.server.action.actioncommands.ShowOfferDetailsActionCommand.ex 
  ecute(ShowOfferDetailsActionCommand.java:
  41)
          at

  info.rk.vaadinapp.manager.urldispatching.URLActionDispatcher.handleURI(URLA 
  ctionDispatcher.java:
  90)
         at com.vaadin.ui.Window.handleURI(Window.java:358)
         at

  com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleURI(Abstr 
  actCommunicationManager.java:
  1830)
         at

  com.vaadin.terminal.gwt.server.CommunicationManager.handleURI(Communication 
  Manager.java:
  311)
         at

  com.vaadin.terminal.gwt.server.AbstractApplicationServlet.handleURI(Abstrac 
  tApplicationServlet.java:
  912)
         at

  com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractA 
  pplicationServlet.java:
  471)
         at

  com.vaadin.terminal.gwt.server.GAEApplicationServlet.service(GAEApplication 
  Servlet.java:
  231)
         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.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFi 
  lter.java:
  51)
         at org.mortbay.jetty.servlet.ServletHandler
  $CachedChain.doFilter(ServletHandler.java:1084)
         at

  com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(Trans 
  actionCleanupFilter.java:
  43)
         at org.mortbay.jetty.servlet.ServletHandler
  $CachedChain.doFilter(ServletHandler.java:1084)
         at

  com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFile 
  Filter.java:
  121)
         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(DevAppEn 
  gineWebAppContext.java:
  70)
         at
  org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
  139)
         at com.google.appengine.tools.development.JettyContainerService
  $ApiProxyHandler.handle(JettyContainerService.java:352)
         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)

  I don't get the error if I try 

[appengine-java] Re: Problem with persistance

2010-02-25 Thread Jake
You may want to look into the JDO fetch groups, hollow returns of
objects, makeTransient, and other items having to do with what is
fetched and what remains accessible after the persistence manager is
closed.  The DataNucleus documentation is a pretty good place to look
at that.  I'm somewhat new to this, but had similar troubles and found
my answers there.

Jake

On Feb 25, 8:36 am, datanucleus andy_jeffer...@yahoo.com wrote:
  interpretation of this error is that either the child object was not
  saved in the database, or it was not fetched from the database.

 GAE/J has some DB viewer, so debugging if it is actually in the
 database is kinda step 1. Then look at the log, since that is why it
 exists

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



[appengine-java] Re: Problem with persistance

2010-02-24 Thread Jake
http://code.google.com/appengine/docs/java/datastore/relationships.html#Owned_One_to_One_Relationships

You create a bidirectional one-to-one relationship using fields on
both classes, with an annotation on the child class's field to declare
that the fields represent a bidirectional relationship. The field of
the child class must have a @Persistent annotation with the argument
mappedBy = ..., where the value is the name of the field on the
parent class.

From what I see, you have it backwards, with the annotation in the
parent class.

Jake

On Feb 24, 4:26 am, Anton Klotz dipl.ing.akl...@googlemail.com
wrote:
 Hi,

 could please somebody tell me, what I'm doing wrong here?

 Here is one child datastructure I want to persist:

 @PersistenceCapable

 public class OfferDetails {

         @PrimaryKey
         @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
         private Key mId;

         @Persistent
         private String mOfferDescription;

         @Persistent
         private Offer mOffer;

         public OfferDetails ()
         {

         }

         public OfferDetails (String offerDesc)
         {
                 this ();
                 mOfferDescription = offerDesc;
         }

 }

 And here is the parent

 @PersistenceCapable(identityType = IdentityType.APPLICATION,
 detachable=true)

 public class Offer {
         @PrimaryKey
         @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
         private Key mId;

         @Persistent(mappedBy=mOffer)
         private OfferDetails mOfferDetails;

 public Offer( OfferDetails offerDetails)
         {
                 this();
                 mOfferDetails = offerDetails;
         }

 }

 Here is the presistance routine:

 public class OfferDataAccess {
           private static final long serialVersionUID = -7037344095742126014L;
           private PersistenceManager pm;

           public OfferDataAccess ()
           {
                   pm = PMF.get().getPersistenceManager();
           }

         public void persistOffer (Offer offer)
         {
                 pm.currentTransaction().begin();
                 try {
                         pm.makePersistent(offer);
                         pm.currentTransaction().commit();
                 } finally {
                         if (pm.currentTransaction().isActive())
                                 pm.currentTransaction().rollback();
                         pm.close();
                 }
         }

 And here is the call of the persistance routine:
 class CreateOfferActionCommand
 {
         public void execute() {
                 mOfferDB = new OfferDataAccess ();
                 mOffer = new Offer (mOfferDetails);
                 mOfferDB.persistOffer (mOffer);

 }
 }

 Now if I run this code, I get following errormessage:

 java.lang.IllegalStateException: Primary key for object of type
 OfferDetails is null.
         at
 org.datanucleus.store.appengine.EntityUtils.getPkAsKey(EntityUtils.java:
 152)
         at
 org.datanucleus.store.appengine.DatastoreFieldManager.getKeyForObject(DatastoreFieldManager.java:
 625)
         at
 org.datanucleus.store.appengine.DatastoreFieldManager.getParentKeyFromParentField(DatastoreFieldManager.java:
 634)
         at
 org.datanucleus.store.appengine.DatastoreFieldManager.establishEntityGroup(DatastoreFieldManager.java:
 591)
         at
 org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPreProcess(DatastorePersistenceHandler.java:
 338)
         at
 org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects(DatastorePersistenceHandler.java:
 246)
         at
 org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject(DatastorePersistenceHandler.java:
 235)
         at
 org.datanucleus.state.JDOStateManagerImpl.internalMakePersistent(JDOStateManagerImpl.java:
 3185)
         at
 org.datanucleus.state.JDOStateManagerImpl.makePersistent(JDOStateManagerImpl.java:
 3161)
         at
 org.datanucleus.ObjectManagerImpl.persistObjectInternal(ObjectManagerImpl.java:
 1298)
         at
 org.datanucleus.ObjectManagerImpl.persistObject(ObjectManagerImpl.java:
 1175)
         at
 org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:
 669)
         at
 org.datanucleus.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:
 694)
         at
 com.sparradar.server.datamodel.offer.OfferDataAccess.persistOffer(OfferDataAccess.java:
 29)
         at
 com.sparradar.server.action.actioncommands.CreateOfferActionCommand.execute(CreateOfferActionCommand.java:
 60)
         at
 info.rk.vaadinapp.manager.urldispatching.URLActionDispatcher.handleURI(URLActionDispatcher.java:
 90)
         at com.vaadin.ui.Window.handleURI(Window.java:358)
         at
 com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleURI(AbstractCommunicationManager.java:
 1830)
         at
 com.vaadin.terminal.gwt.server.CommunicationManager.handleURI(CommunicationManager.java:
 

[appengine-java] Re: Problem with persistance

2010-02-24 Thread Anton Klotz
Hi Jake,

thanks a lot for your answer.

After changing the mappedBy statement to child like this:

@Persistent(mappedBy = mOfferDetails)
private Offer mOffer;

and removing mappedBy from parent, Offer object seems to be persisted.
But when I get this object from the database with:

public Offer getOfferWithId (long id)
{
return pm.getObjectById(Offer.class, id);
}

and try to access child with

System.out.printf(String.format (Title %s,
mOffer.getOfferDetails().getOfferDescription() ));

I get following error:

 java.lang.NullPointerException
at
com.sparradar.server.action.actioncommands.ShowOfferDetailsActionCommand.execute(ShowOfferDetailsActionCommand.java:
41)
at
info.rk.vaadinapp.manager.urldispatching.URLActionDispatcher.handleURI(URLActionDispatcher.java:
90)
at com.vaadin.ui.Window.handleURI(Window.java:358)
at
com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleURI(AbstractCommunicationManager.java:
1830)
at
com.vaadin.terminal.gwt.server.CommunicationManager.handleURI(CommunicationManager.java:
311)
at
com.vaadin.terminal.gwt.server.AbstractApplicationServlet.handleURI(AbstractApplicationServlet.java:
912)
at
com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:
471)
at
com.vaadin.terminal.gwt.server.GAEApplicationServlet.service(GAEApplicationServlet.java:
231)
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.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:
51)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1084)
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:
121)
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:
70)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
139)
at com.google.appengine.tools.development.JettyContainerService
$ApiProxyHandler.handle(JettyContainerService.java:352)
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)


I don't get the error if I try to access eg mOffer.getId(). So my
interpretation of this error is that either the child object was not
saved in the database, or it was not fetched from the database. I
don't know how to verify this.

Thanks,

Anton


On 24 Feb., 20:17, Jake jbrooko...@cast.org wrote:
 http://code.google.com/appengine/docs/java/datastore/relationships.ht...

 You create a bidirectional one-to-one relationship using fields on
 both classes, with an annotation on the child class's field to declare
 that the fields represent a bidirectional relationship. The field of
 the child class must have a @Persistent annotation with the argument
 mappedBy = ..., where the value is the name of the field on the
 parent class.

 From what I see, you have it backwards, with the annotation in the
 parent class.

 Jake

 On Feb 24, 4:26 am, Anton Klotz dipl.ing.akl...@googlemail.com
 wrote:



  Hi,

  could please somebody tell me, what I'm doing wrong here?

  Here is one child datastructure I want to persist:

  @PersistenceCapable

  public class OfferDetails {

          @PrimaryKey
          @Persistent(valueStrategy =