remove the cache key altogether if you want

marcf

|-----Original Message-----
|From: [EMAIL PROTECTED]
|[mailto:[EMAIL PROTECTED]]On Behalf Of Scott
|M Stark
|Sent: Thursday, February 07, 2002 11:50 PM
|To: [EMAIL PROTECTED]
|Subject: [JBoss-dev] CVS update: jboss/src/main/org/jboss/ejb
|CacheKey.java
|
|
|  User: starksm
|  Date: 02/02/07 23:49:40
|
|  Modified:    src/main/org/jboss/ejb Tag: Branch_2_4 CacheKey.java
|  Log:
|  Fix problem with cast in equals
|
|  Revision  Changes    Path
|  No                   revision
|
|
|  No                   revision
|
|
|  1.12.2.2  +157 -138  jboss/src/main/org/jboss/ejb/CacheKey.java
|
|  Index: CacheKey.java
|  ===================================================================
|  RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/CacheKey.java,v
|  retrieving revision 1.12.2.1
|  retrieving revision 1.12.2.2
|  diff -u -r1.12.2.1 -r1.12.2.2
|  --- CacheKey.java    20 Nov 2001 09:42:48 -0000      1.12.2.1
|  +++ CacheKey.java    8 Feb 2002 07:49:40 -0000       1.12.2.2
|  @@ -1,150 +1,169 @@
|   /*
|  -* JBoss, the OpenSource EJB server
|  -*
|  -* Distributable under LGPL license.
|  -* See terms of license at gnu.org.
|  -*/
|  + * JBoss, the OpenSource EJB server
|  + *
|  + * Distributable under LGPL license.
|  + * See terms of license at gnu.org.
|  + */
|   package org.jboss.ejb;
|
|  +import java.lang.reflect.Method;
|   import java.rmi.MarshalledObject;
|
|   import org.apache.log4j.Category;
|
|   /**
|  -*   CacheKey
|  -*
|  -*   CacheKey is an encapsulation of both the PrimaryKey and a
|cache specific key
|  -*
|  -*   This implementation is a safer implementation in the sense
|that it doesn't rely
|  -*   on the user supplied hashcode and equals.   It is also fast
|since the hashCode operation
|  -*   is pre-calculated.
|  -*
|  -*   @see org.jboss.ejb.plugins.NoPassivationInstanceCache.java
|  -*   @see org.jboss.ejb.plugins.EntityInstanceCache
|  -*   @see org.jboss.ejb.plugins.EntityProxy
|  -*   @author <a href="[EMAIL PROTECTED]">Marc Fleury</a>
|  -*   @author <a href="[EMAIL PROTECTED]">Bill Burke</a>
|  -*   @author <a href="[EMAIL PROTECTED]">Scott Stark</a>
|  -*   @version $Revision: 1.12.2.1 $
|  -*/
|  + *   CacheKey
|  + *
|  + *   CacheKey is an encapsulation of both the PrimaryKey and a
|cache specific key
|  + *
|  + *   This implementation is a safer implementation in the sense
|that it doesn't rely
|  + *   on the user supplied hashcode and equals.   It is also
|fast since the hashCode operation
|  + *   is pre-calculated.
|  + *
|  + *   @see org.jboss.ejb.plugins.NoPassivationInstanceCache.java
|  + *   @see org.jboss.ejb.plugins.EntityInstanceCache
|  + *   @see org.jboss.ejb.plugins.EntityProxy
|  + *   @author <a href="[EMAIL PROTECTED]">Marc Fleury</a>
|  + *   @author <a href="[EMAIL PROTECTED]">Bill Burke</a>
|  + *   @author <a href="[EMAIL PROTECTED]">Scott Stark</a>
|  + *   @version $Revision: 1.12.2.2 $
|  + */
|   public class CacheKey
|  -    implements java.io.Externalizable
|  +   implements java.io.Externalizable
|   {
|  -    // Constants -----------------------------------------------------
|  -
|  -    // Attributes ----------------------------------------------------
|  -
|  -    // The database primaryKey
|  -    // This primaryKey is used by
|  -    //
|  -    // org.jboss.ejb.plugins.EntityInstanceCache.setKey() - to
|set the EntityEnterpriseContext id
|  -    // org.jboss.ejb.plugins.jrmp.interfaces.EntityProxy.invoke():
|  -    // - implementing Entity.toString() --> cacheKey.getId().toString()
|  -    // - implementing Entity.hashCode() --> cacheKey.getId().hashCode()
|  -    // - etc...
|  -    //
|org.jboss.ejb.plugins.local.BaseLocalContainerInvoker.EntityProxy.getId()
|  -    //
|  -    protected Object id;
|  -    public Object getId()
|  -    {
|  -    return id;
|  -    }
|  -
|  -    // The Marshalled Object representing the key
|  -    protected MarshalledObject mo;
|  -
|  -    // The Marshalled Object's hashcode
|  -    protected int hashCode;
|  -
|  -    // Static --------------------------------------------------------
|  -
|  -    // Public --------------------------------------------------------
|  -
|  -    public CacheKey()
|  -    {
|  -    // For externalization only
|  -    }
|  -    public CacheKey(Object id)
|  -    {
|  -    if (id == null) throw new Error("id may not be null");
|  -
|  -    this.id = id;
|  -    try
|  -        {
|  -        // Equals rely on the MarshalledObject itself
|  -        mo =  new MarshalledObject(id);
|  -        // Precompute the hashCode (speed)
|  -        hashCode = mo.hashCode();
|  -            }
|  -    catch (Exception e)
|  -        {
|  -           Category log = Category.getInstance(getClass());
|  -           log.error("failed to initialize, id="+id, e);
|  -        }
|  -    }
|  -
|  -    // Z implementation ----------------------------------------------
|  -
|  -    // Package protected ---------------------------------------------
|  -
|  -    // Protected -----------------------------------------------------
|  -
|  -    // Private -------------------------------------------------------
|  -
|  -    public void writeExternal(java.io.ObjectOutput out)
|  -    throws java.io.IOException
|  -    {
|  -        out.writeObject(id);
|  -    out.writeObject(mo);
|  -            out.writeInt(hashCode);
|  -    }
|  -
|  -    public void readExternal(java.io.ObjectInput in)
|  -    throws java.io.IOException, ClassNotFoundException
|  -    {
|  -        id = in.readObject();
|  -    mo = (MarshalledObject) in.readObject();
|  -        hashCode = in.readInt();
|  -    }
|  +   // Constants -----------------------------------------------------
|  +   static final long serialVersionUID = -7108821554259950778L;
|  +
|  +   // Attributes ----------------------------------------------------
|  +
|  +   // The database primaryKey
|  +   // This primaryKey is used by
|  +   //
|  +   // org.jboss.ejb.plugins.EntityInstanceCache.setKey() - to
|set the EntityEnterpriseContext id
|  +   // org.jboss.ejb.plugins.jrmp.interfaces.EntityProxy.invoke():
|  +   // - implementing Entity.toString() --> cacheKey.getId().toString()
|  +   // - implementing Entity.hashCode() --> cacheKey.getId().hashCode()
|  +   // - etc...
|  +   //
|org.jboss.ejb.plugins.local.BaseLocalContainerInvoker.EntityProxy.getId()
|  +   //
|  +   protected Object id;
|  +   public Object getId()
|  +   {
|  +      return id;
|  +   }
|  +
|  +   // The Marshalled Object representing the key
|  +   protected MarshalledObject mo;
|  +
|  +   // The Marshalled Object's hashcode
|  +   protected int hashCode;
|  +
|  +   // Static --------------------------------------------------------
|  +
|  +   // Public --------------------------------------------------------
|  +
|  +   public CacheKey()
|  +   {
|  +      // For externalization only
|  +   }
|  +   public CacheKey(Object id)
|  +   {
|  +      if (id == null) throw new Error("id may not be null");
|  +
|  +      this.id = id;
|  +      try
|  +      {
|  +         /* See if the key directly implements equals and hashCode. The
|  +          *getDeclaredMethod method only returns method
|declared in the argument
|  +          *class, not its superclasses.
|  +         */
|  +         try
|  +         {
|  +            Class[] equalsArgs = {Object.class};
|  +            Method equals =
|id.getClass().getDeclaredMethod("equals", equalsArgs);
|  +            Class[] hashCodeArgs = {};
|  +            Method hash =
|id.getClass().getDeclaredMethod("hashCode", hashCodeArgs);
|  +            // Both equals and hashCode are defined, use the id methods
|  +            hashCode = id.hashCode();
|  +         }
|  +         catch(NoSuchMethodException ex)
|  +         {
|  +            // Rely on the MarshalledObject for equals and hashCode
|  +            mo =  new MarshalledObject(id);
|  +            // Precompute the hashCode (speed)
|  +            hashCode = mo.hashCode();
|  +         }
|  +      }
|  +      catch (Exception e)
|  +      {
|  +         Category log = Category.getInstance(getClass());
|  +         log.error("failed to initialize, id="+id, e);
|  +      }
|  +   }
|
|  -    // HashCode and Equals over write --------------------------------
|  -
|  -    /**
|  -     * these should be overwritten by extending Cache key
|  -     * since they define what the cache does in the first place
|  -     */
|  -    public int hashCode()
|  -    {
|  -        // we default to the pK id
|  -        return hashCode;
|  -    }
|  -
|  -
|  -    /**
|  -     * equals()
|  -     *
|  -     * We base the equals on the equality of the underlying key
|  -     * in this fashion we make sure that we cannot have duplicate
|  -     * hashes in the maps.
|  -     * The fast way (and right way) to do this implementation
|  -     * is with a incremented cachekey.  It is more complex but worth
|  -     * the effort this is a FIXME (MF)
|  -     * The following implementation is fool-proof
|  -     */
|  -    public boolean equals(Object object)
|  -    {
|  -        if (object instanceof CacheKey)
|  -        {
|  -            return (mo.equals(((CacheKey) object).mo));
|  -        }
|  -        return false;
|  -    }
|  -
|  -    public String toString()
|  -    {
|  -    return id.toString();
|  -    }
|  -
|  -    // Inner classes -------------------------------------------------
|  +   // Z implementation ----------------------------------------------
|  +
|  +   // Package protected ---------------------------------------------
|  +
|  +   // Protected -----------------------------------------------------
|  +
|  +   // Private -------------------------------------------------------
|  +
|  +   public void writeExternal(java.io.ObjectOutput out)
|  +      throws java.io.IOException
|  +   {
|  +      out.writeObject(id);
|  +      out.writeObject(mo);
|  +      out.writeInt(hashCode);
|  +   }
|  +
|  +   public void readExternal(java.io.ObjectInput in)
|  +      throws java.io.IOException, ClassNotFoundException
|  +   {
|  +      id = in.readObject();
|  +      mo = (MarshalledObject) in.readObject();
|  +      hashCode = in.readInt();
|  +   }
|  +
|  +   // HashCode and Equals over write --------------------------------
|  +
|  +   /**
|  +    * these should be overwritten by extending Cache key
|  +    * since they define what the cache does in the first place
|  +    */
|  +   public int hashCode()
|  +   {
|  +      // we default to the pK id
|  +      return hashCode;
|  +   }
|  +
|  +
|  +   /** This method uses the id implementation of equals if the mo is
|  +    *null since this indicates that the id class did implement equals.
|  +    *If mo is not null, then the MarshalledObject equals is used to
|  +    *compare keys based on their serialized form. Relying on the
|  +    *serialized form does not always work.
|  +    */
|  +   public boolean equals(Object object)
|  +   {
|  +      boolean equals = false;
|  +      if (object instanceof CacheKey)
|  +      {
|  +         CacheKey ckey = (CacheKey) object;
|  +         Object key = ckey.id;
|  +         // If mo is null, the id class implements equals
|  +         if( mo == null )
|  +            equals = id.equals(key);
|  +         else
|  +            equals = mo.equals(ckey.mo);
|  +      }
|  +      return equals;
|  +   }
|  +
|  +   public String toString()
|  +   {
|  +      return id.toString();
|  +   }
|  +
|  +   // Inner classes -------------------------------------------------
|   }
|  -
|
|
|
|
|_______________________________________________
|Jboss-development mailing list
|[EMAIL PROTECTED]
|https://lists.sourceforge.net/lists/listinfo/jboss-development


_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to