Revision: 483 http://openutils.svn.sourceforge.net/openutils/?rev=483&view=rev Author: fcarone Date: 2007-10-26 03:58:18 -0700 (Fri, 26 Oct 2007) Log Message: ----------- Fix order of instanceof in serializationinterceptor 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-26 08:56:04 UTC (rev 482) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java 2007-10-26 10:58:18 UTC (rev 483) @@ -251,6 +251,13 @@ } return array; } + else if (original instanceof Set) + { + // replace set entries with proxied ones + Set set = (Set) original; + SetUtils.transformedSet(set, transformer(sessionFactory)); + return set; + } else if (original instanceof Collection) { // replace collection entries with proxied ones @@ -265,13 +272,6 @@ MapUtils.transformedMap(map, transformer(sessionFactory), transformer(sessionFactory)); return map; } - else if (original instanceof Set) - { - // replace set entries with proxied ones - Set set = (Set) original; - SetUtils.transformedSet(set, transformer(sessionFactory)); - return set; - } else { // cycle on bean fields This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mol...@us...> - 2007-10-31 11:05:07
|
Revision: 487 http://openutils.svn.sourceforge.net/openutils/?rev=487&view=rev Author: molaschi Date: 2007-10-31 04:05:02 -0700 (Wed, 31 Oct 2007) Log Message: ----------- bug on Set and Map transformation for Enhancer injection 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-26 11:06:59 UTC (rev 486) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java 2007-10-31 11:05:02 UTC (rev 487) @@ -11,6 +11,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -255,8 +256,9 @@ { // replace set entries with proxied ones Set set = (Set) original; - SetUtils.transformedSet(set, transformer(sessionFactory)); - return set; + Set transformed = SetUtils.transformedSet(new HashSet(), transformer(sessionFactory)); + transformed.addAll(set); + return transformed; } else if (original instanceof Collection) { @@ -269,8 +271,9 @@ { // replace map entries with proxied ones Map map = (Map) original; - MapUtils.transformedMap(map, transformer(sessionFactory), transformer(sessionFactory)); - return map; + Map transformed = MapUtils.transformedMap(new HashMap(), transformer(sessionFactory), transformer(sessionFactory)); + transformed.putAll(map); + return transformed; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
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. |
Revision: 709 http://openutils.svn.sourceforge.net/openutils/?rev=709&view=rev Author: fcarone Date: 2008-02-29 07:33:01 -0800 (Fri, 29 Feb 2008) Log Message: ----------- fix for check on the original object during interception copyright added 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 2008-02-27 13:19:33 UTC (rev 708) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java 2008-02-29 15:33:01 UTC (rev 709) @@ -1,3 +1,19 @@ +/* + * Copyright Openmind http://www.openmindonline.it + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package it.openutils.spring.rmibernate.server.aspects; import it.openutils.spring.rmibernate.server.aspects.util.EntitySerializer; @@ -52,6 +68,7 @@ private static ThreadLocal<HibernateLazyService> hibernateLazyService = new ThreadLocal<HibernateLazyService>(); + @SuppressWarnings("unchecked") private static Map<Class, Object> proxies = Collections.synchronizedMap(new HashMap<Class, Object>()); /** @@ -106,6 +123,7 @@ * @param lazyRef reference to a lazy field * @return proxied object */ + @SuppressWarnings("unchecked") public static Object getEnhancedObject(Object o, SessionFactory sessionFactory, LazyReference lazyRef) { if (o == null) @@ -233,8 +251,7 @@ } if (original.getClass().getName().startsWith("java.") - && !(original instanceof Collection) - || (original instanceof Map)) + && !((original instanceof Collection) || (original instanceof Map))) { return original; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
Revision: 710 http://openutils.svn.sourceforge.net/openutils/?rev=710&view=rev Author: fcarone Date: 2008-02-29 08:53:04 -0800 (Fri, 29 Feb 2008) Log Message: ----------- PersistentCollection is more general than PersistentSet 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 2008-02-29 15:33:01 UTC (rev 709) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java 2008-02-29 16:53:04 UTC (rev 710) @@ -45,15 +45,14 @@ import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.SetUtils; import org.apache.commons.collections.Transformer; +import org.apache.commons.lang.builder.HashCodeBuilder; import org.hibernate.EntityMode; import org.hibernate.SessionFactory; import org.hibernate.collection.PersistentCollection; -import org.hibernate.collection.PersistentSet; import org.hibernate.proxy.HibernateProxy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.ReflectionUtils; -import org.apache.commons.lang.builder.HashCodeBuilder; /** @@ -132,7 +131,7 @@ } if (!(o instanceof HibernateProxy) - && !(o instanceof PersistentSet) + && !(o instanceof PersistentCollection) && processed.get() != null && processed.get().contains(o)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
Revision: 712 http://openutils.svn.sourceforge.net/openutils/?rev=712&view=rev Author: fcarone Date: 2008-03-03 04:10:04 -0800 (Mon, 03 Mar 2008) Log Message: ----------- check if the map has at least 1 element before transforming (required by commons collections) 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 2008-03-02 23:28:17 UTC (rev 711) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java 2008-03-03 12:10:04 UTC (rev 712) @@ -312,7 +312,10 @@ new HashMap(), transformer(sessionFactory), transformer(sessionFactory)); - transformed.putAll(map); + if (map.size() > 0) + { + transformed.putAll(map); + } Map result = new HashMap(); result.putAll(transformed); return result; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
Revision: 713 http://openutils.svn.sourceforge.net/openutils/?rev=713&view=rev Author: fcarone Date: 2008-03-03 04:11:11 -0800 (Mon, 03 Mar 2008) Log Message: ----------- explanation added 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 2008-03-03 12:10:04 UTC (rev 712) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java 2008-03-03 12:11:11 UTC (rev 713) @@ -312,6 +312,9 @@ new HashMap(), transformer(sessionFactory), transformer(sessionFactory)); + + // this is needed since AbstractHashedMap used by commons collections + // needs at least 1 element before transforming if (map.size() > 0) { transformed.putAll(map); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
Revision: 739 http://openutils.svn.sourceforge.net/openutils/?rev=739&view=rev Author: fcarone Date: 2008-03-14 02:15:06 -0700 (Fri, 14 Mar 2008) Log Message: ----------- fields callback from anon to inner 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 2008-03-14 09:13:18 UTC (rev 738) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java 2008-03-14 09:15:06 UTC (rev 739) @@ -46,6 +46,7 @@ import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.SetUtils; import org.apache.commons.collections.Transformer; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.HashCodeBuilder; import org.hibernate.EntityMode; import org.hibernate.SessionFactory; @@ -61,9 +62,61 @@ * @author mmolaschi * @version $Id$ */ -public class SerializationInterceptor implements MethodInterceptor +public final class SerializationInterceptor implements MethodInterceptor { + private final class FieldEnhancementCallback implements ReflectionUtils.FieldCallback + { + + /** + * {@inheritDoc} + */ + public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException + { + if (StringUtils.indexOf(field.getName(), "CGLIB$") == 0) + { + return; + } + + // set field accessible + field.setAccessible(true); + + // get original value + Object oldValue = field.get(original); + + // get new value + Object newValue = null; + + if (oldValue instanceof PersistentCollection || oldValue instanceof HibernateProxy) + { + // if this field is a hibernate proxy or a persistent collection store reference + + LazyReference lazyRef = new LazyReference(); + lazyRef.setFieldClassName(field.getType().getName()); + lazyRef.setClassName(original.getClass().getName()); + lazyRef.setFieldName(field.getName()); + // load id + lazyRef.setId(sessionFactory.getClassMetadata(original.getClass()).getIdentifier( + original, + EntityMode.POJO)); + + // get proxy for lazy + newValue = SerializationInterceptor.getEnhancedObject(oldValue, sessionFactory, lazyRef); + } + else + { + // get default proxy + newValue = SerializationInterceptor.getEnhancedObject(oldValue, sessionFactory); + } + + // if there is a variation store it + if (newValue != oldValue) + { + field.set(original, newValue); + } + } + } + private static ThreadLocal<List<Object>> processed = new ThreadLocal<List<Object>>(); private static ThreadLocal<HibernateLazyService> hibernateLazyService = new ThreadLocal<HibernateLazyService>(); @@ -332,52 +385,7 @@ else { // cycle on bean fields - ReflectionUtils.doWithFields(original.getClass(), new ReflectionUtils.FieldCallback() - { - - /** - * {@inheritDoc} - */ - public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException - { - // set field accessible - field.setAccessible(true); - - // get original value - Object oldValue = field.get(original); - - // get new value - Object newValue = null; - - if (oldValue instanceof HibernateProxy || oldValue instanceof PersistentCollection) - { - // if this field is a hibernate proxy or a persistent collection store reference - LazyReference lazyRef = new LazyReference(); - lazyRef.setFieldClassName(field.getType().getName()); - lazyRef.setClassName(original.getClass().getName()); - lazyRef.setFieldName(field.getName()); - // load id - lazyRef.setId(sessionFactory.getClassMetadata(original.getClass()).getIdentifier( - original, - EntityMode.POJO)); - - // get proxy for lazy - newValue = SerializationInterceptor.getEnhancedObject(oldValue, sessionFactory, lazyRef); - } - else - { - // get default proxy - newValue = SerializationInterceptor.getEnhancedObject(oldValue, sessionFactory); - } - - // if there is a variation store it - if (newValue != oldValue) - { - field.set(original, newValue); - } - } - - }); + ReflectionUtils.doWithFields(original.getClass(), new FieldEnhancementCallback()); } return original; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |