Author: pier
Date: Wed Nov  3 16:46:08 2004
New Revision: 56541

Modified:
   
cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Deployer.java
   
cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Wiring.java
Log:
Set context classloader when switching from one block to another (helps 
resolutions of commons-logging, servlet-based stuff, ...)


Modified: 
cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Deployer.java
==============================================================================
--- 
cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Deployer.java
  (original)
+++ 
cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Deployer.java
  Wed Nov  3 16:46:08 2004
@@ -14,6 +14,7 @@
 
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
+import java.net.URL;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -146,8 +147,8 @@
                         + "] " + descriptor.toString());
             }
             this.logger.log("Shared libraries:");
-            iterator = this.loader.getURLs(this);
-            while (iterator.hasNext()) this.logger.log(" - " + 
iterator.next());
+            URL urls[] = this.loader.getURLs();
+            for (int x = 0; x < urls.length; x ++) this.logger.log(" - " + 
urls[x]);
 
             /* Configure all instances and be done with it */
             Factory.configure(this, instances);

Modified: 
cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Wiring.java
==============================================================================
--- 
cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Wiring.java
    (original)
+++ 
cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Wiring.java
    Wed Nov  3 16:46:08 2004
@@ -27,12 +27,15 @@
 
     /** <p>The instance of the proxied object.</p> */
     private Object instance = null;
+    /** <p>The instance of the proxied object.</p> */
+    private ClassLoader context = null;
 
     /**
      * <p>Create a new [EMAIL PROTECTED] Wiring} instance.</p>
      */
     public Wiring(Object instance) {
         if (instance == null) throw new NullPointerException("Null proxy 
instance");
+        this.context = instance.getClass().getClassLoader();
         this.instance = instance;
     }
 
@@ -41,12 +44,18 @@
      */
     public Object invoke(Object proxy, Method method, Object[] parameters)
     throws Throwable {
+        Thread thread = Thread.currentThread();
+        ClassLoader previous = thread.getContextClassLoader();
+        thread.setContextClassLoader(this.context);
+
         try {
             return(method.invoke(this.instance, parameters));
         } catch (InvocationTargetException e) {
             Throwable cause = e.getCause();
             if (cause != null) throw cause;
             throw e;
+        } finally {
+            thread.setContextClassLoader(previous);
         }
     }
 }

Reply via email to