You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by pi...@apache.org on 2004/11/04 01:46:08 UTC

svn commit: rev 56541 - cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment

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 {@link 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);
         }
     }
 }