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:45:28 UTC

[sling-org-apache-sling-jcr-classloader] 15/44: Ensure the Repository Classloader facade is also an URLClassLoader (just like the RepositoryClassLoader itself)

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

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

commit 6eb30339456c4cffea92c30f2ebba77d644a1e59
Author: Felix Meschberger <fm...@apache.org>
AuthorDate: Tue Nov 27 13:25:43 2007 +0000

    Ensure the Repository Classloader facade is also an URLClassLoader
    (just like the RepositoryClassLoader itself)
    
    git-svn-id: https://svn.apache.org/repos/asf/incubator/sling/trunk/jcr/classloader@598634 13f79535-47bb-0310-9956-ffa450edef68
---
 .../internal/RepositoryClassLoaderFacade.java      | 23 ++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/apache/sling/jcr/classloader/internal/RepositoryClassLoaderFacade.java b/src/main/java/org/apache/sling/jcr/classloader/internal/RepositoryClassLoaderFacade.java
index 056707d..e8f0f41 100644
--- a/src/main/java/org/apache/sling/jcr/classloader/internal/RepositoryClassLoaderFacade.java
+++ b/src/main/java/org/apache/sling/jcr/classloader/internal/RepositoryClassLoaderFacade.java
@@ -20,6 +20,7 @@ package org.apache.sling.jcr.classloader.internal;
 
 import java.io.IOException;
 import java.net.URL;
+import java.net.URLClassLoader;
 import java.util.Enumeration;
 
 import javax.jcr.RepositoryException;
@@ -32,11 +33,13 @@ import org.slf4j.LoggerFactory;
 /**
  * The <code>RepositoryClassLoaderFacade</code> TODO
  */
-class RepositoryClassLoaderFacade extends ClassLoader {
+class RepositoryClassLoaderFacade extends URLClassLoader {
 
     /** default log */
     private static final Logger log = LoggerFactory.getLogger(RepositoryClassLoaderFacade.class);
 
+    private static final URL[] NO_URLS = new URL[0];
+
     private RepositoryClassLoaderProviderImpl classLoaderProvider;
     private ClassLoader parent;
     private String sessionOwner;
@@ -58,7 +61,9 @@ class RepositoryClassLoaderFacade extends ClassLoader {
             ClassLoader parent,
             String sessionOwner,
             String[] classPath) {
-        super(null); // no parent class loader, we delegate to repository class loaders
+
+        // no parent class loader, we delegate to repository class loaders
+        super(NO_URLS, null);
 
         this.classLoaderProvider = classLoaderProvider;
         this.parent = parent;
@@ -85,6 +90,16 @@ class RepositoryClassLoaderFacade extends ClassLoader {
         return this.classPath.clone();
     }
 
+    @Override
+    public URL[] getURLs() {
+        try {
+            return getDelegateClassLoader().getURLs();
+        } catch (RepositoryException re) {
+            log.error("Cannot get repository class loader to get URLs", re);
+            return NO_URLS;
+        }
+    }
+
     protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
         try {
             return this.getDelegateClassLoader().loadClass(name);
@@ -103,7 +118,7 @@ class RepositoryClassLoaderFacade extends ClassLoader {
         }
     }
 
-    protected Enumeration findResources(String name) throws IOException {
+    public Enumeration findResources(String name) throws IOException {
         try {
             return this.getDelegateClassLoader().getResources(name);
         } catch (RepositoryException re) {
@@ -171,7 +186,7 @@ class RepositoryClassLoaderFacade extends ClassLoader {
         return this.session;
     }
 
-    private ClassLoader getDelegateClassLoader() throws RepositoryException {
+    private DynamicRepositoryClassLoader getDelegateClassLoader() throws RepositoryException {
         if (this.delegate != null) {
             if (this.delegate.isDirty()) {
                 this.delegate = this.delegate.reinstantiate(this.getSession(), this.parent);

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