From: <fc...@us...> - 2007-10-22 16:57:41
|
Revision: 476 http://openutils.svn.sourceforge.net/openutils/?rev=476&view=rev Author: fcarone Date: 2007-10-22 09:57:38 -0700 (Mon, 22 Oct 2007) Log Message: ----------- Lazy loading enhancements Modified Paths: -------------- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/aspects/HibernateLazyLoaderAspect.java trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/HibernateLazyRmiInterceptor.java 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/shared/LazyReference.java Modified: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/aspects/HibernateLazyLoaderAspect.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/aspects/HibernateLazyLoaderAspect.java 2007-10-17 17:06:38 UTC (rev 475) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/aspects/HibernateLazyLoaderAspect.java 2007-10-22 16:57:38 UTC (rev 476) @@ -17,6 +17,11 @@ public class HibernateLazyLoaderAspect implements LazyLoader, Serializable { + /** + * UID + */ + private static final long serialVersionUID = -365731708075101363L; + private static ThreadLocal<Paginator> paginator = new ThreadLocal<Paginator>(); private String className; @@ -25,17 +30,20 @@ private Serializable id; + private HibernateLazyService hibernateLazyService; + /** * Constructor * @param className parent class name * @param fieldName field to be lazy loaded * @param id id of current entity */ - public HibernateLazyLoaderAspect(String className, String fieldName, Serializable id) + public HibernateLazyLoaderAspect(String className, String fieldName, Serializable id, HibernateLazyService hibernateLazyService) { this.className = className; this.fieldName = fieldName; this.id = id; + this.hibernateLazyService = hibernateLazyService; } /** @@ -62,14 +70,12 @@ public Object loadObject() throws Exception { // Load from remote - HibernateLazyService hls = HibernateRmiProxyFactoryBean.hibernateLazyServiceTL.get(); - if (paginator.get() != null) { - return hls.invoke(className, fieldName, id, paginator.get().getFrom(), paginator.get().getSize()); + return hibernateLazyService.invoke(className, fieldName, id, paginator.get().getFrom(), paginator.get().getSize()); } - return hls.invoke(className, fieldName, id); + return hibernateLazyService.invoke(className, fieldName, id); } } Modified: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/HibernateLazyRmiInterceptor.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/HibernateLazyRmiInterceptor.java 2007-10-17 17:06:38 UTC (rev 475) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/HibernateLazyRmiInterceptor.java 2007-10-22 16:57:38 UTC (rev 476) @@ -1,5 +1,7 @@ package it.openutils.spring.rmibernate.server.aspects; +import it.openutils.spring.rmibernate.shared.managers.HibernateLazyService; + import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.hibernate.SessionFactory; @@ -36,13 +38,16 @@ */ public Object invoke(MethodInvocation invocation) throws Throwable { + logger.debug("Catched invocation: {}", invocation); try { Object retVal = invocation.proceed(); SerializationInterceptor.clean(); // Proxy class for serialization work - return SerializationInterceptor.getEnhancedObject(retVal, sessionFactory); + Object result = SerializationInterceptor.getEnhancedObject(retVal, sessionFactory); + logger.debug("Returning enhanced object {}", result); + return result; } catch (Throwable ex) { 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-17 17:06:38 UTC (rev 475) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java 2007-10-22 16:57:38 UTC (rev 476) @@ -2,6 +2,7 @@ import it.openutils.spring.rmibernate.server.aspects.util.EntitySerializer; import it.openutils.spring.rmibernate.shared.LazyReference; +import it.openutils.spring.rmibernate.shared.managers.HibernateLazyService; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -46,6 +47,8 @@ private static ThreadLocal<List<Object>> processed = new ThreadLocal<List<Object>>(); + private static ThreadLocal<HibernateLazyService> hibernateLazyService = new ThreadLocal<HibernateLazyService>(); + private static Map<Class, Object> proxies = Collections.synchronizedMap(new HashMap<Class, Object>()); /** @@ -74,6 +77,9 @@ this.sessionFactory = sessionFactory; } + /** + * Cleans the processed beans cache + */ public static void clean() { processed.set(null); @@ -112,6 +118,13 @@ return o; } + if (o.getClass().getName().startsWith("java.") && + !((o instanceof Collection) || (o instanceof Map))) + { + return o; + } + + // check if there is an empty constructor try { @@ -162,7 +175,7 @@ { if (proxies.containsKey(clazz)) { - Factory proxy = (Factory)proxies.get(clazz); + Factory proxy = (Factory) proxies.get(clazz); return proxy.newInstance(new Callback[]{callback, NoOp.INSTANCE }); } } @@ -185,7 +198,9 @@ }, new Callback[]{callback, NoOp.INSTANCE }); // store proxy - proxies.put(clazz, ((Factory)proxy).newInstance(new Callback[]{EmptyMethodInterceptor.INSTANCE, NoOp.INSTANCE })); + proxies.put(clazz, ((Factory) proxy).newInstance(new Callback[]{ + EmptyMethodInterceptor.INSTANCE, + NoOp.INSTANCE })); return proxy; } catch (Throwable t) @@ -201,7 +216,6 @@ @SuppressWarnings("unchecked") public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { - try { if (original == null) @@ -209,6 +223,12 @@ return null; } + if (original.getClass().getName().startsWith("java.") && + !(original instanceof Collection) || (original instanceof Map)) + { + return original; + } + if (processed.get() == null) { processed.set(new ArrayList<Object>()); @@ -219,6 +239,7 @@ if (original.getClass().isPrimitive()) { + log.debug("Non enhancing primitive type: {}", original.getClass().getName()); return original; } else if (original.getClass().isArray()) @@ -258,6 +279,8 @@ ReflectionUtils.doWithFields(original.getClass(), new ReflectionUtils.FieldCallback() { + + /** * {@inheritDoc} */ @@ -331,4 +354,23 @@ }; } + + /** + * Sets the hibernateLazyService. + * @param hibernateLazyService the hibernateLazyService to set + */ + public static void setHibernateLazyService(HibernateLazyService hibernateLazyService) + { + SerializationInterceptor.hibernateLazyService.set(hibernateLazyService); + } + + + /** + * Returns the hibernateLazyService. + * @return the hibernateLazyService + */ + public static HibernateLazyService getHibernateLazyService() + { + return hibernateLazyService.get(); + } } Modified: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/LazyReference.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/LazyReference.java 2007-10-17 17:06:38 UTC (rev 475) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/LazyReference.java 2007-10-22 16:57:38 UTC (rev 476) @@ -1,5 +1,6 @@ package it.openutils.spring.rmibernate.shared; +import it.openutils.spring.rmibernate.client.HibernateRmiProxyFactoryBean; import it.openutils.spring.rmibernate.client.aspects.HibernateLazyLoaderAspect; import java.io.ObjectStreamException; @@ -16,6 +17,11 @@ public class LazyReference implements Serializable { + /** + * UID + */ + private static final long serialVersionUID = 421364413345638150L; + private Serializable id; private String fieldName; @@ -68,7 +74,7 @@ return Enhancer.create( superclass, interfaces, - new HibernateLazyLoaderAspect(className, fieldName, id)); + new HibernateLazyLoaderAspect(className, fieldName, id, HibernateRmiProxyFactoryBean.hibernateLazyServiceTL.get())); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |