package org.mortbay.jetty.handler.rewrite; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.mortbay.jetty.AbstractConnector; import org.mortbay.jetty.Connector; import org.mortbay.jetty.Request; import org.mortbay.jetty.Server; import org.mortbay.log.Log; import org.mortbay.thread.ThreadPool; /** * {@link RuleContainer} for when the {@link ThreadPool} is low on threads * * @author joakime */ public class LowThreadsRuleContainer extends RuleContainer { private ThreadPool _threadPool; private Server _server; /* ------------------------------------------------------------------------------- */ public Server getServer() { return _server; } /* ------------------------------------------------------------------------------- */ public void setServer( Server server ) { _server = server; } /* ------------------------------------------------------------------------------- */ public ThreadPool getThreadPool() { return _threadPool; } /* ------------------------------------------------------------------------------- */ private ThreadPool getThreadPool( Request request ) { if ( _threadPool == null ) { // Lazy load the thread pool from the connector. Connector connector = request.getConnection().getConnector(); if ( connector instanceof AbstractConnector ) { _threadPool = ( (AbstractConnector) connector ).getThreadPool(); return _threadPool; } if ( _server != null ) { // Next, try to load the thread pool from the server. _threadPool = _server.getThreadPool(); return _threadPool; } } return _threadPool; } /* ------------------------------------------------------------------------------- */ public void setThreadPool( ThreadPool pool ) { _threadPool = pool; } /** * Process the contained rules if the threadpool is low on threads * @param target target field to pass on to the contained rules * @param request request object to pass on to the contained rules * @param response response object to pass on to the contained rules */ public String matchAndApply( String target, HttpServletRequest request, HttpServletResponse response ) throws IOException { _threadPool = getThreadPool( (Request) request ); if ( _threadPool == null ) { Log.warn( "ThreadPool not found" ); return target; } Log.debug( "Low on threads: ", _threadPool.isLowOnThreads() ); if ( !_threadPool.isLowOnThreads() ) { return target; } return apply( target, request, response ); } }