DO NOT REPLY [Bug 50177] Heap size or memory issue?
https://issues.apache.org/bugzilla/show_bug.cgi?id=50177 Pid bugzi...@pidster.com changed: What|Removed |Added Status|NEW |RESOLVED Resolution||INVALID --- Comment #1 from Pid bugzi...@pidster.com 2010-10-29 02:34:06 EDT --- Bugzilla is not a support forum. You may find some assistance on the Tomcat Users mailing list, if you ask a specific question. -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: svn commit: r1028521 - in /tomcat/trunk: java/org/apache/catalina/ java/org/apache/catalina/connector/ java/org/apache/catalina/core/ java/org/apache/tomcat/util/http/mapper/ test/org/apache/tomca
Should we add trim()? (in case the user has a new line or spaces after the ,) this.resourceOnlyServlets.add(servletName.trim()); -Tim Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardContext.java?rev=1028521r1=1028520r2=1028521view=diff == --- tomcat/trunk/java/org/apache/catalina/core/StandardContext.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Thu Oct 28 22:29:25 2010 On 10/28/2010 6:29 PM, ma...@apache.org wrote: +@Override +public void setResourceOnlyServlets(String resourceOnlyServlets) { +this.resourceOnlyServlets.clear(); +if (resourceOnlyServlets == null || +resourceOnlyServlets.length() == 0) { +return; +} +String[] servletNames = resourceOnlyServlets.split(,); +for (String servletName : servletNames) { +this.resourceOnlyServlets.add(servletName); +} +} - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: svn commit: r1028521 - in /tomcat/trunk: java/org/apache/catalina/ java/org/apache/catalina/connector/ java/org/apache/catalina/core/ java/org/apache/tomcat/util/http/mapper/ test/org/apache/tomca
On 29/10/2010 13:51, Tim Funk wrote: Should we add trim()? (in case the user has a new line or spaces after the ,) this.resourceOnlyServlets.add(servletName.trim()); Can't hurt. Go for it. Mark -Tim Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardContext.java?rev=1028521r1=1028520r2=1028521view=diff == --- tomcat/trunk/java/org/apache/catalina/core/StandardContext.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Thu Oct 28 22:29:25 2010 On 10/28/2010 6:29 PM, ma...@apache.org wrote: +@Override +public void setResourceOnlyServlets(String resourceOnlyServlets) { +this.resourceOnlyServlets.clear(); +if (resourceOnlyServlets == null || +resourceOnlyServlets.length() == 0) { +return; +} +String[] servletNames = resourceOnlyServlets.split(,); +for (String servletName : servletNames) { +this.resourceOnlyServlets.add(servletName); +} +} - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1028737 - /tomcat/trunk/java/org/apache/catalina/core/StandardContext.java
Author: funkman Date: Fri Oct 29 13:43:30 2010 New Revision: 1028737 URL: http://svn.apache.org/viewvc?rev=1028737view=rev Log: for resourceOnlyServlets allow whitespace in the comma seperated list. Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardContext.java?rev=1028737r1=1028736r2=1028737view=diff == --- tomcat/trunk/java/org/apache/catalina/core/StandardContext.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Fri Oct 29 13:43:30 2010 @@ -826,13 +826,14 @@ public class StandardContext extends Con @Override public void setResourceOnlyServlets(String resourceOnlyServlets) { this.resourceOnlyServlets.clear(); -if (resourceOnlyServlets == null || -resourceOnlyServlets.length() == 0) { +if (resourceOnlyServlets == null) { return; } -String[] servletNames = resourceOnlyServlets.split(,); -for (String servletName : servletNames) { -this.resourceOnlyServlets.add(servletName); +for (String servletName : resourceOnlyServlets.split(,)) { +servletName = servletName.trim(); +if (servletName.length()0) { +this.resourceOnlyServlets.add(servletName); +} } } - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1028861 - /tomcat/trunk/java/org/apache/jasper/util/FastRemovalDequeue.java
Author: rjung Date: Fri Oct 29 17:41:05 2010 New Revision: 1028861 URL: http://svn.apache.org/viewvc?rev=1028861view=rev Log: Improve Jsp limiter: - Under high load entries removed from the jspQueue were already re-added via moveFirst by some other concurrent request, before the JspWrapper was unregistered. Add valid field to the Entry object to mark as invalid during removal. - Improve comment about thread-safetyness and add comment about the new valid field. - Add new getSize(). Will be used soon. - Reorder getters and setters of Entry. Modified: tomcat/trunk/java/org/apache/jasper/util/FastRemovalDequeue.java Modified: tomcat/trunk/java/org/apache/jasper/util/FastRemovalDequeue.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/util/FastRemovalDequeue.java?rev=1028861r1=1028860r2=1028861view=diff == --- tomcat/trunk/java/org/apache/jasper/util/FastRemovalDequeue.java (original) +++ tomcat/trunk/java/org/apache/jasper/util/FastRemovalDequeue.java Fri Oct 29 17:41:05 2010 @@ -29,6 +29,11 @@ package org.apache.jasper.util; * linked list, so that removal of an Entry does not need to search for it but * instead can be done in constant time. * + * The implementation is not thread-safe. Full synchronisation has to be provided + * externally. Invalidation of Entry objects during removal from the list is done + * by setting their valid field to false. All public methods which take Entry + * objects as arguments are NOP if the entry is no longer valid. + * * A typical use of the FastRemovalDequeue is a list of entries in sorted order, * where the sort position of an object will only switch to first or last. * @@ -43,11 +48,25 @@ public class FastRemovalDequeueT { private Entry first; /** Last element of the queue. */ private Entry last; +/** Size of the queue */ +private int size; /** Initialize empty queue. */ public FastRemovalDequeue() { first = null; last = null; +size = 0; +} + +/** + * Retrieve the size of the list. + * This method also needs to be externaly synchronized to + * ensure correct publication of changes. + * + * @return the size of the list. + * */ +public int getSize() { +return size; } /** @@ -66,6 +85,7 @@ public class FastRemovalDequeueT { entry.setNext(first); first = entry; } +size++; return entry; } @@ -86,6 +106,7 @@ public class FastRemovalDequeueT { entry.setPrevious(last); last = entry; } +size++; return entry; } @@ -99,10 +120,12 @@ public class FastRemovalDequeueT { T content = null; if (first != null) { content = first.getContent(); +first.setValid(false); first = first.getNext(); if (first != null) { first.setPrevious(null); } +size--; } return content; } @@ -116,10 +139,12 @@ public class FastRemovalDequeueT { T content = null; if (last != null) { content = last.getContent(); +last.setValid(false); last = last.getPrevious(); if (last != null) { last.setNext(null); } +size--; } return content; } @@ -128,6 +153,9 @@ public class FastRemovalDequeueT { * Removes any element of the list and returns its content. **/ public void remove(final Entry element) { +if (!element.getValid()) { +return; +} Entry next = element.getNext(); Entry prev = element.getPrevious(); if (next != null) { @@ -140,6 +168,7 @@ public class FastRemovalDequeueT { } else { first = next; } +size--; } /** @@ -151,7 +180,8 @@ public class FastRemovalDequeueT { * @param element the entry to move in front. * */ public void moveFirst(final Entry element) { -if (element.getPrevious() != null) { +if (element.getValid() +element.getPrevious() != null) { Entry prev = element.getPrevious(); Entry next = element.getNext(); prev.setNext(next); @@ -176,7 +206,8 @@ public class FastRemovalDequeueT { * @param element the entry to move to the back. * */ public void moveLast(final Entry element) { -if (element.getNext() != null) { +if (element.getValid() +element.getNext() != null) { Entry next = element.getNext(); Entry prev = element.getPrevious(); next.setPrevious(prev); @@ -200,35 +231,45 @@ public class FastRemovalDequeueT { */ public class Entry { +/** Is this entry still valid? */ +
svn commit: r1028862 - /tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java
Author: rjung Date: Fri Oct 29 17:47:01 2010 New Revision: 1028862 URL: http://svn.apache.org/viewvc?rev=1028862view=rev Log: Rearrange placement of JSP limter code in JSP servlet wrapper. Do everything in one place: - add to the queue if this is the first time and only then check for the size and shrink if necessary - move to the front of the queue otherwise Move this in front of the actual servlet service. Modified: tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java Modified: tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java?rev=1028862r1=1028861r2=1028862view=diff == --- tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java (original) +++ tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java Fri Oct 29 17:47:01 2010 @@ -325,10 +325,6 @@ public class JspServletWrapper { // The following sets reload to true, if necessary ctxt.compile(); - -if (options.getMaxLoadedJsps() 0) { -ctxt.getRuntimeContext().unloadJsp(); -} } } else { if (compileException != null) { @@ -375,7 +371,20 @@ public class JspServletWrapper { try { /* - * (3) Service request + * (3) Handle limitation of number of loaded Jsps + */ +if (options.getMaxLoadedJsps() 0) { +synchronized(this) { +if (ticket == null) { +ticket = ctxt.getRuntimeContext().push(this); +ctxt.getRuntimeContext().unloadJsp(); +} else { +ctxt.getRuntimeContext().makeYoungest(ticket); +} +} +} +/* + * (4) Service request */ if (theServlet instanceof SingleThreadModel) { // sync on the wrapper so that the freshness @@ -386,14 +395,6 @@ public class JspServletWrapper { } else { theServlet.service(request, response); } -if (options.getMaxLoadedJsps() 0) { -synchronized(this) { -if (ticket == null) -ticket = ctxt.getRuntimeContext().push(this); -else -ctxt.getRuntimeContext().makeYoungest(ticket); -} -} } catch (UnavailableException ex) { String includeRequestUri = (String) request.getAttribute(javax.servlet.include.request_uri); - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1028863 - /tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java
Author: rjung Date: Fri Oct 29 17:54:27 2010 New Revision: 1028863 URL: http://svn.apache.org/viewvc?rev=1028863view=rev Log: Simplify JSP limiter: - inline getJspForUnload It is only used privately and only in one place plus the code gets easier to understand. - remove compilation interval check from background method checkUnload(). Better to run on every iteration of the background job. - Do not check JSP count against the size of the wrapper list (jsps). Instead check against the queue length. Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java?rev=1028863r1=1028862r2=1028863view=diff == --- tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java Fri Oct 29 17:54:27 2010 @@ -500,23 +500,6 @@ public final class JspRuntimeContext { return new SecurityHolder(source, permissions); } -/** Returns a JspServletWrapper that should be destroyed. Default strategy: Least recently used. */ -public JspServletWrapper getJspForUnload(final int maxLoadedJsps) { -if( jsps.size() maxLoadedJsps ) { -synchronized( jsps ) { -JspServletWrapper oldest; -synchronized(jspQueue) { -oldest = jspQueue.pop(); -} -if (oldest != null) { -removeWrapper(oldest.getJspUri()); -return oldest; -} -} -} -return null; -} - /** * Method used by background thread to check if any JSP's should be destroyed. * If JSP's to be unloaded are found, they will be destroyed. @@ -524,10 +507,7 @@ public final class JspRuntimeContext { */ public void checkUnload() { if (options.getMaxLoadedJsps() 0) { -long now = System.currentTimeMillis(); -if (now (lastCheck + (options.getCheckInterval() * 1000L))) { -while (unloadJsp()); -} +while (unloadJsp()) {} } } @@ -535,8 +515,14 @@ public final class JspRuntimeContext { * Checks whether there is a jsp to unload, if one is found, it is destroyed. * */ public boolean unloadJsp() { -JspServletWrapper jsw = getJspForUnload(options.getMaxLoadedJsps()); -if( null != jsw ) { +JspServletWrapper jsw = null; +synchronized(jspQueue) { +if(jspQueue.getSize() options.getMaxLoadedJsps()) { +jsw = jspQueue.pop(); +} +} +if (jsw != null) { +removeWrapper(jsw.getJspUri()); synchronized(jsw) { jsw.destroy(); return true; - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
DO NOT REPLY [Bug 50182] New: Contributing back enhancements to CompressionFilter
https://issues.apache.org/bugzilla/show_bug.cgi?id=50182 Summary: Contributing back enhancements to CompressionFilter Product: Tomcat 6 Version: unspecified Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: Examples AssignedTo: dev@tomcat.apache.org ReportedBy: da...@sogeeky.net Created an attachment (id=26227) -- (https://issues.apache.org/bugzilla/attachment.cgi?id=26227) Source code and example web.xml Years ago I contributed an enhancement to convert the SSIServlet into a filter (java/org/apache/catalina/ssi/SSIFilter.java). Now I'm back to offer up some enhancements to the CompressionFilter example (webapps/examples/WEB-INF/classes/compressionFilters). I've found (as have others) that the connector compression is flaky and unreliable, so I turned to the CompressionFilter example, but found it to be badly lacking in functionality. No doubt owing to its status as an example project. I've made a bunch of enhancements to it and I feel it's worth of being moved out of examples now. You may even want to deprecate the connector compression in favor of this - or at least roll the two together. In my own webapp (and the attached zip) I've renamed it to GZipFilter and it lives in my own internal package structure, but please move it back into an org.apache package structure and rename it as you see fit. The enhancements I've made are: * It now supports specifying which mime types are compressible. * It now supports a variable sized buffer, which can be used to avoid chunking on small files. * The compression threshold and all other settings are configurable in web.xml. * Miscellaneous bug fixes. If you adopt these enhancements, please credit David Becker with no email, same as on the SSIServlet. Enjoy! -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
DO NOT REPLY [Bug 50182] Contributing back enhancements to CompressionFilter
https://issues.apache.org/bugzilla/show_bug.cgi?id=50182 David Becker da...@sogeeky.net changed: What|Removed |Added CC||da...@sogeeky.net --- Comment #1 from David Becker da...@sogeeky.net 2010-10-29 15:47:26 EDT --- For records on my previous SSIFilter see: https://issues.apache.org/bugzilla/show_bug.cgi?id=33106 -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
DO NOT REPLY [Bug 50183] New: [Tribes] Bio Sender is not scheduling the task to the excecutors
https://issues.apache.org/bugzilla/show_bug.cgi?id=50183 Summary: [Tribes] Bio Sender is not scheduling the task to the excecutors Product: Tomcat 7 Version: trunk Platform: PC OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: Cluster AssignedTo: dev@tomcat.apache.org ReportedBy: arieland...@hotmail.com Created an attachment (id=26228) -- (https://issues.apache.org/bugzilla/attachment.cgi?id=26228) proposed patch Hi, I'm using apache tribes outside of Tomcat. Although my version is not the latest one, the bug also occurs in Trunk. It seems that there was a refactor (using executors instead of threads and monitors) and BioReceiver is not scheduling the task. (I think that the patch is much more descriptive than any comment I could write) Regards, Ariel -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
DO NOT REPLY [Bug 50184] New: RpcChannel sends the answer without requesting an ACK
https://issues.apache.org/bugzilla/show_bug.cgi?id=50184 Summary: RpcChannel sends the answer without requesting an ACK Product: Tomcat 7 Version: trunk Platform: PC OS/Version: Solaris Status: NEW Severity: normal Priority: P2 Component: Cluster AssignedTo: dev@tomcat.apache.org ReportedBy: arieland...@hotmail.com Created an attachment (id=26229) -- (https://issues.apache.org/bugzilla/attachment.cgi?id=26229) proposed patch Hi, I'm using apache tribes outside of Tomcat. Although my version is not the latest one, this also applies to trunk. I have a customer that was using Bio senders (a version before to the excecutors refactor see bug 50183), and there were experiencing some weird behavior. (I couldn't reproduce it, but I guess it is related with the platform since they are using solaris) My application uses tribes to create an RPC channel. They also had some network issues. So, in certain occasions, the application invoked a remote method, the remote node processed the invocation and send the answer back (but it is not received in the first node). So, the timeout occurs and eventually a new RPC invocation occurs. But this time, the second node realized that there is a socket issue when trying to send the answer back (it gets a broken pipe exception). Them the connection is re-established and the message is received without any issues. My customer is complaining about the timeout that occurred the first time. To send the message we do the following: BioSender.pushMessage(.) { ... soOut.write(data); soOut.flush(); ... } But the flush operation does not warranty that the message was successfully sent to the network. It just warranty that the information was passed to the S.O. http://download.oracle.com/javase/6/docs/api/java/io/OutputStream.html#flush() So, in order to avoid this issue I thought that we can modify the RpcChannel to send the reply message using SEND_OPTIONS_USE_ACK option. Setting this, the remote node will be able to detect situations like the one I commented, and recreate the connection. I'm attaching a patch with my proposal. Thanks for your time. Regards, Ariel -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
DO NOT REPLY [Bug 50185] New: [tribes] Logging improvement
https://issues.apache.org/bugzilla/show_bug.cgi?id=50185 Summary: [tribes] Logging improvement Product: Tomcat 7 Version: trunk Platform: PC OS/Version: Linux Status: NEW Severity: enhancement Priority: P2 Component: Cluster AssignedTo: dev@tomcat.apache.org ReportedBy: arieland...@hotmail.com Created an attachment (id=26230) -- (https://issues.apache.org/bugzilla/attachment.cgi?id=26230) proposed patch Hi, Analyzing some apache tribes logs, I needed a few log items more. It would be great if you can include them in trunk. Attaching patch. Regards, Ariel -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Tomcat JDBC Pool and common-dbcp extra parameters
Tomcat documentation about JDBC/Datasource (http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html) give various attributes for Datasource Factory like maxActive or maxWait. tomcat-dbcp is a copy of common-dbcp 1.3 and its documentation, http://commons.apache.org/dbcp/configuration.html, indicate many others parameters like : - initialSize - validationQuery - minEvictableIdleTimeMillis Could they be used also in Resource definition ? ie : Resource name=jdbc/EmployeeDB auth=Container type=javax.sql.DataSource username=dbusername password=dbpassword driverClassName=org.hsql.jdbcDriver url=jdbc:HypersonicSQL:database minEvictableIdleTimeMillis=1500 initialSize=2 maxActive=8 maxIdle=4/ - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1028935 - in /tomcat/trunk/java/org/apache/jasper: compiler/JspRuntimeContext.java servlet/JspServletWrapper.java util/FastRemovalDequeue.java
Author: rjung Date: Fri Oct 29 22:44:52 2010 New Revision: 1028935 URL: http://svn.apache.org/viewvc?rev=1028935view=rev Log: Changes to FastRemovalDequeue: - Make queue thread safe and remove external synchronisation - Provide maximal size to queue - Include size checking when adding entries - Return handle to displaced entries when queue overflows while adding a new entry - Explicitely invalidate queue entries on removal by using new field valid Changes to JspRuntimeContext: - Initialize FastRemovalDequeue with correct size - No more external synchronisation for FastRemovalDequeue - Private utility method to unload a wrapper - Check for displaced wrapper when adding a new wrapper to the queue and unload it Changes to JspServletWrapper: - No more explicit overflow check for the queue. It's now done implicitely when adding to the queue. Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java tomcat/trunk/java/org/apache/jasper/util/FastRemovalDequeue.java Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java?rev=1028935r1=1028934r2=1028935view=diff == --- tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java Fri Oct 29 22:44:52 2010 @@ -155,6 +155,11 @@ public final class JspRuntimeContext { options.getCheckInterval() 0) { lastCheck = System.currentTimeMillis(); } + +if (options.getMaxLoadedJsps() 0) { +jspQueue = new FastRemovalDequeueJspServletWrapper(options.getMaxLoadedJsps()); +} + } // - Instance Variables @@ -178,7 +183,7 @@ public final class JspRuntimeContext { /** * Keeps JSP pages ordered by last access. */ -private FastRemovalDequeueJspServletWrapper jspQueue = new FastRemovalDequeueJspServletWrapper(); +private FastRemovalDequeueJspServletWrapper jspQueue = null; // -- Public Methods @@ -213,15 +218,18 @@ public final class JspRuntimeContext { /** * Push a newly compiled JspServletWrapper into the queue at first - * execution of jsp. + * execution of jsp. Destroy any JSP the has been replaced in the queue. * * @param jsw Servlet wrapper for jsp. * @return a ticket that can be pushed to front of queue at later execution times. * */ public FastRemovalDequeueJspServletWrapper.Entry push(JspServletWrapper jsw) { -synchronized (jspQueue) { -return jspQueue.push(jsw); +FastRemovalDequeueJspServletWrapper.Entry entry = jspQueue.push(jsw); +JspServletWrapper replaced = entry.getReplaced(); +if (replaced != null) { +unloadJspServletWrapper(replaced); } +return entry; } /** @@ -230,9 +238,7 @@ public final class JspRuntimeContext { * @param ticket the ticket for the jsp. * */ public void makeYoungest(FastRemovalDequeueJspServletWrapper.Entry ticket) { -synchronized(jspQueue) { -jspQueue.moveFirst(ticket); -} +jspQueue.moveFirst(ticket); } /** @@ -500,6 +506,13 @@ public final class JspRuntimeContext { return new SecurityHolder(source, permissions); } +private void unloadJspServletWrapper(JspServletWrapper jsw) { +removeWrapper(jsw.getJspUri()); +synchronized(jsw) { +jsw.destroy(); +} +} + /** * Method used by background thread to check if any JSP's should be destroyed. * If JSP's to be unloaded are found, they will be destroyed. @@ -522,11 +535,8 @@ public final class JspRuntimeContext { } } if (jsw != null) { -removeWrapper(jsw.getJspUri()); -synchronized(jsw) { -jsw.destroy(); -return true; -} +unloadJspServletWrapper(jsw); +return true; } return false; } Modified: tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java?rev=1028935r1=1028934r2=1028935view=diff == --- tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java (original) +++ tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java Fri Oct 29 22:44:52 2010 @@ -377,7 +377,6 @@ public class JspServletWrapper {
svn commit: r1028939 - in /tomcat/trunk/java/org/apache/jasper: compiler/JspRuntimeContext.java servlet/JspServletWrapper.java
Author: rjung Date: Fri Oct 29 23:08:59 2010 New Revision: 1028939 URL: http://svn.apache.org/viewvc?rev=1028939view=rev Log: We will no longer continuously update the jspQueue order. Instead only update each JSP once between background task runs. Changes to JspRuntimeContext: - Rename ticket to unloadHandle - Rename lastCheck to lastCompileCheck to clarify purpose - Add lastJspQueueUpdate which contains the time of the last run of checkUnload() - Add getter for lastJspQueueUpdate - Background task checkUnload() now only tracks the time of its last execution. Changes to JspServletWrapper: - Rename ticket to unloadHandle - Replace options.getMaxLoadedJsps() with final field unloadByCount - Do no longer move wrapper in jspQueue on each access. Only move once after each run of the background task checkUnload(). Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java?rev=1028939r1=1028938r2=1028939view=diff == --- tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java Fri Oct 29 23:08:59 2010 @@ -153,7 +153,7 @@ public final class JspRuntimeContext { if (!options.getDevelopment() appBase != null options.getCheckInterval() 0) { -lastCheck = System.currentTimeMillis(); +lastCompileCheck = System.currentTimeMillis(); } if (options.getMaxLoadedJsps() 0) { @@ -173,7 +173,8 @@ public final class JspRuntimeContext { private final PermissionCollection permissionCollection; private final CodeSource codeSource; private final String classpath; -private volatile long lastCheck = -1L; +private volatile long lastCompileCheck = -1L; +private volatile long lastJspQueueUpdate = System.currentTimeMillis(); /** * Maps JSP pages to their JspServletWrapper's @@ -221,7 +222,7 @@ public final class JspRuntimeContext { * execution of jsp. Destroy any JSP the has been replaced in the queue. * * @param jsw Servlet wrapper for jsp. - * @return a ticket that can be pushed to front of queue at later execution times. + * @return an unloadHandle that can be pushed to front of queue at later execution times. * */ public FastRemovalDequeueJspServletWrapper.Entry push(JspServletWrapper jsw) { FastRemovalDequeueJspServletWrapper.Entry entry = jspQueue.push(jsw); @@ -233,12 +234,12 @@ public final class JspRuntimeContext { } /** - * Push ticket for JspServletWrapper to front of the queue. + * Push unloadHandle for JspServletWrapper to front of the queue. * - * @param ticket the ticket for the jsp. + * @param unloadHandle the unloadHandle for the jsp. * */ -public void makeYoungest(FastRemovalDequeueJspServletWrapper.Entry ticket) { -jspQueue.moveFirst(ticket); +public void makeYoungest(FastRemovalDequeueJspServletWrapper.Entry unloadHandle) { +jspQueue.moveFirst(unloadHandle); } /** @@ -322,13 +323,13 @@ public final class JspRuntimeContext { */ public void checkCompile() { -if (lastCheck 0) { +if (lastCompileCheck 0) { // Checking was disabled return; } long now = System.currentTimeMillis(); -if (now (lastCheck + (options.getCheckInterval() * 1000L))) { -lastCheck = now; +if (now (lastCompileCheck + (options.getCheckInterval() * 1000L))) { +lastCompileCheck = now; } else { return; } @@ -361,6 +362,13 @@ public final class JspRuntimeContext { return classpath; } +/** + * Last time the update background task has run + */ +public long getLastJspQueueUpdate() { +return lastJspQueueUpdate; +} + // Private Methods @@ -513,31 +521,12 @@ public final class JspRuntimeContext { } } + /** - * Method used by background thread to check if any JSP's should be destroyed. - * If JSP's to be unloaded are found, they will be destroyed. - * Uses the lastCheck time from background compiler to determine if it is time to unload JSP's. + * Method used by background thread to check if any JSP's should be unloaded. */ public void checkUnload() { -if (options.getMaxLoadedJsps() 0) { -while (unloadJsp()) {} -} -} - -/** - * Checks whether there
RE: Tomcat JDBC Pool and common-dbcp extra parameters
From: Henri Gomez [mailto:henri.go...@gmail.com] Subject: Tomcat JDBC Pool and common-dbcp extra parameters tomcat-dbcp is a copy of common-dbcp 1.3 and its documentation, http://commons.apache.org/dbcp/configuration.html, indicate many others parameters Could they be used also in Resource definition ? That's what the Tomcat doc explicitly states: See the DBCP documentation for a complete list of configuration parameters. http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html#Database_Connection_Pool_(DBCP)_Configurations - Chuck THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY MATERIAL and is thus for use only by the intended recipient. If you received this in error, please contact the sender and delete the e-mail and its attachments from all computers. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1028940 - in /tomcat/trunk/java/org/apache/jasper: EmbeddedServletOptions.java JspC.java Options.java compiler/JspRuntimeContext.java resources/LocalStrings.properties servlet/JspServletW
Author: rjung Date: Fri Oct 29 23:22:35 2010 New Revision: 1028940 URL: http://svn.apache.org/viewvc?rev=1028940view=rev Log: Add new JSP init parameter jspIdleTimeout. If set 0 (default -1), a background task will unload all JSPs being idle longer than this time in seconds. Modified: tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java tomcat/trunk/java/org/apache/jasper/JspC.java tomcat/trunk/java/org/apache/jasper/Options.java tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java Modified: tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java?rev=1028940r1=1028939r2=1028940view=diff == --- tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java (original) +++ tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java Fri Oct 29 23:22:35 2010 @@ -189,11 +189,17 @@ public final class EmbeddedServletOption /** - * The maxim number of loaded jsps per web-application. If there are more + * The maximum number of loaded jsps per web-application. If there are more * jsps loaded, they will be unloaded. */ private int maxLoadedJsps = -1; +/** + * The idle time after which a JSP is unloaded. + * If unset or less or equal than 0, no jsps are unloaded. + */ +private int jspIdleTimeout = -1; + public String getProperty(String name ) { return settings.getProperty( name ); } @@ -391,14 +397,22 @@ public final class EmbeddedServletOption } /** - * Should any jsps be unloaded? If set to a value greater than 0 eviction of jsps - * is started. Default: -1 - * */ + * Should jsps be unloaded if to many are loaded? + * If set to a value greater than 0 eviction of jsps is started. Default: -1 + */ public int getMaxLoadedJsps() { return maxLoadedJsps; } /** + * Should any jsps be unloaded when being idle for to long? + * If set to a value greater than 0 eviction of jsps is started. Default: -1 + */ +public int getJspIdleTimeout() { +return jspIdleTimeout; +} + +/** * Create an EmbeddedServletOptions object using data available from * ServletConfig and ServletContext. */ @@ -689,6 +703,17 @@ public final class EmbeddedServletOption } } } + +String jspIdleTimeout = config.getInitParameter(jspIdleTimeout); +if (jspIdleTimeout != null) { +try { +this.jspIdleTimeout = Integer.parseInt(jspIdleTimeout); +} catch(NumberFormatException ex) { +if (log.isWarnEnabled()) { + log.warn(Localizer.getMessage(jsp.warning.jspIdleTimeout, +this.jspIdleTimeout)); +} +} +} // Setup the global Tag Libraries location cache for this // web-application. Modified: tomcat/trunk/java/org/apache/jasper/JspC.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/JspC.java?rev=1028940r1=1028939r2=1028940view=diff == --- tomcat/trunk/java/org/apache/jasper/JspC.java (original) +++ tomcat/trunk/java/org/apache/jasper/JspC.java Fri Oct 29 23:22:35 2010 @@ -447,6 +447,10 @@ public class JspC implements Options { return -1; } +public int getJspIdleTimeout() { +return -1; +} + /** * {...@inheritdoc} */ Modified: tomcat/trunk/java/org/apache/jasper/Options.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/Options.java?rev=1028940r1=1028939r2=1028940view=diff == --- tomcat/trunk/java/org/apache/jasper/Options.java (original) +++ tomcat/trunk/java/org/apache/jasper/Options.java Fri Oct 29 23:22:35 2010 @@ -222,9 +222,15 @@ public interface Options { public MapString, TagLibraryInfo getCache(); /** - * The maxim number of loaded jsps per web-application. If there are more + * The maximum number of loaded jsps per web-application. If there are more * jsps loaded, they will be unloaded. If unset or less than 0, no jsps * are unloaded. */ public int getMaxLoadedJsps(); + +/** + * The idle time after which a JSP is unloaded. + * If unset or less or equal than 0, no jsps are unloaded. + */ +public int getJspIdleTimeout(); } Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java URL:
svn commit: r1028944 - in /tomcat/trunk: conf/web.xml webapps/docs/changelog.xml webapps/docs/jasper-howto.xml
Author: rjung Date: Fri Oct 29 23:34:37 2010 New Revision: 1028944 URL: http://svn.apache.org/viewvc?rev=1028944view=rev Log: Document jspIdleTimeout. Modified: tomcat/trunk/conf/web.xml tomcat/trunk/webapps/docs/changelog.xml tomcat/trunk/webapps/docs/jasper-howto.xml Modified: tomcat/trunk/conf/web.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/conf/web.xml?rev=1028944r1=1028943r2=1028944view=diff == --- tomcat/trunk/conf/web.xml (original) +++ tomcat/trunk/conf/web.xml Fri Oct 29 23:34:37 2010 @@ -193,6 +193,10 @@ !-- this limit. A value of zero or less indicates -- !-- no limit. [-1] -- !-- -- + !-- jspIdleTimeout The amount of time in seconds a JSP can be -- + !-- idle before it is unloaded. A value of zero-- + !-- or less indicates never unload. [-1] -- + !-- -- !-- modificationTestInterval -- !-- Causes a JSP (and its dependent files) to not -- !-- be checked for modification during the -- Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1028944r1=1028943r2=1028944view=diff == --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Fri Oct 29 23:34:37 2010 @@ -101,6 +101,14 @@ codeEnum.name()/code rather than codeEnum.toString()/code as required by the EL specification. (markt) /fix + fix +Fix minor thread-safety and performance issues in the implementation +of codemaxLoadedJsps/code. (rjung) + /fix + add +Add support for unloading JSPs that have not been requested for a +long time using the new parameter codejspIdleTimeout/code. (rjung) + /add /changelog /subsection subsection name=Cluster Modified: tomcat/trunk/webapps/docs/jasper-howto.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/jasper-howto.xml?rev=1028944r1=1028943r2=1028944view=diff == --- tomcat/trunk/webapps/docs/jasper-howto.xml (original) +++ tomcat/trunk/webapps/docs/jasper-howto.xml Fri Oct 29 23:34:37 2010 @@ -163,6 +163,10 @@ least recently used JSPs will be unloade any one time does not exceed this limit. A value of zero or less indicates no limit. Default code-1/code/li +listrongjspIdleTimeout/strong - The amount of time in seconds a JSP can be +idle before it is unloaded. A value of zero or less indicates never unload. +Default code-1/code/li + listrongmodificationTestInterval/strong - Causes a JSP (and its dependent files) to not be checked for modification during the specified time interval (in seconds) from the last time the JSP was checked for modification. A value of - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: svn commit: r1028940 - in /tomcat/trunk/java/org/apache/jasper: EmbeddedServletOptions.java JspC.java Options.java compiler/JspRuntimeContext.java resources/LocalStrings.properties servlet/JspServ
Would you consider putting the time unit (seconds) in the param name or at least in _all_ the javadoc? Without documentation I would expect the natural time unit to be minutes. thanks david jencks On Oct 29, 2010, at 4:22 PM, rj...@apache.org wrote: Author: rjung Date: Fri Oct 29 23:22:35 2010 New Revision: 1028940 URL: http://svn.apache.org/viewvc?rev=1028940view=rev Log: Add new JSP init parameter jspIdleTimeout. If set 0 (default -1), a background task will unload all JSPs being idle longer than this time in seconds. Modified: tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java tomcat/trunk/java/org/apache/jasper/JspC.java tomcat/trunk/java/org/apache/jasper/Options.java tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java Modified: tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java?rev=1028940r1=1028939r2=1028940view=diff == --- tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java (original) +++ tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java Fri Oct 29 23:22:35 2010 @@ -189,11 +189,17 @@ public final class EmbeddedServletOption /** - * The maxim number of loaded jsps per web-application. If there are more + * The maximum number of loaded jsps per web-application. If there are more * jsps loaded, they will be unloaded. */ private int maxLoadedJsps = -1; +/** + * The idle time after which a JSP is unloaded. + * If unset or less or equal than 0, no jsps are unloaded. + */ +private int jspIdleTimeout = -1; + public String getProperty(String name ) { return settings.getProperty( name ); } @@ -391,14 +397,22 @@ public final class EmbeddedServletOption } /** - * Should any jsps be unloaded? If set to a value greater than 0 eviction of jsps - * is started. Default: -1 - * */ + * Should jsps be unloaded if to many are loaded? + * If set to a value greater than 0 eviction of jsps is started. Default: -1 + */ public int getMaxLoadedJsps() { return maxLoadedJsps; } /** + * Should any jsps be unloaded when being idle for to long? + * If set to a value greater than 0 eviction of jsps is started. Default: -1 + */ +public int getJspIdleTimeout() { +return jspIdleTimeout; +} + +/** * Create an EmbeddedServletOptions object using data available from * ServletConfig and ServletContext. */ @@ -689,6 +703,17 @@ public final class EmbeddedServletOption } } } + +String jspIdleTimeout = config.getInitParameter(jspIdleTimeout); +if (jspIdleTimeout != null) { +try { +this.jspIdleTimeout = Integer.parseInt(jspIdleTimeout); +} catch(NumberFormatException ex) { +if (log.isWarnEnabled()) { + log.warn(Localizer.getMessage(jsp.warning.jspIdleTimeout, +this.jspIdleTimeout)); +} +} +} // Setup the global Tag Libraries location cache for this // web-application. Modified: tomcat/trunk/java/org/apache/jasper/JspC.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/JspC.java?rev=1028940r1=1028939r2=1028940view=diff == --- tomcat/trunk/java/org/apache/jasper/JspC.java (original) +++ tomcat/trunk/java/org/apache/jasper/JspC.java Fri Oct 29 23:22:35 2010 @@ -447,6 +447,10 @@ public class JspC implements Options { return -1; } +public int getJspIdleTimeout() { +return -1; +} + /** * {...@inheritdoc} */ Modified: tomcat/trunk/java/org/apache/jasper/Options.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/Options.java?rev=1028940r1=1028939r2=1028940view=diff == --- tomcat/trunk/java/org/apache/jasper/Options.java (original) +++ tomcat/trunk/java/org/apache/jasper/Options.java Fri Oct 29 23:22:35 2010 @@ -222,9 +222,15 @@ public interface Options { public MapString, TagLibraryInfo getCache(); /** - * The maxim number of loaded jsps per web-application. If there are more + * The maximum number of loaded jsps per web-application. If there are more * jsps loaded, they will be unloaded. If unset or less than 0, no jsps * are unloaded. */ public int getMaxLoadedJsps(); + +
svn commit: r1028950 - in /tomcat/trunk/java/org/apache/jasper: EmbeddedServletOptions.java Options.java compiler/JspRuntimeContext.java
Author: rjung Date: Fri Oct 29 23:53:15 2010 New Revision: 1028950 URL: http://svn.apache.org/viewvc?rev=1028950view=rev Log: Make sure, we mention the unit seconds for jspIdleTimeout everywhere. Modified: tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java tomcat/trunk/java/org/apache/jasper/Options.java tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java Modified: tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java?rev=1028950r1=1028949r2=1028950view=diff == --- tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java (original) +++ tomcat/trunk/java/org/apache/jasper/EmbeddedServletOptions.java Fri Oct 29 23:53:15 2010 @@ -195,7 +195,7 @@ public final class EmbeddedServletOption private int maxLoadedJsps = -1; /** - * The idle time after which a JSP is unloaded. + * The idle time in seconds after which a JSP is unloaded. * If unset or less or equal than 0, no jsps are unloaded. */ private int jspIdleTimeout = -1; @@ -405,7 +405,7 @@ public final class EmbeddedServletOption } /** - * Should any jsps be unloaded when being idle for to long? + * Should any jsps be unloaded when being idle for this time in seconds? * If set to a value greater than 0 eviction of jsps is started. Default: -1 */ public int getJspIdleTimeout() { Modified: tomcat/trunk/java/org/apache/jasper/Options.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/Options.java?rev=1028950r1=1028949r2=1028950view=diff == --- tomcat/trunk/java/org/apache/jasper/Options.java (original) +++ tomcat/trunk/java/org/apache/jasper/Options.java Fri Oct 29 23:53:15 2010 @@ -229,7 +229,7 @@ public interface Options { public int getMaxLoadedJsps(); /** - * The idle time after which a JSP is unloaded. + * The idle time in seconds after which a JSP is unloaded. * If unset or less or equal than 0, no jsps are unloaded. */ public int getJspIdleTimeout(); Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java?rev=1028950r1=1028949r2=1028950view=diff == --- tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java Fri Oct 29 23:53:15 2010 @@ -160,6 +160,7 @@ public final class JspRuntimeContext { jspQueue = new FastRemovalDequeueJspServletWrapper(options.getMaxLoadedJsps()); } +/* Init parameter is in seconds, locally we use milliseconds */ jspIdleTimeout = options.getJspIdleTimeout() * 1000; } @@ -176,6 +177,7 @@ public final class JspRuntimeContext { private final String classpath; private volatile long lastCompileCheck = -1L; private volatile long lastJspQueueUpdate = System.currentTimeMillis(); +/* JSP idle timeout in milliseconds */ private long jspIdleTimeout; /** - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: svn commit: r1028940 - in /tomcat/trunk/java/org/apache/jasper: EmbeddedServletOptions.java JspC.java Options.java compiler/JspRuntimeContext.java resources/LocalStrings.properties servlet/JspSer
On 30.10.2010 01:38, David Jencks wrote: Would you consider putting the time unit (seconds) in the param name or at least in_all_ the javadoc? Without documentation I would expect the natural time unit to be minutes. Done (Javadocs). I didn't want to make the parameter name even longer. Thanks for reviewing. Regards, Rainer - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org