You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by cl...@apache.org on 2008/11/26 21:21:13 UTC
svn commit: r720969 - in
/jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl:
AbstractLazyLoader.java BeanLazyLoader.java CollectionLazyLoader.java
Author: clombart
Date: Wed Nov 26 12:21:13 2008
New Revision: 720969
URL: http://svn.apache.org/viewvc?rev=720969&view=rev
Log:
Patch for JCR-1869 (Make lazy loading proxy callback Serializable) provided by Stephane Landelle
Modified:
jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/AbstractLazyLoader.java
jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/BeanLazyLoader.java
jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/CollectionLazyLoader.java
Modified: jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/AbstractLazyLoader.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/AbstractLazyLoader.java?rev=720969&r1=720968&r2=720969&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/AbstractLazyLoader.java (original)
+++ jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/AbstractLazyLoader.java Wed Nov 26 12:21:13 2008
@@ -1,5 +1,6 @@
package org.apache.jackrabbit.ocm.manager.objectconverter.impl;
+import java.io.Serializable;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@@ -13,7 +14,7 @@
*
* @author <a href="mailto:slandelle@excilys.com">Stephane LANDELLE</a>
*/
-public abstract class AbstractLazyLoader implements InvocationHandler {
+public abstract class AbstractLazyLoader implements InvocationHandler, Serializable {
/**
* The logger
Modified: jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/BeanLazyLoader.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/BeanLazyLoader.java?rev=720969&r1=720968&r2=720969&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/BeanLazyLoader.java (original)
+++ jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/BeanLazyLoader.java Wed Nov 26 12:21:13 2008
@@ -17,8 +17,6 @@
package org.apache.jackrabbit.ocm.manager.objectconverter.impl;
-import java.io.Serializable;
-
import javax.jcr.Node;
import javax.jcr.Session;
@@ -26,15 +24,15 @@
import org.apache.jackrabbit.ocm.mapper.model.BeanDescriptor;
import org.apache.jackrabbit.ocm.mapper.model.ClassDescriptor;
-public class BeanLazyLoader extends AbstractLazyLoader implements Serializable {
+public class BeanLazyLoader extends AbstractLazyLoader {
- private BeanConverter beanConverter;
- private Session session;
- private Node parentNode;
- private BeanDescriptor beanDescriptor;
- private ClassDescriptor beanClassDescriptor;
- private Class<?> beanClass;
- private Object parent;
+ private volatile BeanConverter beanConverter;
+ private volatile Session session;
+ private volatile Node parentNode;
+ private volatile BeanDescriptor beanDescriptor;
+ private volatile ClassDescriptor beanClassDescriptor;
+ private volatile Class<?> beanClass;
+ private volatile Object parent;
public BeanLazyLoader(BeanConverter beanConverter, Session session, Node parentNode, BeanDescriptor beanDescriptor,
ClassDescriptor beanClassDescriptor, Class<?> beanClass, Object parent) {
@@ -53,6 +51,10 @@
throw new IllegalStateException("Proxy already initialized");
}
+ if (session == null) {
+ throw new IllegalStateException("Session null, probably because bean was serialized. Impossible to lazy load.");
+ }
+
Object target = beanConverter.getObject(session, parentNode, beanDescriptor, beanClassDescriptor, beanClass, parent);
clean();
@@ -64,6 +66,7 @@
session = null;
parentNode = null;
beanDescriptor = null;
+ beanClassDescriptor = null;
parent = null;
}
}
Modified: jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/CollectionLazyLoader.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/CollectionLazyLoader.java?rev=720969&r1=720968&r2=720969&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/CollectionLazyLoader.java (original)
+++ jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/CollectionLazyLoader.java Wed Nov 26 12:21:13 2008
@@ -26,10 +26,10 @@
public class CollectionLazyLoader extends AbstractLazyLoader {
- private CollectionConverter collectionConverter;
- private Session session;
- private Node collectionParentNode;
- private CollectionDescriptor collectionDescriptor;
+ private volatile CollectionConverter collectionConverter;
+ private volatile Session session;
+ private volatile Node collectionParentNode;
+ private volatile CollectionDescriptor collectionDescriptor;
private Class<?> collectionFieldClass;
public CollectionLazyLoader(CollectionConverter collectionConverter, Session session, Node parentNode,
@@ -46,6 +46,11 @@
if (isInitialized()) {
throw new IllegalStateException("Proxy already initialized");
}
+
+ if (session == null) {
+ throw new IllegalStateException("Session null, probably because bean was serialized. Impossible to lazy load.");
+ }
+
ManageableObjects objects = collectionConverter.getCollection(session, collectionParentNode, collectionDescriptor,
collectionFieldClass);
Object target = objects.getObjects();