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]>.
