cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: ROP - server DOs to client DOs failure
Date Tue, 30 Sep 2008 14:57:15 GMT
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
>
>


Mime
View raw message