Re: ROP - server DOs to client DOs failure

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Tue Sep 30 2008 - 10:57:15 EDT

  • Next message: Chris Murphy: "Re: ROP - server DOs to client DOs failure"

    Can't say for sure what this is, but can you try it with 3.0?

    BTW, 3.0 supports direct mapping of primitive booleans (boolean for
    the ObjAttribute; BOOLEAN for the DbAttribute; TINYINT in MySQL)

    Andrus

    On Sep 30, 2008, at 8:10 AM, Chris Murphy wrote:

    >
    > I have a problem that occurs when a fetch is done from the ROP
    > client, which causes the server to load client DOs using the values
    > from server DOs:
    >
    > <
    > Can not set java.lang.Byte field
    > org
    > .strandz
    > .data
    > .wombatrescue.objects.cayenne.client.auto._RosterSlot.monthlyRestart
    > to java.lang.Integer
    > >
    >
    > I have checked that all the latest code and mapping information is
    > on the Tomcat server. The problem occurs when re-fetching a
    > RosterSlot that the client application created. What is interesting
    > is that if I reboot Tomcat then everything works as expected -
    > showing that the new RosterSlot did in fact make it successfully
    > into the database. So it is a ROP database refresh problem.
    >
    > Is there anything else I need to check, or some easy way of
    > debugging this? _RosterSlot.monthlyRestart is a Byte variable in
    > both client and server versions of the DO. I do have methods on the
    > subclasses that serve to convert between Byte/Integer/boolean:
    >
    > public boolean isMonthlyRestart()
    > {
    > boolean result = true;
    > if(getMonthlyRestart().intValue() == 0)
    > {
    > result = false;
    > }
    > return result;
    > }
    >
    > public void setMonthlyRestart( boolean b)
    > {
    > if(b)
    > {
    > setMonthlyRestart( Utils.ONE.byteValue());
    > }
    > else
    > {
    > setMonthlyRestart( Utils.ZERO.byteValue());
    > }
    > }
    >
    > From the Modeller I can see that MONTHLYRESTART is a TINYINT in the
    > MySql database and in the DO the Java Type is a Byte.
    >
    > thanks - Chris
    >
    > Some of the stack trace from the client:
    > org.apache.cayenne.CayenneRuntimeException: [v.2.0.4 October 8 2007]
    > Remote error. URL - http://localhost:8080/cayenneRemoteService/cayenne-service
    > ; CAUSE - Can not set java.lang.Byte field
    > org
    > .strandz
    > .data
    > .wombatrescue.objects.cayenne.client.auto._RosterSlot.monthlyRestart
    > to java.lang.Integer
    > at
    > org
    > .apache
    > .cayenne
    > .remote
    > .hessian.HessianConnection.doSendMessage(HessianConnection.java:145)
    > at
    > org
    > .apache
    > .cayenne.remote.BaseConnection.sendMessage(BaseConnection.java:73)
    > at org.apache.cayenne.remote.ClientChannel.send(ClientChannel.java:
    > 242)
    > at
    > org.apache.cayenne.remote.ClientChannel.onQuery(ClientChannel.java:88)
    > at
    > org
    > .apache
    > .cayenne
    > .util
    > .ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:217)
    > at
    > org
    > .apache
    > .cayenne
    > .CayenneContextQueryAction.execute(CayenneContextQueryAction.java:47)
    > at org.apache.cayenne.CayenneContext.onQuery(CayenneContext.java:
    > 290)
    > at
    > org.apache.cayenne.CayenneContext.performQuery(CayenneContext.java:
    > 279)
    > at
    > org
    > .apache
    > .cayenne.util.RelationshipFault.resolveFromDB(RelationshipFault.java:
    > 90)
    > at
    > org
    > .apache
    > .cayenne
    > .util
    > .PersistentObjectList.resolvedObjectList(PersistentObjectList.java:
    > 299)
    > at
    > org
    > .apache
    > .cayenne
    > .util.PersistentObjectList.iterator(PersistentObjectList.java:209)
    > at org.strandz.lgpl.extent.ActualList.iterator(ActualList.java:189)
    >
    > Some of the stack trace from the server:
    >
    > Caused by: java.lang.IllegalArgumentException: Can not set
    > java.lang.Byte field
    > org
    > .strandz
    > .data
    > .wombatrescue.objects.cayenne.client.auto._RosterSlot.monthlyRestart
    > to java.lang.Integer
    > at
    > sun
    > .reflect
    > .UnsafeFieldAccessorImpl
    > .throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
    > at
    > sun
    > .reflect
    > .UnsafeFieldAccessorImpl
    > .throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
    > at
    > sun
    > .reflect
    > .UnsafeObjectFieldAccessorImpl
    > .set(UnsafeObjectFieldAccessorImpl.java:63)
    > at java.lang.reflect.Field.set(Field.java:657)
    > at
    > org
    > .apache
    > .cayenne
    > .property.FieldAccessor.writePropertyDirectly(FieldAccessor.java:79)
    > at
    > org
    > .apache
    > .cayenne
    > .property.SimpleProperty.writePropertyDirectly(SimpleProperty.java:83)
    > at
    > org
    > .apache
    > .cayenne.property.SimpleProperty.writeProperty(SimpleProperty.java:54)
    > at org.apache.cayenne.map.EntityDescriptor
    > $SimplePersistentProperty.writeProperty(EntityDescriptor.java:305)
    > at org.apache.cayenne.util.ObjectDetachOperation
    > $1.visitProperty(ObjectDetachOperation.java:159)
    > at
    > org.apache.cayenne.property.SimpleProperty.visit(SimpleProperty.java:
    > 62)
    > at
    > org
    > .apache
    > .cayenne
    > .property
    > .BaseClassDescriptor.visitProperties(BaseClassDescriptor.java:214)
    > at
    > org
    > .apache
    > .cayenne
    > .util.ObjectDetachOperation.detach(ObjectDetachOperation.java:98)
    > at
    > org
    > .apache
    > .cayenne
    > .access
    > .ClientServerChannelQueryAction
    > .toClientObjects(ClientServerChannelQueryAction.java:185)
    >
    > --
    > Seaweed Software Pty Ltd,
    > http://www.strandz.org
    >
    >



    This archive was generated by hypermail 2.0.0 : Tue Sep 30 2008 - 10:57:54 EDT