cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chris Murphy <ch...@strandz.org>
Subject ROP - server DOs to client DOs failure
Date Tue, 30 Sep 2008 05:10:57 GMT

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


Mime
View raw message