Revision: 488 http://openutils.svn.sourceforge.net/openutils/?rev=488&view=rev Author: fcarone Date: 2007-10-31 10:58:48 -0700 (Wed, 31 Oct 2007) Log Message: ----------- - return a plain set/list/map instead of the transformed ones - handle hashCode to avoid object annihilation in set and maps Modified Paths: -------------- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java Modified: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java 2007-10-31 11:05:02 UTC (rev 487) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java 2007-10-31 17:58:48 UTC (rev 488) @@ -25,6 +25,7 @@ import net.sf.cglib.proxy.NoOp; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.ListUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.SetUtils; import org.apache.commons.collections.Transformer; @@ -36,6 +37,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.ReflectionUtils; +import org.apache.commons.lang.builder.HashCodeBuilder; /** @@ -188,6 +190,10 @@ { return 0; } + if (method.getName().equals("hashCode")) + { + return 0; + } else { return 1; @@ -215,6 +221,10 @@ @SuppressWarnings("unchecked") public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { + if (method.getName().equals("hashCode")) + { + return hashCode(); + } try { if (original == null) @@ -258,8 +268,19 @@ Set set = (Set) original; Set transformed = SetUtils.transformedSet(new HashSet(), transformer(sessionFactory)); transformed.addAll(set); - return transformed; + Set result = new HashSet(); + result.addAll(transformed); + return result; } + else if (original instanceof List) + { + List list = (List) original; + List transformed = ListUtils.transformedList(new ArrayList(), transformer(sessionFactory)); + transformed.addAll(list); + List result = new ArrayList(); + result.addAll(transformed); + return result; + } else if (original instanceof Collection) { // replace collection entries with proxied ones @@ -271,9 +292,14 @@ { // replace map entries with proxied ones Map map = (Map) original; - Map transformed = MapUtils.transformedMap(new HashMap(), transformer(sessionFactory), transformer(sessionFactory)); + Map transformed = MapUtils.transformedMap( + new HashMap(), + transformer(sessionFactory), + transformer(sessionFactory)); transformed.putAll(map); - return transformed; + Map result = new HashMap(); + result.putAll(transformed); + return result; } else { @@ -371,4 +397,17 @@ { return hibernateLazyService.get(); } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() + { + return new HashCodeBuilder(-469032761, 855711273) + .appendSuper(super.hashCode()) + .append(this.original) + .toHashCode(); + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |