You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:19:54 UTC

[sling-org-apache-sling-commons-classloader] annotated tag org.apache.sling.commons.classloader-1.1.0 created (now 95613f4)

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

rombert pushed a change to annotated tag org.apache.sling.commons.classloader-1.1.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-classloader.git.


      at 95613f4  (tag)
 tagging 4670ff0cd6c3b354a9caab614968f6577f8ed93d (commit)
      by Carsten Ziegeler
      on Tue Nov 24 15:57:39 2009 +0000

- Log -----------------------------------------------------------------
org.apache.sling.commons.classloader-1.1.0
-----------------------------------------------------------------------

This annotated tag includes the following new commits:

     new 046ba4f  SLING-1007 : Initial work of a dynamic class loader loading classes through package admin. In addition dynamic class loader providers can be registered.
     new 5836631  Add simple junit test for dynamic class loading through package admin.
     new ea90c38  Move classloader to main bundle area - as discussed recently
     new 6b8a1f4  Correct activator.
     new 3ffeb64  Ignore target directory.
     new cc3b40d  Fix class cast.
     new 2813fc7  Fix resource handling (packages are separated by a slash not by a dot)
     new 97bcc33  Register classloader as a service factory to get access to the client bundle for class loading.
     new 54194d4  Fix AIOOB
     new c5338c1  forgot to commit test case
     new 8023ea1  Provide parent class loader to dynamic class loader providers; check for null reference.
     new a2ba64a  Experimental class loader writer for scripting engines.
     new ce0fe40  SLING-1070 : Change class loading of package admin class loader to parent first, cache classes and resources in the class loader facade and reregister manager factory, if a used bundle is changed.
     new 3c831d4  Activator must implement BundleActivator
     new bf847ec  Remove duplicate interface
     new 0891b68  Don't cache classes in the facade, cache them in the package admin class loader.
     new a391329  Remove warnings
     new 61594f5  svn:ignore
     new 8dd47bc  Use latest parent pom.
     new 9fc087f  [maven-release-plugin] prepare release org.apache.sling.commons.classloader-0.9.0
     new 1349bb6  [maven-release-plugin] prepare for next development iteration
     new 3ffb349  SLING-1135 need to overwrite the loadClass(String, boolean) method and not the loadClass(String) method because only the former is called from "child" class loaders in class loader hierarchies.
     new 1428ebb  [maven-release-plugin] prepare release org.apache.sling.commons.classloader-1.0.0
     new 27e590d  [maven-release-plugin] prepare for next development iteration
     new e4bc6a3  SLING-1144 : Make sync variable volatile and use tracker count instead of keeping track of changes by using custom methods.
     new 2ffcc20  SLING-1145 :   Exceptions from dynamic class loader providers should be catched
     new b005143  SLING-1191 : Dynamic class loader providers are not reloaded when bundles are updated/installed etc. Add new release method to the dynamic class loader provider. This allows a provider to react on bundle/class loader changes.
     new bbbcd5e  SLING-1201 : ClassLoaderFacade should not throw runtime exceptions and handle getResources() correctly
     new def5c73  Just pass missing class into exception constructor.
     new 8b116a6  [maven-release-plugin] prepare release org.apache.sling.commons.classloader-1.1.0
     new 4670ff0  [maven-scm] copy for tag org.apache.sling.commons.classloader-1.1.0

The 31 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


-- 
To stop receiving notification emails like this one, please contact
['"commits@sling.apache.org" <co...@sling.apache.org>'].

[sling-org-apache-sling-commons-classloader] 02/08: SLING-1144 : Make sync variable volatile and use tracker count instead of keeping track of changes by using custom methods.

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit e4bc6a3a7adf438188648edfdc3bfb8e4f5787d6
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Mon Oct 12 13:17:54 2009 +0000

    SLING-1144 : Make sync variable volatile and use tracker count instead of keeping track of changes by using custom methods.
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader@824327 13f79535-47bb-0310-9956-ffa450edef68
---
 .../impl/DynamicClassLoaderManagerImpl.java        | 59 ++++++++--------------
 1 file changed, 22 insertions(+), 37 deletions(-)

diff --git a/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java b/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java
index 2388b5b..6dabeb1 100644
--- a/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java
+++ b/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java
@@ -25,7 +25,6 @@ import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.packageadmin.PackageAdmin;
 import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
 
 /**
  * This is the default implementation of the dynamic class loader
@@ -33,7 +32,7 @@ import org.osgi.util.tracker.ServiceTrackerCustomizer;
  */
 public class DynamicClassLoaderManagerImpl
     extends ServiceTracker
-    implements DynamicClassLoaderManager, ServiceTrackerCustomizer {
+    implements DynamicClassLoaderManager {
 
     /** The package admin class loader. */
     private final PackageAdminClassLoader pckAdminCL;
@@ -41,17 +40,14 @@ public class DynamicClassLoaderManagerImpl
     /** The dynamic class loader. */
     private final ClassLoaderFacade facade;
 
-    /** The bundle context. */
-    private final BundleContext context;
-
     /** The cached chain of class loaders. */
     private ClassLoader[] cache;
 
-    /** Needs the cache an update? */
-    private boolean updateCache = false;
+    /** Is this still active? */
+    private volatile boolean active = true;
 
-    /** Is this service still active? */
-    private boolean active = true;
+    /** Tracking count */
+    private volatile int trackingCount = -1;
 
     /**
      * Create a new service instance
@@ -64,45 +60,34 @@ public class DynamicClassLoaderManagerImpl
             final ClassLoader parent,
             final DynamicClassLoaderManagerFactory factory) {
         super(ctx, DynamicClassLoaderProvider.class.getName(), null);
-        this.context = ctx;
         this.pckAdminCL = new PackageAdminClassLoader(pckAdmin, parent, factory);
         this.cache = new ClassLoader[] {this.pckAdminCL};
         this.open();
         this.facade = new ClassLoaderFacade(this);
     }
 
-    public Object addingService(ServiceReference reference) {
-        this.updateCache = true;
-        return this.context.getService(reference);
-    }
-
-    public void modifiedService(ServiceReference reference, Object service) {
-        // as the ranking property has changed we have to update the cache
-        this.updateCache = true;
-    }
-
-    public void removedService(ServiceReference reference, Object service) {
-        this.context.ungetService(reference);
-        this.updateCache = true;
-    }
-
     private synchronized void updateCache() {
-        if ( this.updateCache ) {
+        if ( this.trackingCount < this.getTrackingCount() ) {
             final ServiceReference[] refs = this.getServiceReferences();
-            final ClassLoader[] loaders = new ClassLoader[1 + refs.length];
-            Arrays.sort(refs, ServiceReferenceComparator.INSTANCE);
-            int index = 0;
-            for(final ServiceReference ref : refs) {
-                final DynamicClassLoaderProvider provider = (DynamicClassLoaderProvider)this.getService(ref);
-                if ( provider != null ) {
-                    loaders[index] = provider.getClassLoader(this.pckAdminCL);
+            final ClassLoader[] loaders;
+            if ( refs == null || refs.length == 0 ) {
+                loaders = new ClassLoader[] {this.pckAdminCL};
+            } else {
+                loaders = new ClassLoader[1 + refs.length];
+                Arrays.sort(refs, ServiceReferenceComparator.INSTANCE);
+                int index = 0;
+                for(final ServiceReference ref : refs) {
+                    final DynamicClassLoaderProvider provider = (DynamicClassLoaderProvider)this.getService(ref);
+                    if ( provider != null ) {
+                        loaders[index] = provider.getClassLoader(this.pckAdminCL);
+                    }
+                    index++;
                 }
-                index++;
+                loaders[index] = this.pckAdminCL;
             }
-            loaders[index] = this.pckAdminCL;
             // and now use new array
             this.cache = loaders;
-            this.updateCache = false;
+            this.trackingCount = this.getTrackingCount();
         }
     }
 
@@ -135,7 +120,7 @@ public class DynamicClassLoaderManagerImpl
      * @return The list of class loaders.
      */
     public ClassLoader[] getDynamicClassLoaders() {
-        if ( this.updateCache ) {
+        if ( this.trackingCount < this.getTrackingCount() ) {
             updateCache();
         }
         return this.cache;

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-classloader] 03/08: SLING-1145 : Exceptions from dynamic class loader providers should be catched

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2ffcc20270360a1a71c28c4cf31604808f04bbf1
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Mon Oct 12 13:24:36 2009 +0000

    SLING-1145 :   Exceptions from dynamic class loader providers should be catched
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader@824328 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            |  4 +++
 .../classloader/impl/ClassLoaderFacade.java        | 36 +++++++++++++++++-----
 2 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/pom.xml b/pom.xml
index 7234371..e7a7bdb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -103,5 +103,9 @@
             <groupId>org.jmock</groupId>
             <artifactId>jmock-junit4</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+        </dependency>
     </dependencies>
 </project>
diff --git a/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java b/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
index e8e7426..2fbe4da 100644
--- a/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
+++ b/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
@@ -22,6 +22,9 @@ import java.io.IOException;
 import java.net.URL;
 import java.util.Enumeration;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 
 /**
  * The <code>ClassLoaderFacade</code> is a facade
@@ -33,8 +36,15 @@ import java.util.Enumeration;
  */
 public class ClassLoaderFacade extends ClassLoader {
 
+    /** The logger. */
+    private final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
+
+    /** Dynamic class loader manager which manages the dynamic class loader providers for this facade. */
     private final DynamicClassLoaderManagerImpl manager;
 
+    /**
+     * Constructor
+     */
     public ClassLoaderFacade(final DynamicClassLoaderManagerImpl manager) {
         this.manager = manager;
     }
@@ -49,9 +59,13 @@ public class ClassLoaderFacade extends ClassLoader {
         final ClassLoader[] loaders = manager.getDynamicClassLoaders();
         for(final ClassLoader cl : loaders) {
             if ( cl != null ) {
-                final URL u = cl.getResource(name);
-                if ( u != null ) {
-                    return u;
+                try {
+                    final URL u = cl.getResource(name);
+                    if ( u != null ) {
+                        return u;
+                    }
+                } catch (Throwable t) {
+                    logger.error("Exception while querying class loader " + cl + " for resource " + name, t);
                 }
             }
         }
@@ -68,9 +82,13 @@ public class ClassLoaderFacade extends ClassLoader {
         final ClassLoader[] loaders = manager.getDynamicClassLoaders();
         for(final ClassLoader cl : loaders) {
             if ( cl != null ) {
-                final Enumeration<URL> e = cl.getResources(name);
-                if ( e != null && e.hasMoreElements() ) {
-                    return e;
+                try {
+                    final Enumeration<URL> e = cl.getResources(name);
+                    if ( e != null && e.hasMoreElements() ) {
+                        return e;
+                    }
+                } catch (Throwable t) {
+                    logger.error("Exception while querying class loader " + cl + " for resources " + name, t);
                 }
             }
         }
@@ -79,7 +97,7 @@ public class ClassLoaderFacade extends ClassLoader {
 
     @Override
     protected synchronized Class<?> loadClass(String name, boolean resolve)
-            throws ClassNotFoundException {
+    throws ClassNotFoundException {
 
         if ( !this.manager.isActive() ) {
             throw new RuntimeException("Dynamic class loader has already been deactivated.");
@@ -90,8 +108,10 @@ public class ClassLoaderFacade extends ClassLoader {
                 try {
                     final Class<?> c = cl.loadClass(name);
                     return c;
-                } catch (Exception cnfe) {
+                } catch (ClassNotFoundException cnfe) {
                     // we just ignore this and try the next class loader
+                } catch (Throwable t) {
+                    logger.error("Exception while trying to load class " + name + " from class loader " + cl, t);
                 }
             }
         }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-classloader] 06/08: Just pass missing class into exception constructor.

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit def5c73560f766fc5460181861a884ebbc4c1f18
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Tue Nov 24 15:49:13 2009 +0000

    Just pass missing class into exception constructor.
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader@883734 13f79535-47bb-0310-9956-ffa450edef68
---
 .../org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java b/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
index 2be811b..b3c2d20 100644
--- a/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
+++ b/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
@@ -109,7 +109,7 @@ public class ClassLoaderFacade extends ClassLoader {
     throws ClassNotFoundException {
         if ( !this.manager.isActive() ) {
             logger.error("Dynamic class loader has already been deactivated.");
-            throw new ClassNotFoundException("Class not found: " + name);
+            throw new ClassNotFoundException(name);
         }
         final ClassLoader[] loaders = manager.getDynamicClassLoaders();
         for(final ClassLoader cl : loaders) {
@@ -124,6 +124,6 @@ public class ClassLoaderFacade extends ClassLoader {
                 }
             }
         }
-        throw new ClassNotFoundException("Class not found: " + name);
+        throw new ClassNotFoundException(name);
     }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-classloader] 04/08: SLING-1191 : Dynamic class loader providers are not reloaded when bundles are updated/installed etc. Add new release method to the dynamic class loader provider. This allows a provider to react on bundle/class loader changes.

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit b005143ede2a47ac3d2203119ceb28b1c5949328
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Tue Nov 17 11:12:48 2009 +0000

    SLING-1191 : Dynamic class loader providers are not reloaded when bundles are updated/installed etc.
    Add new release method to the dynamic class loader provider. This allows a provider to react on bundle/class loader changes.
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader@881245 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            |  5 ++--
 .../classloader/DynamicClassLoaderProvider.java    | 14 +++++++++++
 .../impl/DynamicClassLoaderManagerImpl.java        | 27 ++++++++++++++++++++++
 3 files changed, 43 insertions(+), 3 deletions(-)

diff --git a/pom.xml b/pom.xml
index e7a7bdb..b07ac06 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,12 +24,11 @@
         <groupId>org.apache.sling</groupId>
         <artifactId>sling</artifactId>
         <version>7</version>
-        <relativePath>../../../parent/pom.xml</relativePath>
     </parent>
 
     <artifactId>org.apache.sling.commons.classloader</artifactId>
     <packaging>bundle</packaging>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <name>Apache Sling Dynamic Class Loader Support</name>
     <description>
@@ -58,7 +57,7 @@
                             org.apache.sling.commons.classloader.impl.Activator
                         </Bundle-Activator>
                         <Export-Package>
-                            org.apache.sling.commons.classloader;version=${pom.version}
+                            org.apache.sling.commons.classloader;version=1.1.0
                         </Export-Package>
                         <Private-Package>
                             org.apache.sling.commons.classloader.impl
diff --git a/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java b/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java
index cdac258..bf7985e 100644
--- a/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java
+++ b/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java
@@ -33,8 +33,22 @@ public interface DynamicClassLoaderProvider {
      * as one of its parent class loaders. This ensures that the returned
      * class loader has access to all dynamically loaded classes that
      * are not part of this class loader.
+     * When the class loader is not needed anymore, it is released by
+     * calling the {@link #release(ClassLoader)} method.
      * @param parent The parent class loader for this dynamic class loader.
      * @return The class loader.
+     * @see #release(ClassLoader)
      */
     ClassLoader getClassLoader(ClassLoader parent);
+
+    /**
+     * Release the provided class loader.
+     * When the class loader is not needed anymore, e.g. when the dynamic class
+     * loader is shutdown, it is released with this method.
+     * The implementation can use this hook to free any allocated resources etc.
+     * @param classLoader The class loader.
+     * @see #getClassLoader(ClassLoader)
+     * @since 2.0
+     */
+    void release(ClassLoader classLoader);
 }
diff --git a/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java b/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java
index 6dabeb1..6c15c19 100644
--- a/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java
+++ b/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java
@@ -43,6 +43,9 @@ public class DynamicClassLoaderManagerImpl
     /** The cached chain of class loaders. */
     private ClassLoader[] cache;
 
+    /** The cached chain of dynamic class loader providers. */
+    private DynamicClassLoaderProvider[] providerCache;
+
     /** Is this still active? */
     private volatile boolean active = true;
 
@@ -62,6 +65,7 @@ public class DynamicClassLoaderManagerImpl
         super(ctx, DynamicClassLoaderProvider.class.getName(), null);
         this.pckAdminCL = new PackageAdminClassLoader(pckAdmin, parent, factory);
         this.cache = new ClassLoader[] {this.pckAdminCL};
+        this.providerCache = new DynamicClassLoaderProvider[0];
         this.open();
         this.facade = new ClassLoaderFacade(this);
     }
@@ -70,10 +74,13 @@ public class DynamicClassLoaderManagerImpl
         if ( this.trackingCount < this.getTrackingCount() ) {
             final ServiceReference[] refs = this.getServiceReferences();
             final ClassLoader[] loaders;
+            final DynamicClassLoaderProvider[] providers;
             if ( refs == null || refs.length == 0 ) {
                 loaders = new ClassLoader[] {this.pckAdminCL};
+                providers = new DynamicClassLoaderProvider[0];
             } else {
                 loaders = new ClassLoader[1 + refs.length];
+                providers = new DynamicClassLoaderProvider[refs.length];
                 Arrays.sort(refs, ServiceReferenceComparator.INSTANCE);
                 int index = 0;
                 for(final ServiceReference ref : refs) {
@@ -85,18 +92,38 @@ public class DynamicClassLoaderManagerImpl
                 }
                 loaders[index] = this.pckAdminCL;
             }
+            // release old class loaders
+            this.releaseProviders();
+
             // and now use new array
             this.cache = loaders;
+            this.providerCache = providers;
             this.trackingCount = this.getTrackingCount();
         }
     }
 
     /**
+     * Free used class loader providers
+     */
+    private void releaseProviders() {
+        if ( this.providerCache != null ) {
+            for(int i=0; i<this.providerCache.length; i++) {
+                if ( this.cache[i] != null ) {
+                    this.providerCache[i].release(this.cache[i]);
+                }
+            }
+        }
+    }
+
+    /**
      * Deactivate this service.
      */
     public void deactivate() {
+        this.releaseProviders();
         this.active = false;
         this.close();
+        this.providerCache = null;
+        this.cache = null;
     }
 
     /**

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-classloader] 07/08: [maven-release-plugin] prepare release org.apache.sling.commons.classloader-1.1.0

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 8b116a6063a3f796b8cb7230b19a39cd8c583b71
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Tue Nov 24 15:57:13 2009 +0000

    [maven-release-plugin] prepare release org.apache.sling.commons.classloader-1.1.0
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader@883735 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index b07ac06..f35408d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
 
     <artifactId>org.apache.sling.commons.classloader</artifactId>
     <packaging>bundle</packaging>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.1.0</version>
 
     <name>Apache Sling Dynamic Class Loader Support</name>
     <description>
@@ -36,9 +36,9 @@
     </description>
 
     <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader</developerConnection>
-        <url>http://svn.apache.org/viewvc/sling/trunk/bundles/commons/classloader</url>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.commons.classloader-1.1.0</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.commons.classloader-1.1.0</developerConnection>
+        <url>http://svn.apache.org/viewvc/sling/tags/org.apache.sling.commons.classloader-1.1.0</url>
     </scm>
 
     <build>

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-classloader] 08/08: [maven-scm] copy for tag org.apache.sling.commons.classloader-1.1.0

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 4670ff0cd6c3b354a9caab614968f6577f8ed93d
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Tue Nov 24 15:57:39 2009 +0000

    [maven-scm] copy for tag org.apache.sling.commons.classloader-1.1.0
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.commons.classloader-1.1.0@883736 13f79535-47bb-0310-9956-ffa450edef68

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-classloader] 05/08: SLING-1201 : ClassLoaderFacade should not throw runtime exceptions and handle getResources() correctly

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit bbbcd5ec58a5f3a29f81ff8a30bbc78692345622
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Tue Nov 24 15:23:05 2009 +0000

    SLING-1201 : ClassLoaderFacade should not throw runtime exceptions and handle getResources() correctly
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader@883727 13f79535-47bb-0310-9956-ffa450edef68
---
 .../classloader/impl/ClassLoaderFacade.java        | 25 +++++++++++++++-------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java b/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
index 2fbe4da..2be811b 100644
--- a/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
+++ b/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
@@ -20,12 +20,14 @@ package org.apache.sling.commons.classloader.impl;
 
 import java.io.IOException;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Enumeration;
+import java.util.List;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
  * The <code>ClassLoaderFacade</code> is a facade
  * for the dynamic class loading.
@@ -54,7 +56,8 @@ public class ClassLoaderFacade extends ClassLoader {
      */
     public URL getResource(String name) {
         if ( !this.manager.isActive() ) {
-            throw new RuntimeException("Dynamic class loader has already been deactivated.");
+            logger.error("Dynamic class loader has already been deactivated.");
+            return null;
         }
         final ClassLoader[] loaders = manager.getDynamicClassLoaders();
         for(final ClassLoader cl : loaders) {
@@ -72,35 +75,41 @@ public class ClassLoaderFacade extends ClassLoader {
         return null;
     }
 
+    private final List<URL> EMPTY_LIST = Collections.emptyList();
+
     /**
      * @see java.lang.ClassLoader#getResources(java.lang.String)
      */
     public Enumeration<URL> getResources(String name) throws IOException {
         if ( !this.manager.isActive() ) {
-            throw new RuntimeException("Dynamic class loader has already been deactivated.");
+            logger.error("Dynamic class loader has already been deactivated.");
+            return Collections.enumeration(EMPTY_LIST);
         }
         final ClassLoader[] loaders = manager.getDynamicClassLoaders();
+        final List<URL> resources = new ArrayList<URL>();
         for(final ClassLoader cl : loaders) {
             if ( cl != null ) {
                 try {
                     final Enumeration<URL> e = cl.getResources(name);
                     if ( e != null && e.hasMoreElements() ) {
-                        return e;
+                        resources.addAll(Collections.list(e));
                     }
                 } catch (Throwable t) {
                     logger.error("Exception while querying class loader " + cl + " for resources " + name, t);
                 }
             }
         }
-        return null;
+        return Collections.enumeration(resources);
     }
 
-    @Override
+    /**
+     * @see java.lang.ClassLoader#loadClass(java.lang.String, boolean)
+     */
     protected synchronized Class<?> loadClass(String name, boolean resolve)
     throws ClassNotFoundException {
-
         if ( !this.manager.isActive() ) {
-            throw new RuntimeException("Dynamic class loader has already been deactivated.");
+            logger.error("Dynamic class loader has already been deactivated.");
+            throw new ClassNotFoundException("Class not found: " + name);
         }
         final ClassLoader[] loaders = manager.getDynamicClassLoaders();
         for(final ClassLoader cl : loaders) {

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-classloader] 01/08: [maven-release-plugin] prepare for next development iteration

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 27e590d529cff10fa61d6d6a3559afaeb8ce7ca6
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Wed Oct 7 13:25:48 2009 +0000

    [maven-release-plugin] prepare for next development iteration
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader@822722 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index dd658e3..7234371 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
 
     <artifactId>org.apache.sling.commons.classloader</artifactId>
     <packaging>bundle</packaging>
-    <version>1.0.0</version>
+    <version>1.0.1-SNAPSHOT</version>
 
     <name>Apache Sling Dynamic Class Loader Support</name>
     <description>
@@ -37,9 +37,9 @@
     </description>
 
     <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.commons.classloader-1.0.0</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.commons.classloader-1.0.0</developerConnection>
-        <url>http://svn.apache.org/viewvc/sling/tags/org.apache.sling.commons.classloader-1.0.0</url>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader</developerConnection>
+        <url>http://svn.apache.org/viewvc/sling/trunk/bundles/commons/classloader</url>
     </scm>
 
     <build>

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.