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