Ivan,

Heh. I think we might have been looking at the same problem at the
same time. I was actually thinking of a more general solution by
restoring the setContextClassLoader() call in GBeanInstance.java at
line 912. What do you think?

Jarek

On Thu, Apr 15, 2010 at 11:54 PM,  <[email protected]> wrote:
> Author: xuhaihong
> Date: Fri Apr 16 03:54:39 2010
> New Revision: 934679
>
> URL: http://svn.apache.org/viewvc?rev=934679&view=rev
> Log:
> Set thread context classloader, as Tomcat needs it to load Connector MBean 
> while adding connector
>
> Modified:
>    
> geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatContainer.java
>
> Modified: 
> geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatContainer.java
> URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatContainer.java?rev=934679&r1=934678&r2=934679&view=diff
> ==============================================================================
> --- 
> geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatContainer.java
>  (original)
> +++ 
> geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatContainer.java
>  Fri Apr 16 03:54:39 2010
> @@ -92,6 +92,7 @@ public class TomcatContainer implements
>     private final WebManager manager;
>     private static boolean first = true;
>     private final BundleContext bundleContext;
> +    private final ClassLoader classLoader;
>
>     /**
>      * GBean constructor (invoked dynamically when the gbean is declared in a 
> plan)
> @@ -116,7 +117,7 @@ public class TomcatContainer implements
>         if (engineGBean == null && server == null) throw new 
> IllegalArgumentException("Server and EngineGBean cannot both be null.");
>
>         this.bundleContext = bundleContext;
> -
> +        this.classLoader = classLoader;
>         // Register a stream handler factory for the JNDI protocol
>         URLStreamHandlerFactory streamHandlerFactory =
>             new DirContextURLStreamHandlerFactory();
> @@ -339,7 +340,13 @@ public class TomcatContainer implements
>     }
>
>     public void addConnector(Connector connector) {
> -        embedded.addConnector(connector);
> +        ClassLoader oldClassLoader = 
> Thread.currentThread().getContextClassLoader();
> +        try {
> +            Thread.currentThread().setContextClassLoader(classLoader);
> +            embedded.addConnector(connector);
> +        } finally {
> +            Thread.currentThread().setContextClassLoader(oldClassLoader);
> +        }
>     }
>
>     public void removeConnector(Connector connector) {
>
>
>

Reply via email to