Re: ROP - server DOs to client DOs failure

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Tue Sep 30 2008 - 14:24:50 EDT


> Shouldn't the signatures be the same?

Yeah... Looking at the client templates, there's no explicit handling
of boolean attributes. This probably also means that primitives
haven't been fully tested with ROP. Let me open a Jira on that.

Thanks,
Andrus

On Sep 30, 2008, at 8:25 PM, Chris Murphy wrote:

>
> Using 3.0 and setting Java Type for RosterSlot the in the Modeller
> to a boolean, then generating the classes, then getting rid of the
> extra methods - fixed the problem.
>
> One slightly strange thing I noticed. In the client version the
> generated class is: public boolean getMonthlyRestart()
> ,
> but on the server version it is:
> public boolean isMonthlyRestart()
> Shouldn't the signatures be the same?
>
> thanks - Chris
>
> Andrus Adamchik wrote:
>> 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
>>>
>>>
>>
>>
>>
>
> --
> Seaweed Software Pty Ltd,
> http://www.strandz.org
>
>



This archive was generated by hypermail 2.0.0 : Tue Sep 30 2008 - 14:25:29 EDT