This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag 
org.apache.sling.commons.fsclassloader-1.0.0
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-fsclassloader.git

commit 4c46bc97cfb90f016994884c8a822f598191ec55
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Fri Nov 2 12:38:13 2012 +0000

    Implement latest class loader writer
    
    git-svn-id: 
https://svn.apache.org/repos/asf/sling/trunk/contrib/commons/fsclassloader@1404952
 13f79535-47bb-0310-9956-ffa450edef68
---
 .../fsclassloader/impl/FSClassLoaderProvider.java  | 50 +---------------------
 .../fsclassloader/impl/FSDynamicClassLoader.java   |  5 ++-
 2 files changed, 6 insertions(+), 49 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSClassLoaderProvider.java
 
b/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSClassLoaderProvider.java
index 9e636db..48fd6b5 100644
--- 
a/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSClassLoaderProvider.java
+++ 
b/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSClassLoaderProvider.java
@@ -33,7 +33,6 @@ import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.commons.classloader.ClassLoaderWriter;
-import org.apache.sling.commons.classloader.DynamicClassLoader;
 import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
 import org.osgi.service.component.ComponentContext;
 
@@ -60,58 +59,13 @@ public class FSClassLoaderProvider
     @Reference
     private DynamicClassLoaderManager dynamicClassLoaderManager;
 
-    private ClassLoader dynamicClassLoader;
-
-    /**
-     * Bind the class load provider.
-     *
-     * @param repositoryClassLoaderProvider the new provider
-     */
-    protected void bindDynamicClassLoaderManager(final 
DynamicClassLoaderManager rclp) {
-        if ( this.dynamicClassLoader != null ) {
-            this.ungetClassLoader();
-        }
-        this.getClassLoader(rclp);
-    }
-
-    /**
-     * Unbind the class loader provider.
-     * @param repositoryClassLoaderProvider the old provider
-     */
-    protected void unbindDynamicClassLoaderManager(final 
DynamicClassLoaderManager rclp) {
-        if ( this.dynamicClassLoaderManager == rclp ) {
-            this.ungetClassLoader();
-        }
-    }
-
-    /**
-     * Get the class loader
-     */
-    private void getClassLoader(final DynamicClassLoaderManager rclp) {
-        this.dynamicClassLoaderManager = rclp;
-        this.dynamicClassLoader = rclp.getDynamicClassLoader();
-    }
-
-    /**
-     * Unget the class loader
-     */
-    private void ungetClassLoader() {
-        this.dynamicClassLoader = null;
-        this.dynamicClassLoaderManager = null;
-    }
     /**
      * @see 
org.apache.sling.commons.classloader.ClassLoaderWriter#getClassLoader()
      */
     public ClassLoader getClassLoader() {
         synchronized ( this ) {
-            // first check parent
-            boolean recreate = loader == null;
-            if ( (this.dynamicClassLoader instanceof DynamicClassLoader) && 
!((DynamicClassLoader)this.dynamicClassLoader).isLive()) {
-                this.dynamicClassLoader = 
this.dynamicClassLoaderManager.getDynamicClassLoader();
-                recreate = true;
-            }
-            if ( recreate || !loader.isLive() ) {
-                loader = new FSDynamicClassLoader(new URL[] {this.rootURL}, 
this.dynamicClassLoader);
+            if ( loader == null || !loader.isLive() ) {
+                loader = new FSDynamicClassLoader(new URL[] {this.rootURL}, 
this.dynamicClassLoaderManager.getDynamicClassLoader());
             }
             return this.loader;
         }
diff --git 
a/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSDynamicClassLoader.java
 
b/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSDynamicClassLoader.java
index c6cd1e9..d35ae3d 100644
--- 
a/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSDynamicClassLoader.java
+++ 
b/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSDynamicClassLoader.java
@@ -35,15 +35,18 @@ public class FSDynamicClassLoader
     private final Set<String> hit = Collections.synchronizedSet(new 
HashSet<String>());
     private final Set<String> miss = Collections.synchronizedSet(new 
HashSet<String>());
 
+    private final DynamicClassLoader parentLoader;
+
     public FSDynamicClassLoader(final URL[] urls, final ClassLoader parent) {
         super(urls, parent);
+        parentLoader = (parent instanceof DynamicClassLoader ? 
(DynamicClassLoader)parent : null);
     }
 
     /**
      * @see org.apache.sling.commons.classloader.DynamicClassLoader#isLive()
      */
     public boolean isLive() {
-        return !isDirty;
+        return !isDirty && (parentLoader == null || parentLoader.isLive());
     }
 
     /**

-- 
To stop receiving notification emails like this one, please contact
"[email protected]" <[email protected]>.

Reply via email to