Re: toMany relationship not fetched

From: Marcin Skladaniec (marci..sh.com.au)
Date: Wed Apr 26 2006 - 00:55:17 EDT

  • Next message: Andrus Adamchik: "Re: toMany relationship not fetched"

    Andrus

    You mentioned once :

    > BTW, I noticed one minor thing in the mapping - you should not
    > populate "Client Superclass" field. This field is for the "wedge"
    > class that may optionally be inserted in the inheritance hierarchy
    > between cayenne.Persistent and _MyObject.

    We are using "wedge" classes for both client and server (that is
    between _clientEntity and PersistentObject, and as well between
    _serverEntity and CayenneDataObject. Is it all right ?

    I have another problem which might be related. This is a short
    description:

    Student someStudent =
    ...
    Student student = context.localObject(someStudent, null) ;

    logger.info( student.getLanguage() );
    prints :
    <com.ish.angel.cayenne.Languag..409132, id=<ObjectId:Language,
    id=1648>, state=committed,
    context=org.objectstyle.cayenne.CayenneContex..c8f01>

    which is correct. But the problem is that

    logger.info( "Number of students speaking "+student.getLanguage
    ().getName() +" language : "+student.getLanguage().getStudents().size
    () );
    prints:
    Number of students speaking null language : 2

    So the language record is not correct. It looks like the "simple"
    value (name) is missing while the related value (students) is correct !
    There is no exception thrown. Could having the "wedge" class cause
    object to be not serialized properly ? Could it cause the problem
    which I described before in this thread ?

    I just explain that the "wedge" classes are important to us, on
    client side we are using them as a simple triggers (to have simple
    validation happen before anything goes to server), we have
    getValueForKey / setValueForKey / getDataTypeForKey methods
    (implemented in dotemplates).
    Having to remove those classes from project is not impossible, but
    would require some hard work. Please advise us if using those classes
    is right, or if you rather not recommend using them. Thank you !

    Marcin

    On 26/04/2006, at 12:47 PM, Marcin Skladaniec wrote:

    > Hello !
    >
    > I'm still trying to fix committing problem I have. I think that is
    > it something in my code, but I cant find out what. Can someone
    > suggest what can be wrong ?
    >
    > I have two related objects in context, one is new, and one is
    > hollow (because it was copied to this context using localObject() ):
    >
    > 2006-04-26 12:05:46,172 [AWT-EventQueue-0] INFO
    > com.ish.angel.controller.EditController - attempting to commit,
    > listing all objects in context:
    > 2006-04-26 12:05:46,173 [AWT-EventQueue-0] INFO
    > com.ish.angel.controller.EditController - 1
    > object :<com.ish.angel.cayenne.SubCategor..5880424,
    > id=<ObjectId:SubCategory, TEMP:000000F1D0423EC5>, state=new,
    > context=org.objectstyle.cayenne.CayenneContex..aa10>
    > 2006-04-26 12:05:46,173 [AWT-EventQueue-0] INFO
    > com.ish.angel.controller.EditController - 2
    > object :<com.ish.angel.cayenne.Categor..0349001,
    > id=<ObjectId:Category, id=200>, state=hollow,
    > context=org.objectstyle.cayenne.CayenneContex..aa10>
    >
    > commitChanges() throws an exception:
    >
    > org.objectstyle.cayenne.CayenneRuntimeException: [v.1.2-
    > dev-2006-4-25 April 25 2006] Remote error. URL - http://localhost:
    > 8181/angel-server-cayenne
    > at
    > org.objectstyle.cayenne.remote.hessian.HessianConnection.doSendMessage
    > (HessianConnection.java:181)
    > at org.objectstyle.cayenne.remote.BaseConnection.sendMessage
    > (BaseConnection.java:109)
    > at org.objectstyle.cayenne.remote.ClientChannel.send
    > (ClientChannel.java:279)
    > at org.objectstyle.cayenne.remote.ClientChannel.onSync
    > (ClientChannel.java:188)
    > at org.objectstyle.cayenne.CayenneContext.doCommitChanges
    > (CayenneContext.java:233)
    > at org.objectstyle.cayenne.CayenneContext.commitChanges
    > (CayenneContext.java:220)
    > at com.ish.angel.controller.EditController.saveRecord
    > (EditController.java:287)
    >
    > on server side there is an exception thrown too:
    >
    > 2006-04-26 12:05:46,240 [SocketListener0-1] DEBUG
    > com.ish.angel.server.cayenne.glue.CayenneDataObject - Changing
    > persistence state for class
    > com.ish.angel.server.cayenne.SubCategory from: transient to: new
    > Apr 26, 2006 12:05:46 PM com.caucho.hessian.server.HessianSkeleton
    > invoke
    > WARNING: java.lang.NullPointerException
    > java.lang.NullPointerException
    > at
    > org.objectstyle.cayenne.map.EntityResolver.lookupObjEntity
    > (EntityResolver.java:514)
    > 2006-04-26 12:05:46,640 [SocketListener0-1] DEBUG
    > com.ish.angel.server.cayenne.glue.CayenneDataObject - Changing
    > persistence state for class
    > com.ish.angel.server.cayenne.SubCategory from: transient to: transient
    > at org.objectstyle.cayenne.access.ChildDiffLoader.arcCreated
    > (ChildDiffLoader.java:141)
    > at org.objectstyle.cayenne.graph.ArcCreateOperation.apply
    > (ArcCreateOperation.java:80)
    > at org.objectstyle.cayenne.graph.CompoundDiff.apply
    > (CompoundDiff.java:133)
    > at org.objectstyle.cayenne.access.DataContext.onContextFlush
    > (DataContext.java:1171)
    > at
    > org.objectstyle.cayenne.access.ClientServerChannel.onCommit
    > (ClientServerChannel.java:195)
    > at org.objectstyle.cayenne.access.ClientServerChannel.onSync
    > (ClientServerChannel.java:147)
    > at
    > org.objectstyle.cayenne.remote.service.DispatchHelper.dispatch
    > (DispatchHelper.java:80)
    > at
    > org.objectstyle.cayenne.remote.service.BaseRemoteService.processMessag
    > e(BaseRemoteService.java:182)
    > at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
    > at sun.reflect.DelegatingMethodAccessorImpl.invoke
    > (DelegatingMethodAccessorImpl.java:25)
    > at java.lang.reflect.Method.invoke(Method.java:324)
    > at com.caucho.hessian.server.HessianSkeleton.invoke
    > (HessianSkeleton.java:157)
    > at
    > org.objectstyle.cayenne.remote.hessian.service._HessianServlet.service
    > (_HessianServlet.java:388)
    > at com.ish.angel.server.CayenneServlet.service
    > (CayenneServlet.java:59)
    > at org.mortbay.jetty.servlet.ServletHolder.handle
    > (ServletHolder.java:428)
    > at org.mortbay.jetty.servlet.ServletHandler.dispatch
    > (ServletHandler.java:666)
    > at org.mortbay.jetty.servlet.ServletHandler.handle
    > (ServletHandler.java:568)
    > at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
    > at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
    > at org.mortbay.http.HttpServer.service(HttpServer.java:909)
    > at org.mortbay.http.HttpConnection.service
    > (HttpConnection.java:816)
    > at org.mortbay.http.HttpConnection.handleNext
    > (HttpConnection.java:982)
    > at org.mortbay.http.HttpConnection.handle
    > (HttpConnection.java:833)
    > at org.mortbay.http.SocketListener.handleConnection
    > (SocketListener.java:244)
    > at org.mortbay.util.ThreadedServer.handle
    > (ThreadedServer.java:357)
    > at org.mortbay.util.ThreadPool$PoolThread.run
    > (ThreadPool.java:534)
    >
    > I followed the stack trace. There is a call to
    >
    > DataObject source = findObject(nodeId);
    >
    > which calls :
    >
    > graphManager.getNode(nodeId);
    >
    > in ChildDiffLoader. In my case it appears to return null. (I cant
    > access cvs to put more logging into it to be 100% sure). Why getNode
    > () returns null ? Could that be because ObjectId has already
    > changed from TEMP id to permanent id ? (nodeId is actually
    > ObjectId, isn't it ?)
    >
    > Andrus, can you explain how is creating new object on server
    > processed ? I can see that after committing a new record on server
    > side this object is in transient state, and then it is inserted to
    > some context (transient -> new). Is that caused by the exception
    > that my object is then still in transient state ?
    >
    > Thank you
    > Marcin
    >
    >
    > -------------------------->
    > ish
    > http://www.ish.com.au
    > Level 1, 30 Wilson Street Newtown 2042 Australia
    > phone +61 2 9550 5001 fax +61 2 9550 4001
    >
    >

    -------------------------->
    ish
    http://www.ish.com.au
    Level 1, 30 Wilson Street Newtown 2042 Australia
    phone +61 2 9550 5001 fax +61 2 9550 4001



    This archive was generated by hypermail 2.0.0 : Wed Apr 26 2006 - 00:55:44 EDT