On 19.12.2013 19:38, Mark Thomas wrote: > The proposed Apache Tomcat 8.0.0 release candidate 10 is now available > for voting. > > Given this is a release candidate I am working on the basis that it is > equivalent to an alpha. The main changes since RC5 are: > - Better handling of generic types in the WebSocket 1.0 implementation > - Refactor resource handling for the class loader > - Add Cobertura support to the unit tests > - Remove anti-Jar locking feature and replace it with open stream > tracking > - Update to a post Commons Pool 2.0 release snapshot > - Complete refactoring of TLD handling including caching of parsed TLDs > - More consistent handling of XML validation options > - Much more detailed visibility of DBCP connections pools in JMX > - Better organisation of JMX beans in the default JConsole view > - Performance improvements > - Numerous bug fixes > > It can be obtained from: > https://dist.apache.org/repos/dist/dev/tomcat/tomcat-8/v8.0.0-RC10/ > The Maven staging repo is: > https://repository.apache.org/content/repositories/orgapachetomcat-002/ > The svn tag is: > http://svn.apache.org/repos/asf/tomcat/tags/TOMCAT_8_0_0_RC10/ > > The proposed 8.0.0-RC10 release is: > [ ] Broken - do not release > [X] Alpha - go ahead and release as 8.0.0-RC10 alpha
+1 as alpha. Overview: - One special observation in unit tests: Test org.apache.catalina.core.TestDefaultInstanceManager throws 3 NullPointerExceptions, that seem to indicate a broken test (see below). - JMX shows that websocket filter is configured for all default apps. I didn't check, where this comes from, but should it really be active by default? - MBeans "Catalina:context=/...,host=localhost,type=WebResourceRoot" and "Catalina:context=/...,host=localhost,name=Cache,type=WebResourceRoot" very similar in name (same type). All of the numeric data moved from the first to the second (plus additional interesting data in the second), in the first it is only left traceLockedFiles, stateName, cachingAllowed, traceResources and allowLinking which is all boolean or enum type. Should we make the two MBeans differ by "type"? - Same MBean: new attributes traceLockedFiles (boolean) and traceResources (Array): should the second be named tracedResources (additional "d") to distinguish the Array list of resources from the boolean to trace or not to trace switch? - MD5 OK - signatures OK - key in KEYS file - gz and zip for src and bin consistent - src consistent with svn tag - builds fine but - Very few warnings about unsafe or unchecked operations, a little less than for RC5. See full list at end of mail. - build result looks consistent with binaries - no checkstyle complaints - no Javadoc warnings - No unit test failures, great! - Warnings a bit lower than RC 5, errors and exception counts during unit tests higher than for RC 5, mostly in TestHostConfigAutomaticDeployment. - JMX MBean-Comparison with RC 5: - 5 new MBeans Catalina:context=/...,host=localhost,name=Cache,type=WebResourceRoot - Old MBeans Catalina:context=/...,host=localhost,type=WebResourceRoot dropped attributes cacheMaxObjectSize, cacheTtl and cacheMaxSize moved to the new MBean, attributes objectName and domain completely removed, attributes traceLockedFiles (boolean) and traceResources (Array) added. - ordering of tokens in ObjectName and attributes "objectName", "children" and "servlets" changed to be more logical - some filter name changes - from "org.apache.tomcat.websocket.server.WsFilter" to "Tomcat WebSocket (JSR356) Filter" - from "Timing filter" to "Timing Filter" (upper case "f") - MBean j2eeType=WebModule removed attribute antiJARLocking, added attribute tldValidation with value false - MBean ThreadPool added attribute executorTerminationTimeoutMillis with value 5000 - MBean WebappClassLoader removed attributes jarPath and antiJARLocking For the examples webapp also changed order of URLs (jstl.jar and standard.jar switched position) - MBean Loader attribute loaderRepositoriesString simple path names like "/WEB-INF/classes/" changed to file URLs like "file:/.../output/build/webapps/examples/WEB-INF/classes/". The same in the loaderRepositories array. - MBean OperatingSystem attribute OpenFileDescriptorCount up from 86 to 87 Build and tests were done using Java 1.7.0_45. OS was Solaris 10 Sparc, tcnative was 1.1.29 based on APR 1.4.8 and OpenSSL 1.0.1e (plus a few patches). Maybe broken test org.apache.catalina.core.TestDefaultInstanceManager ===================================================================== Running org.apache.catalina.core.TestDefaultInstanceManager 20-Dec-2013 11:08:00.021 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-bio-127.0.0.1-auto-1"] 20-Dec-2013 11:08:00.125 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Tomcat 20-Dec-2013 11:08:00.126 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.0.0-RC10 20-Dec-2013 11:08:01.197 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGenerator.createSecureRandom Creation of SecureRandom instance for session ID generation using [INSECURE] took [642] milliseconds. 20-Dec-2013 11:08:01.303 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-bio-127.0.0.1-auto-1-53094"] 20-Dec-2013 11:08:02.342 SEVERE [http-bio-127.0.0.1-auto-1-exec-1] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [jsp] in context with path [/test] threw exception [Unable to compile class for JSP] with root cause java.lang.NullPointerException at org.apache.jasper.compiler.Validator$ValidateVisitor.<init>(Validator.java:515) at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1819) at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:219) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:375) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:355) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:342) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:221) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:107) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:76) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:934) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:90) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1015) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:646) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:146) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:324) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) 20-Dec-2013 11:08:02.430 SEVERE [http-bio-127.0.0.1-auto-1-exec-2] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [jsp] in context with path [/test] threw exception [Unable to compile class for JSP] with root cause java.lang.NullPointerException at org.apache.jasper.compiler.Validator$ValidateVisitor.<init>(Validator.java:515) at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1819) at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:219) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:375) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:355) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:342) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:221) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:107) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:76) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:934) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:90) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1015) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:646) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:146) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:324) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) 20-Dec-2013 11:08:02.465 SEVERE [http-bio-127.0.0.1-auto-1-exec-3] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [jsp] in context with path [/test] threw exception [Unable to compile class for JSP] with root cause java.lang.NullPointerException at org.apache.jasper.compiler.Validator$ValidateVisitor.<init>(Validator.java:515) at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1819) at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:219) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:375) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:355) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:342) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:221) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:107) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:76) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:934) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:90) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1015) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:646) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:146) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:324) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) 20-Dec-2013 11:08:02.731 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-bio-127.0.0.1-auto-1-53094"] 20-Dec-2013 11:08:02.783 INFO [main] org.apache.catalina.core.StandardService.stopInternal Stopping service Tomcat 20-Dec-2013 11:08:02.822 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-bio-127.0.0.1-auto-1-53094"] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.861 sec Unit test details ================= Unit test warnings ------------------ 68 total (-27 rel RC 5) - most fewer ones in tribes, especially from 46 (RC5) down to 28 (RC10): org.apache.catalina.tribes.group.interceptors.NonBlockingCoordinator.sendElectionMsgToNextInline Unable to send election message to:org.apache.catalina.tribes.membership.MemberImpl[tcp://IP:PORT,IP,PORT, alive=AAA, securePort=-1, UDP Port=-1, id={...}, payload={}, command={...}, domain={...}, ] - 4 less (from 8 in RC5 to 4 in RC10) of type org.apache.tomcat.util.net.AbstractEndpoint.shutdownExecutor The executor associated with thread pool [http-...-127.0.0.1-auto-...] has not fully shutdown. Some application threads may still be running. - down from 6 (RC5) to 3 (RC10): org.apache.catalina.tribes.transport.nio.NioReplicationTask.run IOException in replication worker, unable to drain channel. Probable cause: Keep alive socket closed[null]. - down from 6 (RC5) to 4 (RC10): org.apache.catalina.tribes.transport.nio.ParallelNioSender.doLoop Member send is failing for:tcp://{IP}:PORT ; Setting to suspect and retrying. Unit test SEVERE messages ------------------------- 526 total (+106 rel RC5). Here's the top 20 SEVERE messages: Count Message 78 org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: 48 org.apache.catalina.startup.HostConfig.deployDescriptor Error deploying configuration descriptor .../output/test-tmp/conf/Tomcat/localhost/myapp.xml 36 org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [dispatch] in context with path [] threw exception [Opps.] with root cause 36 org.apache.catalina.core.ApplicationDispatcher.invoke Servlet.service() for servlet error threw exception 27 org.apache.tomcat.util.digester.Digester.startElement Begin event threw exception 18 org.apache.catalina.startup.HostConfig.deployDirectory The web application with context path [/myapp] was not deployed because it contained a deployment descriptor [.../output/test-tmp/webapps/myapp/META-INF/context.xml] which may include configuration necessary for the secure deployment of the application but processing of deployment descriptors is prevented by the deployXML setting of this host. An appropriate descriptor should be created at [.../output/test-tmp/conf/Tomcat/localhost/myapp.xml] to deploy this application. 18 org.apache.catalina.startup.HostConfig.deployDirectory Error deploying web application directory .../output/test-tmp/webapps/myapp 12 org.apache.catalina.startup.HostConfig.deployWAR The web application with context path [/myapp] was not deployed because it contained a deployment descriptor [META-INF/context.xml] which may include configuration necessary for the secure deployment of the application but processing of deployment descriptors is prevented by the deployXML setting of this host. An appropriate descriptor should be created at [.../output/test-tmp/conf/Tomcat/localhost/myapp.xml] to deploy this application. 12 org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive .../output/test-tmp/webapps/myapp.war 9 org.apache.catalina.loader.WebappClassLoader.clearReferencesThreads The web application [] appears to have started a thread named [pool-P-thread-T] but has failed to stop it. This is very likely to create a memory leak. 9 org.apache.catalina.startup.ContextConfig.beforeStart Exception fixing docBase for context [/myapp] 9 org.apache.catalina.core.StandardContext.startInternal Error listenerStart 6 org.apache.catalina.tribes.group.interceptors.NonBlockingCoordinator.messageReceived Error processing coordination message. Could be fatal. 6 org.apache.tomcat.util.descriptor.web.SecurityConstraint.findUncoveredHttpMethods For security constraints with URL pattern [/test] only the HTTP methods [POST] are covered. All other methods are uncovered. 6 org.apache.catalina.loader.WebappClassLoader.clearReferencesThreads The web application [] is still processing a request that has yet to finish. This is very likely to create a memory leak. You can control the time allowed for requests to finish by using the unloadDelay attribute of the standard Context implementation. 6 org.apache.catalina.core.StandardContext.startInternal Context [/myapp] startup failed due to previous errors 6 org.apache.catalina.core.StandardContext.listenerStart Skipped installing application listeners due to previous error(s) 6 org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class org.apache.catalina.core.NoSuchListener 5 org.apache.catalina.tribes.group.interceptors.NonBlockingCoordinator.memberDisappeared Unable to start election when member was removed. 5 org.apache.catalina.loader.WebappClassLoader.clearReferencesThreads The web application [] appears to have started a thread named [http-bio-127.0.0.1-auto-I-exec-PPPPP] but has failed to stop it. This is very likely to create a memory leak. "Exception" in output of unit tests ----------------------------------- 568 times (+101 rel RC5). Top exception counts: Count Exception 75 javax.servlet.ServletException: Opps. 48 Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@HEX] 48 org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/myapp]] 48 java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/myapp]] 39 Caused by: java.lang.IllegalArgumentException: The main resource set specified [.../output/test-tmp/webapps/myapp] is not valid 30 Caused by: org.apache.catalina.LifecycleException: Failed to process either the global, per-host or context-specific context.xml file therefore the [/myapp] Context cannot be started. 30 org.apache.catalina.LifecycleException: Failed to start component [/myapp] 30 java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [/myapp] 13 java.lang.NullPointerException 9 org.apache.catalina.startup.ContextConfig.beforeStart Exception fixing docBase for context [/myapp] 9 Caused by: java.lang.IllegalArgumentException: The main resource set specified [.../output/test-tmp/external/external.war] is not valid 9 java.lang.IllegalArgumentException: <ordering> element is limited to 1 occurrence 9 java.lang.IllegalArgumentException: <name> element is limited to 1 occurrence 9 java.lang.IllegalArgumentException: <absolute-ordering> element is limited to 1 occurrence 9 java.io.IOException: Invalid CRLF, no CR character encountered. 9 java.io.FileNotFoundException: .../output/test-tmp/external/external.war (No such file or directory) 6 Exception in thread "WebSocketClient-AsyncIO-..." java.lang.IllegalStateException: Writing not allowed due to timeout or cancellation 6 org.apache.jasper.JasperException: /bug49nnn/bug49297DuplicateAttr.jsp (line: 21, column: 46) Attribute qualified names must be unique within an element 6 java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided 6 java.lang.ClassNotFoundException: org.apache.catalina.core.NoSuchListener As always I'm not claiming that any of the SEVERE or Exception messages are important. "unchecked" warnings ==================== Some less than RC5, no new ones: Tipis ----- Unchanged: .../java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java:644: warning: [unchecked] unchecked cast entry = new MapEntry<>((K) mapmsg.getKey(), (V) mapmsg.getValue()); ^ required: K found: Serializable where K is a type-variable: K extends Object declared in class AbstractReplicatedMap .../java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java:644: warning: [unchecked] unchecked cast entry = new MapEntry<>((K) mapmsg.getKey(), (V) mapmsg.getValue()); ^ required: V found: Serializable where V is a type-variable: V extends Object declared in class AbstractReplicatedMap .../java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java:669: warning: [unchecked] unchecked cast if ( mapmsg.getValue()!=null ) entry.setValue((V) mapmsg.getValue()); ^ required: V found: Serializable where V is a type-variable: V extends Object declared in class AbstractReplicatedMap .../java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java:675: warning: [unchecked] unchecked cast entry.setValue((V) re); ^ required: V found: ReplicatedMapEntry where V is a type-variable: V extends Object declared in class AbstractReplicatedMap .../java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java:677: warning: [unchecked] unchecked cast if ( mapmsg.getValue()!=null ) entry.setValue((V) mapmsg.getValue()); ^ required: V found: Serializable where V is a type-variable: V extends Object declared in class AbstractReplicatedMap JDBC-Pool --------- Unchanged: .../modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PoolProperties.java:973: warning: [unchecked] unchecked cast return (Class<? extends JdbcInterceptor>)clazz; ^ required: Class<? extends JdbcInterceptor> found: Class<CAP#1> where CAP#1 is a fresh type-variable: CAP#1 extends Object from capture of ? DBCP ---- All known, less items than before: .../dbcp/src/java/org/apache/tomcat/dbcp/dbcp2/PoolingConnection.java:299: warning: [unchecked] unchecked call to PoolablePreparedStatement(PreparedStatement,K,KeyedObjectPool<K,PoolablePreparedStatement<K,S>>,DelegatingConnection<?>) as a member of the raw type PoolablePreparedStatement new PoolablePreparedStatement(getDelegate().prepareStatement( key.getSql()), key, _pstmtPool, this)); ^ where K,S are type-variables: K extends Object declared in class PoolablePreparedStatement S extends PoolablePreparedStatement<K,S> declared in class PoolablePreparedStatement .../dbcp/src/java/org/apache/tomcat/dbcp/dbcp2/PoolingConnection.java:307: warning: [unchecked] unchecked call to PoolablePreparedStatement(PreparedStatement,K,KeyedObjectPool<K,PoolablePreparedStatement<K,S>>,DelegatingConnection<?>) as a member of the raw type PoolablePreparedStatement new PoolablePreparedStatement(getDelegate().prepareStatement( ^ where K,S are type-variables: K extends Object declared in class PoolablePreparedStatement S extends PoolablePreparedStatement<K,S> declared in class PoolablePreparedStatement Regards, Rainer --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org