Author: markt Date: Thu Jan 23 12:17:00 2014 New Revision: 1560656 URL: http://svn.apache.org/r1560656 Log: Migrate StandardHostValve to use Context bind/unbind
Modified: tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java Modified: tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java?rev=1560656&r1=1560655&r2=1560656&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java Thu Jan 23 12:17:00 2014 @@ -14,14 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - - package org.apache.catalina.core; - import java.io.IOException; -import java.security.AccessController; -import java.security.PrivilegedAction; import javax.servlet.DispatcherType; import javax.servlet.RequestDispatcher; @@ -31,7 +26,6 @@ import javax.servlet.http.HttpServletRes import org.apache.catalina.Context; import org.apache.catalina.Globals; -import org.apache.catalina.ThreadBindingListener; import org.apache.catalina.Wrapper; import org.apache.catalina.comet.CometEvent; import org.apache.catalina.connector.ClientAbortException; @@ -44,7 +38,6 @@ import org.apache.tomcat.util.ExceptionU import org.apache.tomcat.util.descriptor.web.ErrorPage; import org.apache.tomcat.util.res.StringManager; - /** * Valve that implements the default basic behavior for the * <code>StandardHost</code> container implementation. @@ -56,7 +49,6 @@ import org.apache.tomcat.util.res.String * @author Remy Maucherat * @version $Id$ */ - final class StandardHostValve extends ValveBase { private static final Log log = LogFactory.getLog(StandardHostValve.class); @@ -125,22 +117,8 @@ final class StandardHostValve extends Va return; } - // Bind the context CL to the current thread - if( context.getLoader() != null ) { - // Not started - it should check for availability first - // This should eventually move to Engine, it's generic. - if (Globals.IS_SECURITY_ENABLED) { - PrivilegedAction<Void> pa = new PrivilegedSetTccl( - context.getLoader().getClassLoader(), - context.getThreadBindingListener(), - true); - AccessController.doPrivileged(pa); - } else { - Thread.currentThread().setContextClassLoader - (context.getLoader().getClassLoader()); - context.getThreadBindingListener().bind(); - } - } + context.bind(Globals.IS_SECURITY_ENABLED, MY_CLASSLOADER); + if (request.isAsyncSupported()) { request.setAsyncSupported(context.getPipeline().isAsyncSupported()); } @@ -203,15 +181,7 @@ final class StandardHostValve extends Va request.getSession(false); } - // Restore the context classloader - if (Globals.IS_SECURITY_ENABLED) { - PrivilegedAction<Void> pa = new PrivilegedSetTccl(MY_CLASSLOADER, - context.getThreadBindingListener(), false); - AccessController.doPrivileged(pa); - } else { - context.getThreadBindingListener().unbind(); - Thread.currentThread().setContextClassLoader(MY_CLASSLOADER); - } + context.unbind(Globals.IS_SECURITY_ENABLED, MY_CLASSLOADER); } @@ -232,14 +202,7 @@ final class StandardHostValve extends Va // Select the Context to be used for this Request Context context = request.getContext(); - // Bind the context CL to the current thread - if( context.getLoader() != null ) { - // Not started - it should check for availability first - // This should eventually move to Engine, it's generic. - Thread.currentThread().setContextClassLoader - (context.getLoader().getClassLoader()); - context.getThreadBindingListener().bind(); - } + context.bind(false, MY_CLASSLOADER); // Ask this Context to process this request context.getPipeline().getFirst().event(request, response, event); @@ -264,10 +227,7 @@ final class StandardHostValve extends Va } // Restore the context classloader - context.getThreadBindingListener().unbind(); - Thread.currentThread().setContextClassLoader - (StandardHostValve.class.getClassLoader()); - + context.unbind(false, MY_CLASSLOADER); } @@ -511,29 +471,4 @@ final class StandardHostValve extends Va return (null); } - - - private static class PrivilegedSetTccl implements PrivilegedAction<Void> { - - private final ClassLoader cl; - private final ThreadBindingListener tbl; - private final boolean bind; - - PrivilegedSetTccl(ClassLoader cl, ThreadBindingListener tbl, boolean bind) { - this.cl = cl; - this.bind = bind; - this.tbl = tbl; - } - - @Override - public Void run() { - Thread.currentThread().setContextClassLoader(cl); - if (bind) { - tbl.bind(); - } else { - tbl.unbind(); - } - return null; - } - } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org