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