Leon,

thanks for that.... I'll try to have a look tonight unless someone beats me to it.

cheers
dim

----- Original Message ----- 
From: "Leon Doud" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, March 19, 2002 11:57 AM
Subject: [Xdoclet-devel] Primary Key class bug


> The primary key's generated hashCode() method stores
> its value in a transient int _hashCode.  It only
> generates the value if the _hashCode ==
> Integer.MIN_VALUE.  
> 
> If the object is serialized the _hashCode is not saved
> because it is transient, and when deserialized
> _hashCode is initialized to ZERO not MIN_VALUE.  This
> causes the hashCode() method to never recalculate the
> value of _hashCode() after being serialized.
> 
> Attached is the generated primary key class with a
> main method demonstrating this problem.
> 
> Also attached is the bean I used with Xdoclet to
> generate this primary key class. 
> 
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Sports - live college hoops coverage
> http://sports.yahoo.com/


--------------------------------------------------------------------------------


> package ejbtest;
> 
> import javax.ejb.*;
> 
> /**
>  * @ejb:bean
>  *    name="EntityA"
>  *    jndi-name="test/EntityA"
>  *    local-jndi-name="test/EntityA"
>  *    type="CMP"
>  *    cmp-version="2.x"
>  *    view-type="both"
>  *    unchecked="true"
>  *    schema="EntityA"
>  *
>  * @ejb:transaction type="Required"
>  *
>  */
> public abstract class EntityABean implements javax.ejb.EntityBean {
> 
> /**
>      * Create EntityA.
>      * @ejb:create-method
>      */
> public EntityAPK ejbCreate(int id)
>         throws CreateException {
> 
>         setId(id);
> 
>         return null;
> }
> 
> 
> public void ejbPostCreate(int id) throws CreateException {}
> 
> /**
> * Primary Key setter, don't call after the create method.
> * @param newValue The new value of the Id
> */
> public abstract void setId(int newValue);
> 
> /**
> * @return Id
> * @ejb:interface-method view-type="both"
> * @ejb:persistent-field
> * @ejb:pk-field
> */
> public abstract int getId();
> 
> public void setEntityContext(javax.ejb.EntityContext entityContext) {}
> 
> public void unsetEntityContext() {}
> 
> public void ejbLoad() {}
> 
> public void ejbActivate() {}
> 
> public void ejbPassivate() {}
> 
> public void ejbRemove() {}
> 
> public void ejbStore() {}
> }
> 


--------------------------------------------------------------------------------


> /*
>  * Generated file - Do not edit!
>  */
> package ejbtest;
> 
> import java.lang.*;
> //import javax.ejb.*;
> import java.rmi.MarshalledObject;
> 
> /**
>  * Primary key for EntityA.
>  * @xdoclet-generated at Mar 18, 2002 11:30:40 AM
>  */
> public class EntityAPK
>    extends java.lang.Object
>    implements java.io.Serializable
> {
>    static final long serialVersionUID = -8757892072328236367L;
>    transient private int _hashCode = Integer.MIN_VALUE;
>    transient private String value = null;
> 
>    public int id;
> 
>    public EntityAPK()
>    {
>    }
> 
>    public EntityAPK( int id )
>    {
>       this.id = id;
>    }
> 
>    public int getId()
>    {
>       return id;
>    }
> 
>    public void setId(int id)
>    {
>       this.id = id;
>    }
> 
>    public int hashCode()
>    {
>       if( _hashCode == Integer.MIN_VALUE )
>       {
>          _hashCode += (int)this.id;
>       }
> 
>       return _hashCode;
>    }
> 
>    public boolean equals(Object obj)
>    {
>       if( !(obj instanceof ejbtest.EntityAPK) )
>          return false;
> 
>       ejbtest.EntityAPK pk = (ejbtest.EntityAPK)obj;
>       boolean eq = true;
> 
>       if( obj == null )
>       {
>          eq = false;
>       }
>       else
>       {
>          eq = eq && this.id == pk.id;
>       }
> 
>       return eq;
>    }
> 
>    public String toString()
>    {
>       if( value == null )
>       {
>          value = "[.";
>          value += this.id+".";
>          value += "]";
>       }
> 
>       return value;
>    }
> 
>     public static void main(String[] args) throws Exception 
>     {
> EntityAPK pk = new EntityAPK(55);
> System.out.println("pk.hashCode(): "+ pk.hashCode());
> 
> MarshalledObject mo = new MarshalledObject(pk);
> System.out.println("marshalled.pk.hashCode(): "+((EntityAPK)(mo.get())).hashCode());
>     }
> }
> 


_______________________________________________
Xdoclet-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/xdoclet-devel

Reply via email to