From: <fc...@us...> - 2007-10-25 16:50:37
|
Revision: 481 http://openutils.svn.sourceforge.net/openutils/?rev=481&view=rev Author: fcarone Date: 2007-10-25 09:50:39 -0700 (Thu, 25 Oct 2007) Log Message: ----------- It's now possible to send intercepted beans back to the server Modified Paths: -------------- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/HibernateRmiProxyFactoryBean.java 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/pagination/Paginator.java trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/EmptyMethodInterceptor.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/LazyReferenceAspect.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/server/aspects/util/EntitySerializer.java trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/exporter/HibernateRmiServiceExporter.java trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/managers/HibernateLazyServiceImpl.java 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/managers/HibernateLazyService.java Added Paths: ----------- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/aspects/ClientSerializationInterceptor.java trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/HibernateLazyLoaderCallbackFilter.java trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/IWriteReplace.java Property Changed: ---------------- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/HibernateRmiProxyFactoryBean.java 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/pagination/Paginator.java trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/EmptyMethodInterceptor.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/LazyReferenceAspect.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/server/aspects/util/EntitySerializer.java trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/exporter/HibernateRmiServiceExporter.java trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/managers/HibernateLazyServiceImpl.java 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/managers/HibernateLazyService.java Modified: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/HibernateRmiProxyFactoryBean.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/HibernateRmiProxyFactoryBean.java 2007-10-24 17:09:54 UTC (rev 480) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/HibernateRmiProxyFactoryBean.java 2007-10-25 16:50:39 UTC (rev 481) @@ -9,12 +9,17 @@ /** * ProxyFactoryBean for automatic injection of remote lazy loading proxies * @author mmolaschi - * @version $Id: $ + * @version $Id$ */ public class HibernateRmiProxyFactoryBean extends RmiProxyFactoryBean { /** + * + */ + private static final long serialVersionUID = 6545259150454309616L; + + /** * Store the hibernate lazy service to be used by remote lazy loading */ public static ThreadLocal<HibernateLazyService> hibernateLazyServiceTL = new ThreadLocal<HibernateLazyService>(); Property changes on: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/HibernateRmiProxyFactoryBean.java ___________________________________________________________________ Name: svn:keywords + Id Added: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/aspects/ClientSerializationInterceptor.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/aspects/ClientSerializationInterceptor.java (rev 0) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/aspects/ClientSerializationInterceptor.java 2007-10-25 16:50:39 UTC (rev 481) @@ -0,0 +1,43 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.spring.rmibernate.client.aspects; + +import java.io.Serializable; +import java.lang.reflect.Method; + +import net.sf.cglib.proxy.MethodInterceptor; +import net.sf.cglib.proxy.MethodProxy; + + +/** + * @author fcarone + * @version $Id: $ + */ +public class ClientSerializationInterceptor implements MethodInterceptor, Serializable +{ + + /** + * + */ + private static final long serialVersionUID = -2694751376173790718L; + + private HibernateLazyLoaderAspect hibernateLazyLoaderAspect; + + /** + * @param hlla + */ + public ClientSerializationInterceptor(HibernateLazyLoaderAspect hibernateLazyLoaderAspect) + { + this.hibernateLazyLoaderAspect = hibernateLazyLoaderAspect; + } + + /** + * {@inheritDoc} + */ + public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable + { + return hibernateLazyLoaderAspect.loadObject(); + } + +} 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-24 17:09:54 UTC (rev 480) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/aspects/HibernateLazyLoaderAspect.java 2007-10-25 16:50:39 UTC (rev 481) @@ -1,6 +1,5 @@ package it.openutils.spring.rmibernate.client.aspects; -import it.openutils.spring.rmibernate.client.HibernateRmiProxyFactoryBean; import it.openutils.spring.rmibernate.client.pagination.Paginator; import it.openutils.spring.rmibernate.shared.managers.HibernateLazyService; @@ -12,7 +11,7 @@ /** * Aspect that does remote lazy loading on cglib proxy * @author mmolaschi - * @version $Id: $ + * @version $Id$ */ public class HibernateLazyLoaderAspect implements LazyLoader, Serializable { Property changes on: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/aspects/HibernateLazyLoaderAspect.java ___________________________________________________________________ Name: svn:keywords + Id Modified: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/pagination/Paginator.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/pagination/Paginator.java 2007-10-24 17:09:54 UTC (rev 480) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/pagination/Paginator.java 2007-10-25 16:50:39 UTC (rev 481) @@ -2,7 +2,7 @@ /** * @author mmolaschi - * @version $Id: $ + * @version $Id$ */ public class Paginator { Property changes on: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/client/pagination/Paginator.java ___________________________________________________________________ Name: svn:keywords + Id Modified: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/EmptyMethodInterceptor.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/EmptyMethodInterceptor.java 2007-10-24 17:09:54 UTC (rev 480) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/EmptyMethodInterceptor.java 2007-10-25 16:50:39 UTC (rev 481) @@ -8,7 +8,7 @@ /** * @author mmolaschi - * @version $Id: $ + * @version $Id$ */ public class EmptyMethodInterceptor implements MethodInterceptor { Property changes on: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/EmptyMethodInterceptor.java ___________________________________________________________________ Name: svn:keywords + 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-24 17:09:54 UTC (rev 480) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/HibernateLazyRmiInterceptor.java 2007-10-25 16:50:39 UTC (rev 481) @@ -1,7 +1,5 @@ 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; @@ -12,7 +10,7 @@ /** * Main server interceptor on rmi calls * @author mmolaschi - * @version $Id: $ + * @version $Id$ */ public class HibernateLazyRmiInterceptor implements MethodInterceptor { Property changes on: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/HibernateLazyRmiInterceptor.java ___________________________________________________________________ Name: svn:keywords + Id Modified: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/LazyReferenceAspect.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/LazyReferenceAspect.java 2007-10-24 17:09:54 UTC (rev 480) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/LazyReferenceAspect.java 2007-10-25 16:50:39 UTC (rev 481) @@ -11,7 +11,7 @@ /** * Aspect on lazy fields to intercept writeReplace * @author mmolaschi - * @version $Id: $ + * @version $Id$ */ public class LazyReferenceAspect implements MethodInterceptor { @@ -33,7 +33,6 @@ */ public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { - // TODO Auto-generated method stub return lazyReference; } Property changes on: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/LazyReferenceAspect.java ___________________________________________________________________ Name: svn:keywords + Id 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-24 17:09:54 UTC (rev 480) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java 2007-10-25 16:50:39 UTC (rev 481) @@ -40,7 +40,7 @@ /** * Proxy object with {@link EntitySerializer} and Intercept writeReplace calls * @author mmolaschi - * @version $Id: $ + * @version $Id$ */ public class SerializationInterceptor implements MethodInterceptor { @@ -118,13 +118,11 @@ return o; } - if (o.getClass().getName().startsWith("java.") && - !((o instanceof Collection) || (o instanceof Map))) + if (o.getClass().getName().startsWith("java.") && !((o instanceof Collection) || (o instanceof Map))) { return o; } - // check if there is an empty constructor try { @@ -223,8 +221,9 @@ return null; } - if (original.getClass().getName().startsWith("java.") && - !(original instanceof Collection) || (original instanceof Map)) + if (original.getClass().getName().startsWith("java.") + && !(original instanceof Collection) + || (original instanceof Map)) { return original; } @@ -279,8 +278,6 @@ ReflectionUtils.doWithFields(original.getClass(), new ReflectionUtils.FieldCallback() { - - /** * {@inheritDoc} */ @@ -354,7 +351,6 @@ }; } - /** * Sets the hibernateLazyService. * @param hibernateLazyService the hibernateLazyService to set @@ -364,7 +360,6 @@ SerializationInterceptor.hibernateLazyService.set(hibernateLazyService); } - /** * Returns the hibernateLazyService. * @return the hibernateLazyService Property changes on: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/SerializationInterceptor.java ___________________________________________________________________ Name: svn:keywords + Id Modified: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/util/EntitySerializer.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/util/EntitySerializer.java 2007-10-24 17:09:54 UTC (rev 480) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/util/EntitySerializer.java 2007-10-25 16:50:39 UTC (rev 481) @@ -5,7 +5,7 @@ /** * Interface for intercepting writeReplace method calls * @author mmolaschi - * @version $Id: $ + * @version $Id$ */ public interface EntitySerializer { Property changes on: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/aspects/util/EntitySerializer.java ___________________________________________________________________ Name: svn:keywords + Id Modified: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/exporter/HibernateRmiServiceExporter.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/exporter/HibernateRmiServiceExporter.java 2007-10-24 17:09:54 UTC (rev 480) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/exporter/HibernateRmiServiceExporter.java 2007-10-25 16:50:39 UTC (rev 481) @@ -12,7 +12,7 @@ /** * Rmi exporter that checks laziness of bean fields in all object graph * @author mmolaschi - * @version $Id: $ + * @version $Id$ */ public class HibernateRmiServiceExporter extends RmiServiceExporter { Property changes on: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/exporter/HibernateRmiServiceExporter.java ___________________________________________________________________ Name: svn:keywords + Id Modified: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/managers/HibernateLazyServiceImpl.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/managers/HibernateLazyServiceImpl.java 2007-10-24 17:09:54 UTC (rev 480) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/managers/HibernateLazyServiceImpl.java 2007-10-25 16:50:39 UTC (rev 481) @@ -35,7 +35,7 @@ /** * Server side implementation of remote lazy loading calls * @author mmolaschi - * @version $Id: $ + * @version $Id$ */ public class HibernateLazyServiceImpl implements HibernateLazyService { Property changes on: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/server/managers/HibernateLazyServiceImpl.java ___________________________________________________________________ Name: svn:keywords + Id Added: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/HibernateLazyLoaderCallbackFilter.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/HibernateLazyLoaderCallbackFilter.java (rev 0) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/HibernateLazyLoaderCallbackFilter.java 2007-10-25 16:50:39 UTC (rev 481) @@ -0,0 +1,38 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.spring.rmibernate.shared; + +import java.io.Serializable; +import java.lang.reflect.Method; + +import org.apache.commons.lang.StringUtils; + +import net.sf.cglib.proxy.CallbackFilter; + + +/** + * @author fcarone + * @version $Id: $ + */ +public class HibernateLazyLoaderCallbackFilter implements CallbackFilter, Serializable +{ + + /** + * + */ + private static final long serialVersionUID = 3409438660731356981L; + + /** + * {@inheritDoc} + */ + public int accept(Method method) + { + if (StringUtils.equals(method.getName(), "writeReplace")) + { + return 1; + } + return 0; + } + +} Added: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/IWriteReplace.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/IWriteReplace.java (rev 0) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/IWriteReplace.java 2007-10-25 16:50:39 UTC (rev 481) @@ -0,0 +1,21 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.spring.rmibernate.shared; + +import java.io.ObjectStreamException; + + +/** + * @author fcarone + * @version $Id: $ + * This interface is necessary to enable the callback on the CGLib Enhanced dataobject + */ +public interface IWriteReplace +{ + /** + * @return The replaced object + * @throws ObjectStreamException Unmarshalling exception + */ + Object writeReplace() throws ObjectStreamException; +} 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-24 17:09:54 UTC (rev 480) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/LazyReference.java 2007-10-25 16:50:39 UTC (rev 481) @@ -1,18 +1,20 @@ package it.openutils.spring.rmibernate.shared; import it.openutils.spring.rmibernate.client.HibernateRmiProxyFactoryBean; +import it.openutils.spring.rmibernate.client.aspects.ClientSerializationInterceptor; import it.openutils.spring.rmibernate.client.aspects.HibernateLazyLoaderAspect; import java.io.ObjectStreamException; import java.io.Serializable; +import net.sf.cglib.proxy.Callback; import net.sf.cglib.proxy.Enhancer; /** * Store lazy reference * @author mmolaschi - * @version $Id: $ + * @version $Id$ */ public class LazyReference implements Serializable { @@ -64,17 +66,24 @@ { // get proxy superclass Class superclass = Class.forName(fieldClassName); - Class[] interfaces = null; + Class[] interfaces = new Class[]{Serializable.class }; + // if superclass is an interface add it to interfaces if (superclass.isInterface()) { - interfaces = new Class[]{superclass}; + interfaces = new Class[]{superclass, Serializable.class, IWriteReplace.class }; } + + HibernateLazyLoaderAspect hlla = new HibernateLazyLoaderAspect( + className, + fieldName, + id, + HibernateRmiProxyFactoryBean.hibernateLazyServiceTL.get()); + // return proxy - return Enhancer.create( - superclass, - interfaces, - new HibernateLazyLoaderAspect(className, fieldName, id, HibernateRmiProxyFactoryBean.hibernateLazyServiceTL.get())); + return Enhancer.create(superclass, interfaces, new HibernateLazyLoaderCallbackFilter(), new Callback[]{ + hlla, + new ClientSerializationInterceptor(hlla) }); } @@ -108,13 +117,11 @@ this.fieldName = fieldName; } - public String getFieldClassName() { return fieldClassName; } - public void setFieldClassName(String fieldClassName) { this.fieldClassName = fieldClassName; Property changes on: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/LazyReference.java ___________________________________________________________________ Name: svn:keywords + Id Modified: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/managers/HibernateLazyService.java =================================================================== --- trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/managers/HibernateLazyService.java 2007-10-24 17:09:54 UTC (rev 480) +++ trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/managers/HibernateLazyService.java 2007-10-25 16:50:39 UTC (rev 481) @@ -7,7 +7,7 @@ /** * Interface for server-side remote lazy loading calls * @author mmolaschi - * @version $Id: $ + * @version $Id$ */ public interface HibernateLazyService { Property changes on: trunk/openutils-spring-rmibernate/src/main/java/it/openutils/spring/rmibernate/shared/managers/HibernateLazyService.java ___________________________________________________________________ Name: svn:keywords + Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |