remm 2005/07/26 05:45:22 Modified: catalina/src/share/org/apache/catalina/valves ValveBase.java ErrorReportValve.java mbeans-descriptors.xml catalina build.xml webapps/docs changelog.xml Added: catalina/src/share/org/apache/catalina/valves SemaphoreValve.java Log: - Add a simple valve for concurrency control, with a conditional compilation flag. - At the moment, this will not be shipped in the release (needs Java 5). - Update changelog. Revision Changes Path 1.19 +15 -1 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/ValveBase.java Index: ValveBase.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/ValveBase.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- ValveBase.java 2 Mar 2005 20:19:58 -0000 1.18 +++ ValveBase.java 26 Jul 2005 12:45:22 -0000 1.19 @@ -178,6 +178,20 @@ public abstract void invoke(Request request, Response response) throws IOException, ServletException; + + /** + * Return a String rendering of this object. + */ + public String toString() { + StringBuffer sb = new StringBuffer(this.getClass().getName()); + sb.append("["); + if (container != null) + sb.append(container.getName()); + sb.append("]"); + return (sb.toString()); + } + + // -------------------- JMX and Registration -------------------- protected String domain; protected ObjectName oname; 1.26 +1 -14 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/ErrorReportValve.java Index: ErrorReportValve.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/ErrorReportValve.java,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- ErrorReportValve.java 21 Jan 2005 13:11:02 -0000 1.25 +++ ErrorReportValve.java 26 Jul 2005 12:45:22 -0000 1.26 @@ -141,19 +141,6 @@ } - /** - * Return a String rendering of this object. - */ - public String toString() { - - StringBuffer sb = new StringBuffer("ErrorReportValve["); - sb.append(container.getName()); - sb.append("]"); - return (sb.toString()); - - } - - // ------------------------------------------------------ Protected Methods 1.10 +25 -0 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/mbeans-descriptors.xml Index: mbeans-descriptors.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/mbeans-descriptors.xml,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- mbeans-descriptors.xml 19 Nov 2004 20:06:07 -0000 1.9 +++ mbeans-descriptors.xml 26 Jul 2005 12:45:22 -0000 1.10 @@ -234,6 +234,31 @@ type="java.lang.String"/> </mbean> + <mbean name="SemaphoreValve" + description="Valve that does concurrency control" + domain="Catalina" + group="Valve" + type="org.apache.catalina.valves.SemaphoreValve"> + + <attribute name="className" + description="Fully qualified class name of the managed object" + type="java.lang.String" + writeable="false"/> + + <attribute name="containerName" + description="Object name of the container" + type="javax.management.ObjectName"/> + + <attribute name="concurrency" + description="Desired concurrency level" + type="int"/> + + <attribute name="fairness" + description="Use a fair semaphore" + type="boolean"/> + + </mbean> + <mbean name="RemoteAddrValve" description="Concrete implementation of RequestFilterValve that filters based on the string representation of the remote client's IP address" domain="Catalina" 1.1 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/SemaphoreValve.java Index: SemaphoreValve.java =================================================================== /* * Copyright 1999-2001,2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.catalina.valves; import java.io.IOException; import java.util.concurrent.Semaphore; import javax.servlet.ServletException; import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; /** * <p>Implementation of a Valve that limits concurrency.</p> * * <p>This Valve may be attached to any Container, depending on the granularity * of the concurrency control you wish to perform.</p> * * @author Remy Maucherat * @version $Revision: 1.1 $ $Date: 2005/07/26 12:45:22 $ */ public class SemaphoreValve extends ValveBase { // ------------------------------------------------------------ Constructor /** * Create a new StandardHost component with the default basic Valve. */ public SemaphoreValve() { semaphore = new Semaphore(concurrency, fairness); } // ----------------------------------------------------- Instance Variables /** * The descriptive information related to this implementation. */ private static final String info = "org.apache.catalina.valves.SemaphoreValve/1.0"; /** * Semaphore. */ protected Semaphore semaphore = null; // ------------------------------------------------------------- Properties /** * Concurrency level of the semaphore. */ protected int concurrency = 10; public int getConcurrency() { return concurrency; } public void setConcurrency(int concurrency) { this.concurrency = concurrency; } /** * Fairness of the semaphore. */ protected boolean fairness = false; public boolean getFairness() { return fairness; } public void setFairness(boolean fairness) { this.fairness = fairness; } // --------------------------------------------------------- Public Methods /** * Return descriptive information about this Valve implementation. */ public String getInfo() { return (info); } /** * Do concurrency control on the request using the semaphore. * * @param request The servlet request to be processed * @param response The servlet response to be created * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet error occurs */ public void invoke(Request request, Response response) throws IOException, ServletException { try { semaphore.acquireUninterruptibly(); // Perform the request getNext().invoke(request, response); } finally { semaphore.release(); } } } 1.83 +7 -0 jakarta-tomcat-catalina/catalina/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/build.xml,v retrieving revision 1.82 retrieving revision 1.83 diff -u -r1.82 -r1.83 --- build.xml 24 Jun 2005 17:18:36 -0000 1.82 +++ build.xml 26 Jul 2005 12:45:22 -0000 1.83 @@ -128,6 +128,8 @@ <available property="jdk.1.3.present" classname="java.lang.reflect.Proxy" /> <available property="jdk.1.4.present" classname="java.nio.Buffer" /> + <available property="jdk.1.5.present" + classname="java.util.concurrent.Semaphore" /> <!-- Ant flags --> <available property="style.available" @@ -618,6 +620,7 @@ <exclude name="org/apache/naming/factory/MailSessionFactory.java"/> <exclude name="org/apache/naming/factory/SendMailFactory.java"/> <exclude name="org/apache/catalina/launcher/**"/> + <exclude name="org/apache/catalina/valves/SemaphoreValve.java"/> </javac> <tstamp> <format property="TODAY" pattern="MMM d yyyy" locale="en"/> @@ -659,6 +662,8 @@ unless="compile.javamail"/> <exclude name="org/apache/catalina/valves/CertificatesValve.java" unless="compile.jsse"/> + <exclude name="org/apache/catalina/valves/SemaphoreValve.java" + unless="jdk.1.5.present"/> </javac> <!-- Copy static resource files --> @@ -976,6 +981,7 @@ <exclude name="org/apache/catalina/valves/Remote*" /> <exclude name="org/apache/catalina/valves/RequestDumperValve.class" /> <exclude name="org/apache/catalina/valves/RequestFilterValve.class" /> + <exclude name="org/apache/catalina/valves/SemaphoreValve.class" /> </fileset> </jar> @@ -1010,6 +1016,7 @@ <include name="org/apache/catalina/valves/Remote*" /> <include name="org/apache/catalina/valves/RequestDumperValve.class" /> <include name="org/apache/catalina/valves/RequestFilterValve.class" /> + <include name="org/apache/catalina/valves/SemaphoreValve.class" /> <!-- Javadoc and i18n exclusions --> <exclude name="**/package.html" /> 1.338 +45 -0 jakarta-tomcat-catalina/webapps/docs/changelog.xml Index: changelog.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/docs/changelog.xml,v retrieving revision 1.337 retrieving revision 1.338 diff -u -r1.337 -r1.338 --- changelog.xml 22 Jul 2005 21:25:44 -0000 1.337 +++ changelog.xml 26 Jul 2005 12:45:22 -0000 1.338 @@ -26,6 +26,51 @@ </p> </section> +<section name="Tomcat 5.5.11 (yoavs)"> + <subsection name="General"> + <changelog> + <update> + Update to Xerces 1.7.0 (remm) + </update> + </changelog> + </subsection> + + <subsection name="Catalina"> + <changelog> + <add> + Add concurrency control valve (o.a.c.valves.SemaphoreValve). As the Tomcat distribution + is not built for Java 5, the valve will have to be compiled from the sources + using Java 5 (remm) + </add> + </changelog> + </subsection> + + <subsection name="Coyote"> + <changelog> + <fix> + Fix default ports for http and https which are set in the request when the parsed + hostname does not specify the port, and which were inverted (https was set as 80 + and http as 443). (remm) + </fix> + </changelog> + </subsection> + + <subsection name="Jasper"> + <changelog> + </changelog> + </subsection> + + <subsection name="Cluster"> + <changelog> + </changelog> + </subsection> + + <subsection name="Webapps"> + <changelog> + </changelog> + </subsection> + </section> + <section name="Tomcat 5.5.10 (yoavs)"> <subsection name="General"> <changelog>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]