[jboss-cvs] JBossAS SVN: r97418 - trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Dec 3 11:56:10 EST 2009


Author: scott.stark at jboss.org
Date: 2009-12-03 11:56:09 -0500 (Thu, 03 Dec 2009)
New Revision: 97418

Modified:
   trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/JBossContextConfig.java
   trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/SecurityActions.java
Log:
JBAS-7210, set/unset tccl in JBossContextConfig.processContextConfig to the JBossContextConfig class loader

Modified: trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/JBossContextConfig.java
===================================================================
--- trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/JBossContextConfig.java	2009-12-03 16:52:44 UTC (rev 97417)
+++ trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/JBossContextConfig.java	2009-12-03 16:56:09 UTC (rev 97418)
@@ -687,6 +687,9 @@
 
    protected void processContextConfig(String resourceName, boolean local)
    {
+      ClassLoader oldCl = SecurityActions.getContextClassLoader();
+      SecurityActions.setContextClassLoader(this.getClass().getClassLoader());
+      
       ContextMetaData contextMetaData = null;
       try
       {
@@ -738,6 +741,10 @@
          ok = false;
          return;
       }
+      finally
+      {
+         SecurityActions.setContextClassLoader(oldCl);
+      }
 
       if (contextMetaData != null)
       {

Modified: trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/SecurityActions.java
===================================================================
--- trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/SecurityActions.java	2009-12-03 16:52:44 UTC (rev 97417)
+++ trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/SecurityActions.java	2009-12-03 16:56:09 UTC (rev 97418)
@@ -33,6 +33,123 @@
  */
 class SecurityActions
 {
+   interface TCLAction
+   {
+      class UTIL
+      {
+         static TCLAction getTCLAction()
+         {
+            return System.getSecurityManager() == null ? NON_PRIVILEGED : PRIVILEGED;
+         }
+
+         static ClassLoader getContextClassLoader()
+         {
+            return getTCLAction().getContextClassLoader();
+         }
+
+         static ClassLoader getContextClassLoader(Thread thread)
+         {
+            return getTCLAction().getContextClassLoader(thread);
+         }
+
+         static void setContextClassLoader(ClassLoader cl)
+         {
+            getTCLAction().setContextClassLoader(cl);
+         }
+
+         static void setContextClassLoader(Thread thread, ClassLoader cl)
+         {
+            getTCLAction().setContextClassLoader(thread, cl);
+         }
+      }
+
+      TCLAction NON_PRIVILEGED = new TCLAction()
+      {
+         public ClassLoader getContextClassLoader()
+         {
+            return Thread.currentThread().getContextClassLoader();
+         }
+
+         public ClassLoader getContextClassLoader(Thread thread)
+         {
+            return thread.getContextClassLoader();
+         }
+
+         public void setContextClassLoader(ClassLoader cl)
+         {
+            Thread.currentThread().setContextClassLoader(cl);
+         }
+
+         public void setContextClassLoader(Thread thread, ClassLoader cl)
+         {
+            thread.setContextClassLoader(cl);
+         }
+      };
+
+      TCLAction PRIVILEGED = new TCLAction()
+      {
+         private final PrivilegedAction getTCLPrivilegedAction = new PrivilegedAction()
+         {
+            public Object run()
+            {
+               return Thread.currentThread().getContextClassLoader();
+            }
+         };
+
+         public ClassLoader getContextClassLoader()
+         {
+            return (ClassLoader)AccessController.doPrivileged(getTCLPrivilegedAction);
+         }
+
+         public ClassLoader getContextClassLoader(final Thread thread)
+         {
+            return (ClassLoader)AccessController.doPrivileged(new PrivilegedAction()
+            {
+               public Object run()
+               {
+                  return thread.getContextClassLoader();
+               }
+            });
+         }
+
+         public void setContextClassLoader(final ClassLoader cl)
+         {
+            AccessController.doPrivileged(
+               new PrivilegedAction()
+               {
+                  public Object run()
+                  {
+                     Thread.currentThread().setContextClassLoader(cl);
+                     return null;
+                  }
+               }
+            );
+         }
+
+         public void setContextClassLoader(final Thread thread, final ClassLoader cl)
+         {
+            AccessController.doPrivileged(
+               new PrivilegedAction()
+               {
+                  public Object run()
+                  {
+                     thread.setContextClassLoader(cl);
+                     return null;
+                  }
+               }
+            );
+         }
+      };
+
+      ClassLoader getContextClassLoader();
+
+      ClassLoader getContextClassLoader(Thread thread);
+
+      void setContextClassLoader(ClassLoader cl);
+
+      void setContextClassLoader(Thread thread, ClassLoader cl);
+   }
+
    static String getSystemProperty(final String key, final String defaultValue)
    {
       return AccessController.doPrivileged(new PrivilegedAction<String>()
@@ -67,4 +184,13 @@
       } );  
    }
 
+   static ClassLoader getContextClassLoader()
+   {
+      return TCLAction.UTIL.getContextClassLoader();
+   }
+
+   static void setContextClassLoader(ClassLoader loader)
+   {
+      TCLAction.UTIL.setContextClassLoader(loader);
+   }
 }
\ No newline at end of file




More information about the jboss-cvs-commits mailing list