You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2016/02/10 18:11:34 UTC

svn commit: r1729661 - in /sling/trunk/bundles/jcr/resource/src: main/java/org/apache/sling/jcr/resource/ main/java/org/apache/sling/jcr/resource/internal/ main/java/org/apache/sling/jcr/resource/internal/helper/jcr/ test/java/org/apache/sling/jcr/reso...

Author: cziegeler
Date: Wed Feb 10 17:11:34 2016
New Revision: 1729661

URL: http://svn.apache.org/viewvc?rev=1729661&view=rev
Log:
SLING-5506 : JcrResourceProvider must be stateless

Modified:
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrModifiablePropertyMap.java
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrPropertyMap.java
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/HelperData.java
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrValueMap.java
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/package-info.java
    sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMapTest.java
    sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/JcrNodeResourceIteratorTest.java
    sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemResourceFactoryTest.java
    sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java
    sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrTestNodeResource.java

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrModifiablePropertyMap.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrModifiablePropertyMap.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrModifiablePropertyMap.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrModifiablePropertyMap.java Wed Feb 10 17:11:34 2016
@@ -169,7 +169,7 @@ public final class JcrModifiableProperty
             if ( this.changedProperties.contains(NodeUtil.MIXIN_TYPES) ) {
                 if ( cache.containsKey(NodeUtil.MIXIN_TYPES) ) {
                     final JcrPropertyMapCacheEntry entry = cache.get(NodeUtil.MIXIN_TYPES);
-                    NodeUtil.handleMixinTypes(node, entry.convertToType(String[].class, node, dynamicClassLoader));
+                    NodeUtil.handleMixinTypes(node, entry.convertToType(String[].class, node, getDynamicClassLoader()));
                 } else {
                     // remove all mixin types!
                     NodeUtil.handleMixinTypes(node, null);
@@ -182,9 +182,9 @@ public final class JcrModifiableProperty
                     if ( cache.containsKey(key) ) {
                         final JcrPropertyMapCacheEntry entry = cache.get(key);
                         if ( entry.isArray() ) {
-                            node.setProperty(name, entry.convertToType(Value[].class, node, dynamicClassLoader));
+                            node.setProperty(name, entry.convertToType(Value[].class, node, getDynamicClassLoader()));
                         } else {
-                            node.setProperty(name, entry.convertToType(Value.class, node, dynamicClassLoader));
+                            node.setProperty(name, entry.convertToType(Value.class, node, getDynamicClassLoader()));
                         }
                     } else {
                         if ( node.hasProperty(name) ) {

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrPropertyMap.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrPropertyMap.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrPropertyMap.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrPropertyMap.java Wed Feb 10 17:11:34 2016
@@ -63,7 +63,7 @@ public class JcrPropertyMap
     /** keep all prefixes for escaping */
     private String[] namespacePrefixes;
 
-    final ClassLoader dynamicClassLoader;
+    private final ClassLoader dynamicClassLoader;
 
     /**
      * Create a new JCR property map based on a node.
@@ -87,6 +87,10 @@ public class JcrPropertyMap
         this.dynamicClassLoader = dynamicCL;
     }
 
+    protected ClassLoader getDynamicClassLoader() {
+        return this.dynamicClassLoader;
+    }
+
     /**
      * Get the node.
      *
@@ -111,6 +115,7 @@ public class JcrPropertyMap
     /**
      * @see org.apache.sling.api.resource.ValueMap#get(java.lang.String, java.lang.Class)
      */
+    @Override
     @SuppressWarnings("unchecked")
     public <T> T get(final String aKey, final Class<T> type) {
         final String key = checkKey(aKey);
@@ -122,12 +127,13 @@ public class JcrPropertyMap
         if ( entry == null ) {
             return null;
         }
-        return entry.convertToType(type, this.node, this.dynamicClassLoader);
+        return entry.convertToType(type, this.node, this.getDynamicClassLoader());
     }
 
     /**
      * @see org.apache.sling.api.resource.ValueMap#get(java.lang.String, java.lang.Object)
      */
+    @Override
     @SuppressWarnings("unchecked")
     public <T> T get(final String aKey,final T defaultValue) {
         final String key = checkKey(aKey);
@@ -152,6 +158,7 @@ public class JcrPropertyMap
     /**
      * @see java.util.Map#get(java.lang.Object)
      */
+    @Override
     public Object get(final Object aKey) {
         final String key = checkKey(aKey.toString());
         final JcrPropertyMapCacheEntry entry = this.read(key);
@@ -162,6 +169,7 @@ public class JcrPropertyMap
     /**
      * @see java.util.Map#containsKey(java.lang.Object)
      */
+    @Override
     public boolean containsKey(final Object key) {
         return get(key) != null;
     }
@@ -169,6 +177,7 @@ public class JcrPropertyMap
     /**
      * @see java.util.Map#containsValue(java.lang.Object)
      */
+    @Override
     public boolean containsValue(final Object value) {
         readFully();
         return valueCache.containsValue(value);
@@ -177,6 +186,7 @@ public class JcrPropertyMap
     /**
      * @see java.util.Map#isEmpty()
      */
+    @Override
     public boolean isEmpty() {
         return size() == 0;
     }
@@ -184,6 +194,7 @@ public class JcrPropertyMap
     /**
      * @see java.util.Map#size()
      */
+    @Override
     public int size() {
         readFully();
         return cache.size();
@@ -192,6 +203,7 @@ public class JcrPropertyMap
     /**
      * @see java.util.Map#entrySet()
      */
+    @Override
     public Set<java.util.Map.Entry<String, Object>> entrySet() {
         readFully();
         final Map<String, Object> sourceMap;
@@ -206,6 +218,7 @@ public class JcrPropertyMap
     /**
      * @see java.util.Map#keySet()
      */
+    @Override
     public Set<String> keySet() {
         readFully();
         return cache.keySet();
@@ -214,6 +227,7 @@ public class JcrPropertyMap
     /**
      * @see java.util.Map#values()
      */
+    @Override
     public Collection<Object> values() {
         readFully();
         final Map<String, Object> sourceMap;
@@ -423,18 +437,22 @@ public class JcrPropertyMap
 
     // ---------- Unsupported Modification methods
 
+    @Override
     public void clear() {
         throw new UnsupportedOperationException();
     }
 
+    @Override
     public Object put(String key, Object value) {
         throw new UnsupportedOperationException();
     }
 
+    @Override
     public void putAll(Map<? extends String, ? extends Object> t) {
         throw new UnsupportedOperationException();
     }
 
+    @Override
     public Object remove(Object key) {
         throw new UnsupportedOperationException();
     }

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/HelperData.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/HelperData.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/HelperData.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/HelperData.java Wed Feb 10 17:11:34 2016
@@ -18,9 +18,12 @@
  */
 package org.apache.sling.jcr.resource.internal;
 
+import java.util.concurrent.atomic.AtomicReference;
+
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
 import org.apache.sling.jcr.resource.internal.helper.jcr.PathMapper;
 
 /**
@@ -29,15 +32,15 @@ import org.apache.sling.jcr.resource.int
  */
 public class HelperData {
 
-    public final ClassLoader dynamicClassLoader;
+    private final AtomicReference<DynamicClassLoaderManager> dynamicClassLoaderManagerReference;
 
     public final PathMapper pathMapper;
 
     private volatile String[] namespacePrefixes;
 
-    public HelperData(final ClassLoader dynamicClassLoader,
+    public HelperData(final AtomicReference<DynamicClassLoaderManager> dynamicClassLoaderManagerReference,
             final PathMapper pathMapper) {
-        this.dynamicClassLoader = dynamicClassLoader;
+        this.dynamicClassLoaderManagerReference = dynamicClassLoaderManagerReference;
         this.pathMapper = pathMapper;
     }
 
@@ -48,4 +51,12 @@ public class HelperData {
         }
         return this.namespacePrefixes;
     }
+
+    public ClassLoader getDynamicClassLoader() {
+        final DynamicClassLoaderManager dclm = this.dynamicClassLoaderManagerReference.get();
+        if ( dclm == null ) {
+            return null;
+        }
+        return dclm.getDynamicClassLoader();
+    }
 }

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java Wed Feb 10 17:11:34 2016
@@ -101,7 +101,7 @@ public final class JcrModifiableValueMap
         if ( entry == null ) {
             return null;
         }
-        return entry.convertToType(type, node, helper.dynamicClassLoader);
+        return entry.convertToType(type, node, helper.getDynamicClassLoader());
     }
 
     /**
@@ -446,13 +446,13 @@ public final class JcrModifiableValueMap
             this.cache.put(key, entry);
             final String name = escapeKeyName(key);
             if ( NodeUtil.MIXIN_TYPES.equals(name) ) {
-                NodeUtil.handleMixinTypes(node, entry.convertToType(String[].class, node, this.helper.dynamicClassLoader));
+                NodeUtil.handleMixinTypes(node, entry.convertToType(String[].class, node, this.helper.getDynamicClassLoader()));
             } else if ( "jcr:primaryType".equals(name) ) {
-                node.setPrimaryType(entry.convertToType(String.class, node, this.helper.dynamicClassLoader));
+                node.setPrimaryType(entry.convertToType(String.class, node, this.helper.getDynamicClassLoader()));
             } else if ( entry.isArray() ) {
-                node.setProperty(name, entry.convertToType(Value[].class, node, this.helper.dynamicClassLoader));
+                node.setProperty(name, entry.convertToType(Value[].class, node, this.helper.getDynamicClassLoader()));
             } else {
-                node.setProperty(name, entry.convertToType(Value.class, node, this.helper.dynamicClassLoader));
+                node.setProperty(name, entry.convertToType(Value.class, node, this.helper.getDynamicClassLoader()));
             }
         } catch (final RepositoryException re) {
             throw new IllegalArgumentException("Value for key " + key + " can't be put into node: " + value, re);

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrValueMap.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrValueMap.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrValueMap.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrValueMap.java Wed Feb 10 17:11:34 2016
@@ -29,7 +29,7 @@ public class JcrValueMap extends JcrProp
     private final HelperData helper;
 
     public JcrValueMap(final Node node, final HelperData helper) {
-        super(node, helper.dynamicClassLoader);
+        super(node, null);
         this.helper = helper;
     }
 
@@ -38,4 +38,8 @@ public class JcrValueMap extends JcrProp
         return this.helper.getNamespacePrefixes(this.getNode().getSession());
     }
 
+    @Override
+    protected ClassLoader getDynamicClassLoader() {
+        return helper.getDynamicClassLoader();
+    }
 }

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java Wed Feb 10 17:11:34 2016
@@ -137,7 +137,7 @@ class JcrNodeResource extends JcrItemRes
             try {
                 getNode().getSession().checkPermission(getPath(),
                     "set_property");
-                return (Type) new JcrModifiablePropertyMap(getNode(), this.helper.dynamicClassLoader);
+                return (Type) new JcrModifiablePropertyMap(getNode(), this.helper.getDynamicClassLoader());
             } catch (AccessControlException ace) {
                 // the user has no write permission, cannot adapt
                 LOGGER.debug(

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java Wed Feb 10 17:11:34 2016
@@ -22,6 +22,7 @@ import static org.apache.sling.api.resou
 
 import java.util.Iterator;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
 
 import javax.annotation.Nonnull;
 import javax.jcr.Credentials;
@@ -51,17 +52,17 @@ public class JcrProviderStateFactory {
 
     private final SlingRepository repository;
 
-    private final DynamicClassLoaderManager dynamicClassLoaderManager;
+    private final AtomicReference<DynamicClassLoaderManager> dynamicClassLoaderManagerReference;
 
     private final PathMapper pathMapper;
 
     public JcrProviderStateFactory(final ServiceReference repositoryReference,
             final SlingRepository repository,
-            final DynamicClassLoaderManager dynamicClassLoaderManager,
+            final AtomicReference<DynamicClassLoaderManager> dynamicClassLoaderManagerReference,
             final PathMapper pathMapper) {
         this.repository = repository;
         this.repositoryReference = repositoryReference;
-        this.dynamicClassLoaderManager = dynamicClassLoaderManager;
+        this.dynamicClassLoaderManagerReference = dynamicClassLoaderManagerReference;
         this.pathMapper = pathMapper;
     }
 
@@ -165,7 +166,7 @@ public class JcrProviderStateFactory {
 
         session = handleImpersonation(session, authenticationInfo, logoutSession);
 
-        final HelperData data = new HelperData(this.dynamicClassLoaderManager.getDynamicClassLoader(), this.pathMapper);
+        final HelperData data = new HelperData(this.dynamicClassLoaderManagerReference, this.pathMapper);
         if (bc == null) {
             return new JcrProviderState(session, data, logoutSession);
         } else {

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java Wed Feb 10 17:11:34 2016
@@ -27,6 +27,7 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicReference;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
@@ -86,6 +87,9 @@ import org.slf4j.LoggerFactory;
         @Property(name = ResourceProvider.PROPERTY_ATTRIBUTABLE, boolValue = true),
         @Property(name = ResourceProvider.PROPERTY_REFRESHABLE, boolValue = true),
 })
+@Reference(name = "dynamicClassLoaderManager",
+           referenceInterface = DynamicClassLoaderManager.class,
+           cardinality = ReferenceCardinality.OPTIONAL_UNARY, policy = ReferencePolicy.DYNAMIC)
 public class JcrResourceProvider extends ResourceProvider<JcrProviderState> {
 
     /** Logger */
@@ -120,28 +124,26 @@ public class JcrResourceProvider extends
     @Reference
     private PathMapper pathMapper;
 
-    /** The dynamic class loader */
-    @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY, policy = ReferencePolicy.DYNAMIC)
-    private volatile DynamicClassLoaderManager dynamicClassLoaderManager;
-
     /** This service is only available on OAK, therefore optional and static) */
     @Reference(policy=ReferencePolicy.STATIC, cardinality=ReferenceCardinality.OPTIONAL_UNARY)
     private Executor executor;
 
     /** The JCR observation listener. */
-    private Closeable listener;
+    private volatile Closeable listener;
 
-    private SlingRepository repository;
+    private volatile SlingRepository repository;
 
     private int observationQueueLength;
 
-    private boolean optimizeForOak;
+    private volatile boolean optimizeForOak;
+
+    private volatile String root;
 
-    private String root;
+    private volatile BundleContext bundleCtx;
 
-    private BundleContext bundleCtx;
+    private volatile JcrProviderStateFactory stateFactory;
 
-    private JcrProviderStateFactory stateFactory;
+    private final AtomicReference<DynamicClassLoaderManager> classLoaderManagerReference = new AtomicReference<DynamicClassLoaderManager>();
 
     @Activate
     protected void activate(final ComponentContext context) throws RepositoryException {
@@ -161,7 +163,7 @@ public class JcrResourceProvider extends
         this.root = PropertiesUtil.toString(context.getProperties().get(ResourceProvider.PROPERTY_ROOT), "/");
         this.bundleCtx = context.getBundleContext();
 
-        this.stateFactory = new JcrProviderStateFactory(repositoryReference, repository, dynamicClassLoaderManager, pathMapper);
+        this.stateFactory = new JcrProviderStateFactory(repositoryReference, repository, classLoaderManagerReference, pathMapper);
     }
 
     @Deactivate
@@ -170,6 +172,14 @@ public class JcrResourceProvider extends
         this.stateFactory = null;
     }
 
+    protected void bindDynamicClassLoaderManager(final DynamicClassLoaderManager dynamicClassLoaderManager) {
+        this.classLoaderManagerReference.set(dynamicClassLoaderManager);
+    }
+
+    protected void unbindDynamicClassLoaderManager(final DynamicClassLoaderManager dynamicClassLoaderManager) {
+        this.classLoaderManagerReference.compareAndSet(dynamicClassLoaderManager, null);
+    }
+
     @Override
     public void start(final ProviderContext ctx) {
         super.start(ctx);

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/package-info.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/package-info.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/package-info.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/package-info.java Wed Feb 10 17:11:34 2016
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("2.3")
+@Version("2.4")
 package org.apache.sling.jcr.resource;
 
 import aQute.bnd.annotation.Version;

Modified: sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMapTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMapTest.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMapTest.java (original)
+++ sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMapTest.java Wed Feb 10 17:11:34 2016
@@ -18,6 +18,8 @@
  */
 package org.apache.sling.jcr.resource.internal;
 
+import static org.apache.sling.jcr.resource.internal.AssertCalendar.assertEqualsCalendar;
+
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.io.Serializable;
@@ -29,6 +31,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
 
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
@@ -38,11 +41,10 @@ import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.util.Text;
 import org.apache.sling.api.resource.ModifiableValueMap;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
 import org.apache.sling.commons.testing.jcr.RepositoryTestBase;
 import org.apache.sling.jcr.resource.JcrResourceUtil;
 
-import static org.apache.sling.jcr.resource.internal.AssertCalendar.assertEqualsCalendar;
-
 public class JcrModifiableValueMapTest extends RepositoryTestBase {
 
     private String rootPath;
@@ -76,7 +78,7 @@ public class JcrModifiableValueMapTest e
     }
 
     private HelperData getHelperData() throws Exception {
-        return new HelperData(null, new PathMapperImpl());
+        return new HelperData(new AtomicReference<DynamicClassLoaderManager>(), new PathMapperImpl());
     }
 
     private Map<String, Object> initialSet() {

Modified: sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/JcrNodeResourceIteratorTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/JcrNodeResourceIteratorTest.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/JcrNodeResourceIteratorTest.java (original)
+++ sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/JcrNodeResourceIteratorTest.java Wed Feb 10 17:11:34 2016
@@ -19,12 +19,14 @@
 package org.apache.sling.jcr.resource.internal.helper;
 
 import java.util.NoSuchElementException;
+import java.util.concurrent.atomic.AtomicReference;
 
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
 import javax.jcr.RepositoryException;
 
 import org.apache.sling.api.resource.Resource;
+import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
 import org.apache.sling.commons.testing.jcr.MockNode;
 import org.apache.sling.commons.testing.jcr.MockNodeIterator;
 import org.apache.sling.jcr.resource.internal.HelperData;
@@ -36,7 +38,7 @@ import junit.framework.TestCase;
 public class JcrNodeResourceIteratorTest extends TestCase {
 
     private HelperData getHelperData() {
-        return new HelperData(null, new PathMapperImpl());
+        return new HelperData(new AtomicReference<DynamicClassLoaderManager>(), new PathMapperImpl());
     }
 
     public void testEmpty() {

Modified: sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemResourceFactoryTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemResourceFactoryTest.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemResourceFactoryTest.java (original)
+++ sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemResourceFactoryTest.java Wed Feb 10 17:11:34 2016
@@ -18,18 +18,21 @@
  */
 package org.apache.sling.jcr.resource.internal.helper.jcr;
 
-import org.apache.jackrabbit.commons.JcrUtils;
-import org.apache.sling.commons.testing.jcr.RepositoryTestBase;
-import org.apache.sling.jcr.resource.internal.HelperData;
-import org.apache.sling.jcr.resource.internal.PathMapperImpl;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.concurrent.atomic.AtomicReference;
 
 import javax.jcr.Item;
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
+
+import org.apache.jackrabbit.commons.JcrUtils;
+import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
+import org.apache.sling.commons.testing.jcr.RepositoryTestBase;
+import org.apache.sling.jcr.resource.internal.HelperData;
+import org.apache.sling.jcr.resource.internal.PathMapperImpl;
 
 public class JcrItemResourceFactoryTest extends RepositoryTestBase {
 
@@ -85,7 +88,7 @@ public class JcrItemResourceFactoryTest
     }
 
     private void compareGetItemOrNull(String path, String expectedPath) throws RepositoryException {
-        HelperData helper = new HelperData(null, new PathMapperImpl());
+        HelperData helper = new HelperData(new AtomicReference<DynamicClassLoaderManager>(), new PathMapperImpl());
         Item item1 = new JcrItemResourceFactory(session, helper).getItemOrNull(path);
         Item item2 = new JcrItemResourceFactory(nonJackrabbitSession, helper).getItemOrNull(path);
         if (expectedPath == null) {

Modified: sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java (original)
+++ sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java Wed Feb 10 17:11:34 2016
@@ -23,6 +23,8 @@ import java.io.InputStream;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
+
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -30,6 +32,7 @@ import javax.jcr.Session;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceMetadata;
+import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
 import org.apache.sling.jcr.resource.JcrResourceConstants;
 import org.apache.sling.jcr.resource.internal.HelperData;
 import org.apache.sling.jcr.resource.internal.PathMapperImpl;
@@ -37,7 +40,7 @@ import org.apache.sling.jcr.resource.int
 public class JcrNodeResourceTest extends JcrItemResourceTestBase {
 
     private HelperData getHelperData() throws Exception {
-        return new HelperData(null, new PathMapperImpl());
+        return new HelperData(new AtomicReference<DynamicClassLoaderManager>(), new PathMapperImpl());
     }
 
     public void testLinkedFile() throws Exception {

Modified: sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrTestNodeResource.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrTestNodeResource.java?rev=1729661&r1=1729660&r2=1729661&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrTestNodeResource.java (original)
+++ sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrTestNodeResource.java Wed Feb 10 17:11:34 2016
@@ -18,10 +18,13 @@
  */
 package org.apache.sling.jcr.resource.internal.helper.jcr;
 
+import java.util.concurrent.atomic.AtomicReference;
+
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 
 import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
 import org.apache.sling.jcr.resource.internal.HelperData;
 import org.apache.sling.jcr.resource.internal.PathMapperImpl;
 
@@ -29,7 +32,7 @@ public class JcrTestNodeResource extends
 
     public JcrTestNodeResource(ResourceResolver resourceResolver, Node node,
             ClassLoader dynamicClassLoader) throws RepositoryException {
-        super(resourceResolver, node.getPath(), null, node, new HelperData(null, new PathMapperImpl()));
+        super(resourceResolver, node.getPath(), null, node, new HelperData(new AtomicReference<DynamicClassLoaderManager>(), new PathMapperImpl()));
     }
 
 }