[Bug 56143] New: Allow "service.bat install" to be used in an non-UAC cmd.exe session
https://issues.apache.org/bugzilla/show_bug.cgi?id=56143 Bug ID: 56143 Summary: Allow "service.bat install" to be used in an non-UAC cmd.exe session Product: Tomcat 7 Version: 7.0.50 Hardware: PC Status: NEW Severity: enhancement Priority: P2 Component: Integration Assignee: dev@tomcat.apache.org Reporter: knst.koli...@gmail.com If you use a Microsoft Windows OS that has UAC and use service.bat script to install Tomcat as a service, you have to first launch command console (cmd.exe) in elevated privileges mode ("Run as administrator") and then call "service.bat install" from there. This requirement is mentioned in Tomcat documentation: http://tomcat.apache.org/tomcat-7.0-doc/windows-service-howto.html#Installing_services [quote] NOTE: On Windows Vista or any other operating system with User Account Control (UAC) you must either disable UAC or right-click on cmd.exe and select "Run as administrator" in order to run this script. If UAC is enabled being logged on with an Administrator account is not sufficient. [/quote] If you forget to launch cmd.exe in that mode and just run "service.bat install", with the current Tomcat versions (6.0.39, 7.0.50, 8.0.3) you will be prompted 3 times by UAC [3], but the service will be installed incorrectly. With r1565781 / r1567742 (7.0.52) this was improved and you will be prompted by UAC only once, but still the service will be installed incorrectly. The cause for this behaviour is that install command in service.bat script uses environment variables (such as PR_CLASSPATH) to pass parameters to service installer (prunsrv).[1] Apparently, when a child application is launched with elevated privileges it does not inherit environment variables from its parent. [2] The consequence is that a number of crucial settings in the installed service will be blank. For example, its classpath and its log path will be blank. As a result, an attempt to launch such service will fail shortly and silently, as Tomcat bootstrap classes are not found and logging is not configured either. (There will be some logs in %SystemRoot%\system32\LogFiles\Apache though). A workaround is to fix such configuration by using service configuration application (tomcat7w.exe) to configure missing options. I hope that this can be solved by changing service.bat so that all necessary options are passed as command-line arguments instead of variables. For reference: [1] Apache Commons Daemon documentation http://commons.apache.org/proper/commons-daemon/procrun.html [2] "Re: r1567742" thread on dev mailing list http://tomcat.markmail.org/thread/tjmwxc5vb5ut4zuq [3] Bug 56079 https://issues.apache.org/bugzilla/show_bug.cgi?id=56079#c6 -- 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
svn commit: r1568768 - in /tomcat/trunk/bin: catalina.bat configtest.bat digest.bat service.bat shutdown.bat startup.bat tool-wrapper.bat version.bat
Author: kkolinko Date: Sun Feb 16 14:45:47 2014 New Revision: 1568768 URL: http://svn.apache.org/r1568768 Log: Simplify Windows *.bat files: remove %OS% checks, as current java does not run on ancient non-NT operating systems. Modified: tomcat/trunk/bin/catalina.bat tomcat/trunk/bin/configtest.bat tomcat/trunk/bin/digest.bat tomcat/trunk/bin/service.bat tomcat/trunk/bin/shutdown.bat tomcat/trunk/bin/startup.bat tomcat/trunk/bin/tool-wrapper.bat tomcat/trunk/bin/version.bat Modified: tomcat/trunk/bin/catalina.bat URL: http://svn.apache.org/viewvc/tomcat/trunk/bin/catalina.bat?rev=1568768&r1=1568767&r2=1568768&view=diff == --- tomcat/trunk/bin/catalina.bat (original) +++ tomcat/trunk/bin/catalina.bat Sun Feb 16 14:45:47 2014 @@ -14,7 +14,6 @@ rem WITHOUT WARRANTIES OR CONDITIONS OF rem See the License for the specific language governing permissions and rem limitations under the License. -if "%OS%" == "Windows_NT" setlocal rem --- rem Start/Stop Script for the CATALINA Server rem @@ -92,6 +91,8 @@ rem Example (all one l rem set TITLE=Tomcat.Cluster#1.Server#1 [%DATE% %TIME%] rem --- +setlocal + rem Suppress Terminate batch job on CTRL+C if not ""%1"" == ""run"" goto mainEntry if "%TEMP%" == "" goto mainEntry @@ -277,13 +278,8 @@ goto execCmd :doStart shift -if not "%OS%" == "Windows_NT" goto noTitle if "%TITLE%" == "" set TITLE=Tomcat set _EXECJAVA=start "%TITLE%" %_RUNJAVA% -goto gotTitle -:noTitle -set _EXECJAVA=start %_RUNJAVA% -:gotTitle if not ""%1"" == ""-security"" goto execCmd shift echo Using Security Manager Modified: tomcat/trunk/bin/configtest.bat URL: http://svn.apache.org/viewvc/tomcat/trunk/bin/configtest.bat?rev=1568768&r1=1568767&r2=1568768&view=diff == --- tomcat/trunk/bin/configtest.bat (original) +++ tomcat/trunk/bin/configtest.bat Sun Feb 16 14:45:47 2014 @@ -14,11 +14,12 @@ rem WITHOUT WARRANTIES OR CONDITIONS OF rem See the License for the specific language governing permissions and rem limitations under the License. -if "%OS%" == "Windows_NT" setlocal rem --- rem Configuration test script for the CATALINA Server rem --- +setlocal + rem Guess CATALINA_HOME if not defined set "CURRENT_DIR=%cd%" if not "%CATALINA_HOME%" == "" goto gotHome Modified: tomcat/trunk/bin/digest.bat URL: http://svn.apache.org/viewvc/tomcat/trunk/bin/digest.bat?rev=1568768&r1=1568767&r2=1568768&view=diff == --- tomcat/trunk/bin/digest.bat (original) +++ tomcat/trunk/bin/digest.bat Sun Feb 16 14:45:47 2014 @@ -14,11 +14,12 @@ rem WITHOUT WARRANTIES OR CONDITIONS OF rem See the License for the specific language governing permissions and rem limitations under the License. -if "%OS%" == "Windows_NT" setlocal rem --- rem Script to digest password using the algorithm specified rem --- +setlocal + rem Guess CATALINA_HOME if not defined set "CURRENT_DIR=%cd%" if not "%CATALINA_HOME%" == "" goto gotHome Modified: tomcat/trunk/bin/service.bat URL: http://svn.apache.org/viewvc/tomcat/trunk/bin/service.bat?rev=1568768&r1=1568767&r2=1568768&view=diff == --- tomcat/trunk/bin/service.bat (original) +++ tomcat/trunk/bin/service.bat Sun Feb 16 14:45:47 2014 @@ -14,7 +14,6 @@ rem WITHOUT WARRANTIES OR CONDITIONS OF rem See the License for the specific language governing permissions and rem limitations under the License. -if "%OS%" == "Windows_NT" setlocal rem --- rem NT Service Install/Uninstall script rem @@ -27,6 +26,8 @@ rem name(optional) If the second remto be new service name rem --- +setlocal + set "SELF=%~dp0%service.bat" rem Guess CATALINA_HOME if not defined set "CURRENT_DIR=%cd%" Modified: tomcat/trunk/bin/shutdown.bat URL: http://svn.apache.org/viewvc/tomcat/trunk/bin/shutdown.bat?rev=1568768&r1=1568767&r2=1568768&view=diff == --- tomcat/trunk/bin/shutdown.bat (original) +++ tomcat/trunk/bin/shutdown.bat Sun Feb 16 14:45:47 2014 @@ -14,11 +14,12 @@ rem WITHOUT WARRANTIES OR CONDITIONS OF rem See the Licen
svn commit: r1568779 - /tomcat/trunk/bin/service.bat
Author: kkolinko Date: Sun Feb 16 15:24:56 2014 New Revision: 1568779 URL: http://svn.apache.org/r1568779 Log: https://issues.apache.org/bugzilla/show_bug.cgi?id=56143 Allow service.bat to be launched from a non-UAC console, by using arguments instead of env variables to pass options to prunsrv. + Fix regression in r1567742 that values for --StdOutput, --StdError were lost. + Pass --LogPath option to service removal command, to avoid using default value for this option Modified: tomcat/trunk/bin/service.bat Modified: tomcat/trunk/bin/service.bat URL: http://svn.apache.org/viewvc/tomcat/trunk/bin/service.bat?rev=1568779&r1=1568778&r2=1568779&view=diff == --- tomcat/trunk/bin/service.bat (original) +++ tomcat/trunk/bin/service.bat Sun Feb 16 15:24:56 2014 @@ -75,7 +75,7 @@ set "EXECUTABLE=%CATALINA_HOME%\bin\tomc rem Set default Service name set SERVICE_NAME=Tomcat@VERSION_MAJOR@ -set PR_DISPLAYNAME=Apache Tomcat @VERSION_MAJOR@ +set DISPLAYNAME=Apache Tomcat @VERSION_MAJOR@ if "x%1x" == "xx" goto displayUsage set SERVICE_CMD=%1 @@ -85,7 +85,7 @@ if "x%1x" == "xx" goto checkServiceCmd if "x%1x" == "x/userx" goto runAsUser if "x%1x" == "x--userx" goto runAsUser set SERVICE_NAME=%1 -set PR_DISPLAYNAME=Apache Tomcat %1 +set DISPLAYNAME=Apache Tomcat %1 shift if "x%1x" == "xx" goto checkServiceCmd goto checkUser @@ -108,7 +108,11 @@ goto end :doRemove rem Remove the service -"%EXECUTABLE%" //DS//%SERVICE_NAME% +echo Removing the service '%SERVICE_NAME%' ... +echo Using CATALINA_BASE:"%CATALINA_BASE%" + +"%EXECUTABLE%" //DS//%SERVICE_NAME% ^ +--LogPath "%CATALINA_BASE%\logs" if not errorlevel 1 goto removed echo Failed removing '%SERVICE_NAME%' service goto end @@ -124,45 +128,38 @@ echo Using CATALINA_BASE:"%CATALINA_ echo Using JAVA_HOME:"%JAVA_HOME%" echo Using JRE_HOME: "%JRE_HOME%" -rem Use the environment variables as an example -rem Each command line option is prefixed with PR_ - -set PR_DESCRIPTION=Apache Tomcat @VERSION@ Server - http://tomcat.apache.org/ -set "PR_INSTALL=%EXECUTABLE%" -set "PR_LOGPATH=%CATALINA_BASE%\logs" -set "PR_CLASSPATH=%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_BASE%\bin\tomcat-juli.jar;%CATALINA_HOME%\bin\tomcat-juli.jar" rem Set the server jvm from JAVA_HOME -set "PR_JVM=%JRE_HOME%\bin\server\jvm.dll" -if exist "%PR_JVM%" goto foundJvm +set "JVM=%JRE_HOME%\bin\server\jvm.dll" +if exist "%JVM%" goto foundJvm rem Set the client jvm from JAVA_HOME -set "PR_JVM=%JRE_HOME%\bin\client\jvm.dll" -if exist "%PR_JVM%" goto foundJvm -set PR_JVM=auto -set PR_STDOUTPUT=auto -set PR_STDERROR=auto +set "JVM=%JRE_HOME%\bin\client\jvm.dll" +if exist "%JVM%" goto foundJvm +set JVM=auto :foundJvm -echo Using JVM: "%PR_JVM%" +echo Using JVM: "%JVM%" + "%EXECUTABLE%" //IS//%SERVICE_NAME% ^ +--Description "Apache Tomcat @VERSION@ Server - http://tomcat.apache.org/"; ^ +--DisplayName "%DISPLAYNAME%" ^ +--Install "%EXECUTABLE%" ^ +--LogPath "%CATALINA_BASE%\logs" ^ +--StdOutput auto ^ +--StdError auto ^ +--Classpath "%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_BASE%\bin\tomcat-juli.jar;%CATALINA_HOME%\bin\tomcat-juli.jar" ^ +--Jvm "%JVM%" ^ +--StartMode jvm ^ +--StopMode jvm ^ --StartClass org.apache.catalina.startup.Bootstrap ^ --StopClass org.apache.catalina.startup.Bootstrap ^ --StartParams start ^ --StopParams stop ^ --JvmOptions "-Dcatalina.base=%CATALINA_BASE%;-Dcatalina.home=%CATALINA_HOME%;-Djava.endorsed.dirs=%CATALINA_HOME%\endorsed;-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties" ^ ---StartMode jvm ^ ---StopMode jvm ^ --JvmMs 128 ^ --JvmMx 256 if not errorlevel 1 goto installed echo Failed installing '%SERVICE_NAME%' service goto end :installed -rem Clear the environment variables. They are not needed any more. -set PR_DISPLAYNAME= -set PR_DESCRIPTION= -set PR_INSTALL= -set PR_LOGPATH= -set PR_CLASSPATH= -set PR_JVM= echo The service '%SERVICE_NAME%' has been installed. :end - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1568780 - /tomcat/trunk/bin/service.bat
Author: kkolinko Date: Sun Feb 16 15:34:06 2014 New Revision: 1568780 URL: http://svn.apache.org/r1568780 Log: Avoid using the same path for "tomcat-juli.jar" twice when CATALINA_HOME and CATALINA_BASE are the same. Modified: tomcat/trunk/bin/service.bat Modified: tomcat/trunk/bin/service.bat URL: http://svn.apache.org/viewvc/tomcat/trunk/bin/service.bat?rev=1568780&r1=1568779&r2=1568780&view=diff == --- tomcat/trunk/bin/service.bat (original) +++ tomcat/trunk/bin/service.bat Sun Feb 16 15:34:06 2014 @@ -138,6 +138,9 @@ set JVM=auto :foundJvm echo Using JVM: "%JVM%" +set "CLASSPATH=%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_BASE%\bin\tomcat-juli.jar" +if not "%CATALINA_HOME%" == "%CATALINA_BASE%" set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\tomcat-juli.jar" + "%EXECUTABLE%" //IS//%SERVICE_NAME% ^ --Description "Apache Tomcat @VERSION@ Server - http://tomcat.apache.org/"; ^ --DisplayName "%DISPLAYNAME%" ^ @@ -145,7 +148,7 @@ echo Using JVM: "%JVM%" --LogPath "%CATALINA_BASE%\logs" ^ --StdOutput auto ^ --StdError auto ^ ---Classpath "%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_BASE%\bin\tomcat-juli.jar;%CATALINA_HOME%\bin\tomcat-juli.jar" ^ +--Classpath "%CLASSPATH%" ^ --Jvm "%JVM%" ^ --StartMode jvm ^ --StopMode jvm ^ - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: [VOTE] Release Apache Tomcat 7.0.52
On 14/02/2014 17:34, Konstantin Kolinko wrote: > 1. org.apache.catalina.startup.TestHostConfigAutomaticDeployment > fails consistently with all connectors when running with JDK 6u45. > It runs successfully with 7u51. > The failures: > > [[[ > Testsuite: org.apache.catalina.startup.TestHostConfigAutomaticDeployment > Tests run: 137, Failures: 3, Errors: 0, Skipped: 0, Time elapsed: 49,956 sec > > Testcase: testModifyXmlExtwarUpdateExtwar took 0,251 sec > FAILED > expected:<[stopstart]> but was:<[]> > junit.framework.AssertionFailedError: expected:<[stopstart]> but was:<[]> > at > org.apache.catalina.startup.TestHostConfigAutomaticDeployment.doTestModify(TestHostConfigAutomaticDeployment.java:1220) > at > org.apache.catalina.startup.TestHostConfigAutomaticDeployment.doTestModify(TestHostConfigAutomaticDeployment.java:1079) > at > org.apache.catalina.startup.TestHostConfigAutomaticDeployment.testModifyXmlExtwarUpdateExtwar(TestHostConfigAutomaticDeployment.java:1004) > > Testcase: testModifyWarUpdateWar took 0,196 sec > FAILED > expected not same > junit.framework.AssertionFailedError: expected not same > at > org.apache.catalina.startup.TestHostConfigAutomaticDeployment.doTestModify(TestHostConfigAutomaticDeployment.java:1222) > at > org.apache.catalina.startup.TestHostConfigAutomaticDeployment.doTestModify(TestHostConfigAutomaticDeployment.java:1079) > at > org.apache.catalina.startup.TestHostConfigAutomaticDeployment.testModifyWarUpdateWar(TestHostConfigAutomaticDeployment.java:966) > > Testcase: testModifyXmlWarUpdateWar took 0,195 sec > FAILED > expected:<[stopstart]> but was:<[]> > junit.framework.AssertionFailedError: expected:<[stopstart]> but was:<[]> > at > org.apache.catalina.startup.TestHostConfigAutomaticDeployment.doTestModify(TestHostConfigAutomaticDeployment.java:1220) > at > org.apache.catalina.startup.TestHostConfigAutomaticDeployment.doTestModify(TestHostConfigAutomaticDeployment.java:1079) > at > org.apache.catalina.startup.TestHostConfigAutomaticDeployment.testModifyXmlWarUpdateWar(TestHostConfigAutomaticDeployment.java:1046) > ]]] This looks to be caused by a JVM bug (which is fixed in 1.7.x). The file is unnecessarily locked in some cases which prevents the last modified time being changed. The best description I found of the issue was on StackOverflow [1]. I'm not sure if it is exactly what we are seeing but it looks to be pretty close. I'll add a check to see if the time has been changed and explicitly fail with a note about this problem if it doesn't. Mark [1] http://stackoverflow.com/questions/1144635/setting-the-last-modified-time-of-a-directory-opened-for-readdirectorychangesw - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1568786 - in /tomcat/trunk/webapps/docs: changelog.xml windows-service-howto.xml
Author: kkolinko Date: Sun Feb 16 16:09:49 2014 New Revision: 1568786 URL: http://svn.apache.org/r1568786 Log: Fixing https://issues.apache.org/bugzilla/show_bug.cgi?id=56143 Update documentation and changelog. Modified: tomcat/trunk/webapps/docs/changelog.xml tomcat/trunk/webapps/docs/windows-service-howto.xml Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1568786&r1=1568785&r2=1568786&view=diff == --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Sun Feb 16 16:09:49 2014 @@ -73,20 +73,29 @@ -Use a single call to tomcat8.exe to install the Windows -service from service.bat rather than three calls. This is -preparatory work for fixing 56079 as each time -tomcat8.exe is called, a UAC dialog is displayed if UAC is -enabled. (markt) - - 56115: Expose the httpusecaches property of Ant's get task as some users may need to change the default. Based on a suggestion by Anthony. (markt) + +56143: Improve service.bat so that it can be +launched from a non-UAC console. This includes using a single call to +tomcat8.exe to install the Windows service rather than +three calls, and using command line arguments instead of environment +variables to pass the settings. (markt/kkolinko) + -Update Commons DBCP 2 to snapshot 173 dated 11 Feb 2014. (markt) +Update Commons DBCP 2 to snapshot 182 dated 14 Feb 2014. (markt) + +Simplify Windows *.bat files: remove %OS% checks, as current java does +not run on ancient non-NT operating systems. (kkolinko) + + +Pass explicit value for log directory path when uninstalling Windows +service with "service.bat remove", avoiding default value +for that option. (kkolinko) + Modified: tomcat/trunk/webapps/docs/windows-service-howto.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/windows-service-howto.xml?rev=1568786&r1=1568785&r2=1568786&view=diff == --- tomcat/trunk/webapps/docs/windows-service-howto.xml (original) +++ tomcat/trunk/webapps/docs/windows-service-howto.xml Sun Feb 16 16:09:49 2014 @@ -308,18 +308,16 @@ script. If necessary, you can use the -NOTE: On Windows Vista or any other operating system with User -Account Control (UAC) enabled you must - -right-click on cmd.exe and -select "Run as administrator" in order to run this script. On Windows 8 (or later) or +NOTE: On Windows Vista or any later operating system with User +Account Control (UAC) enabled you will be asked for additional priviledges +when 'Tomcat.exe' is launched by the script. +If you want to pass additional options to service installer as +PR_* environment variables, you have to either configure them +globally in OS, or launch the program that sets them with elevated priviledges +(e.g. right-click on cmd.exe and select "Run as administrator"; on Windows 8 (or later) or Windows Server 2012 (or later), you can open an elevated command prompt for the current directory from the explorer -by clicking on the "File" menu bar. -If UAC is enabled, -neither being logged on with an Administrator account nor using the -/user switch is sufficient. +by clicking on the "File" menu bar). See issue 56143 for details. Install the service named 'Tomcat' - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1568787 - /tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java
Author: markt Date: Sun Feb 16 16:11:33 2014 New Revision: 1568787 URL: http://svn.apache.org/r1568787 Log: Clearer error message if we see test failures on Windows due to JVM bug. Fix some IDE warnings. Modified: tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java Modified: tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java?rev=1568787&r1=1568786&r2=1568787&view=diff == --- tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java (original) +++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java Sun Feb 16 16:11:33 2014 @@ -920,6 +920,7 @@ public class TestHostConfigAutomaticDepl } if (!resultWar && !resultDir) { if (resultXml) { +Assert.assertNotNull(ctxt); Assert.assertEquals(LifecycleState.FAILED, ctxt.getState()); } else { Assert.assertNull(ctxt); @@ -1136,14 +1137,22 @@ public class TestHostConfigAutomaticDepl if (ext == null) { Assert.fail(); } else { -ext.setLastModified(System.currentTimeMillis() + 5000); +if (!ext.setLastModified(System.currentTimeMillis() + 5000)){ +Assert.fail("Failed to set last modified time for " + +"external WAR file. This is expected (due to " + +"a JVM bug) with Java 6 on Windows."); +} } break; case WAR: if (war == null) { Assert.fail(); } else { -war.setLastModified(System.currentTimeMillis() + 5000); +if (!war.setLastModified(System.currentTimeMillis() + 5000)) { +Assert.fail("Failed to set last modified time for WAR " + +"file. This is expected (due to a JVM bug) " + +"with Java 6 on Windows."); +} } break; case DIR: @@ -1194,6 +1203,7 @@ public class TestHostConfigAutomaticDepl } if (!resultWar && !resultDir) { if (resultXml) { +Assert.assertNotNull(newContext); if (!startExternalWar && !startExternalDir) { Assert.assertEquals(LifecycleState.FAILED, newContext.getState()); @@ -1514,6 +1524,7 @@ public class TestHostConfigAutomaticDepl } if (!resultWar && !resultDir) { if (resultXml) { +Assert.assertNotNull(newContext); if (!startExternalWar && !startExternalDir) { Assert.assertEquals(LifecycleState.FAILED, newContext.getState()); - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
[Bug 56143] Allow "service.bat install" to be used in an non-UAC cmd.exe session
https://issues.apache.org/bugzilla/show_bug.cgi?id=56143 Konstantin Kolinko changed: What|Removed |Added OS||All --- Comment #1 from Konstantin Kolinko --- Fixed in Tomcat 8 by r1568779, docs updated by r1568786. Will be in 8.0.4. -- 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
svn commit: r1568803 - in /tomcat/trunk: java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java webapps/docs/changelog.xml
Author: markt Date: Sun Feb 16 18:27:16 2014 New Revision: 1568803 URL: http://svn.apache.org/r1568803 Log: Avoid possible deadlock when one thread tries to close a connection while another thread tries to write to it. Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java?rev=1568803&r1=1568802&r2=1568803&view=diff == --- tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java Sun Feb 16 18:27:16 2014 @@ -249,6 +249,7 @@ public abstract class WsRemoteEndpointIm MessagePart mp = new MessagePart(opCode, payload, last, handler, this); +boolean doWrite = false; synchronized (messagePartLock) { if (Constants.OPCODE_CLOSE == mp.getOpCode()) { try { @@ -260,30 +261,38 @@ public abstract class WsRemoteEndpointIm } if (messagePartInProgress) { // When a control message is sent while another message is being -// the control message is queued. Chances are the subsequent -// data message part will end up queued while the control -// message is sent. The logic in this class (state machine, -// EndMessageHanlder, TextMessageSendHandler) ensures that there -// will only ever be one data message part in the queue. There -// could be multiple control messages in the queue. +// sent, the control message is queued. Chances are the +// subsequent data message part will end up queued while the +// control message is sent. The logic in this class (state +// machine, EndMessageHandler, TextMessageSendHandler) ensures +// that there will only ever be one data message part in the +// queue. There could be multiple control messages in the queue. // Add it to the queue messagePartQueue.add(mp); } else { messagePartInProgress = true; -writeMessagePart(mp); +doWrite = true; } } +if (doWrite) { +// Actual write has to be outside sync block to avoid possible +// deadlock between messagePartLock and writeLock in +// o.a.coyote.http11.upgrade.AbstractServletOutputStream +writeMessagePart(mp); +} } void endMessage(SendHandler handler, SendResult result) { +boolean doWrite = false; +MessagePart mpNext = null; synchronized (messagePartLock) { fragmented = nextFragmented; text = nextText; -MessagePart mpNext = messagePartQueue.poll(); +mpNext = messagePartQueue.poll(); if (mpNext == null) { messagePartInProgress = false; } else if (!closed){ @@ -291,9 +300,15 @@ public abstract class WsRemoteEndpointIm // sending a fragmented message closing the endpoint. If this // happens, clearly there is no point trying to send the rest of // the message. -writeMessagePart(mpNext); +doWrite = true; } } +if (doWrite) { +// Actual write has to be outside sync block to avoid possible +// deadlock between messagePartLock and writeLock in +// o.a.coyote.http11.upgrade.AbstractServletOutputStream +writeMessagePart(mpNext); +} wsSession.updateLastActive(); Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1568803&r1=1568802&r2=1568803&view=diff == --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Sun Feb 16 18:27:16 2014 @@ -70,6 +70,14 @@ + + + +Avoid a possible deadlock when one thread is shutting down a connection +while another thread is trying to write to it. (markt) + + + - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1568804 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java webapps/docs/changelog.xml
Author: markt Date: Sun Feb 16 18:30:16 2014 New Revision: 1568804 URL: http://svn.apache.org/r1568804 Log: Avoid possible deadlock when one thread tries to close a connection while another thread tries to write to it. Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc7.0.x/trunk/ -- Merged /tomcat/trunk:r1568803 Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java?rev=1568804&r1=1568803&r2=1568804&view=diff == --- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java Sun Feb 16 18:30:16 2014 @@ -254,6 +254,7 @@ public abstract class WsRemoteEndpointIm MessagePart mp = new MessagePart(opCode, payload, last, handler, this); +boolean doWrite = false; synchronized (messagePartLock) { if (Constants.OPCODE_CLOSE == mp.getOpCode()) { try { @@ -265,30 +266,38 @@ public abstract class WsRemoteEndpointIm } if (messagePartInProgress) { // When a control message is sent while another message is being -// the control message is queued. Chances are the subsequent -// data message part will end up queued while the control -// message is sent. The logic in this class (state machine, -// EndMessageHanlder, TextMessageSendHandler) ensures that there -// will only ever be one data message part in the queue. There -// could be multiple control messages in the queue. +// sent, the control message is queued. Chances are the +// subsequent data message part will end up queued while the +// control message is sent. The logic in this class (state +// machine, EndMessageHandler, TextMessageSendHandler) ensures +// that there will only ever be one data message part in the +// queue. There could be multiple control messages in the queue. // Add it to the queue messagePartQueue.add(mp); } else { messagePartInProgress = true; -writeMessagePart(mp); +doWrite = true; } } +if (doWrite) { +// Actual write has to be outside sync block to avoid possible +// deadlock between messagePartLock and writeLock in +// o.a.coyote.http11.upgrade.AbstractServletOutputStream +writeMessagePart(mp); +} } void endMessage(SendHandler handler, SendResult result) { +boolean doWrite = false; +MessagePart mpNext = null; synchronized (messagePartLock) { fragmented = nextFragmented; text = nextText; -MessagePart mpNext = messagePartQueue.poll(); +mpNext = messagePartQueue.poll(); if (mpNext == null) { messagePartInProgress = false; } else if (!closed){ @@ -296,9 +305,15 @@ public abstract class WsRemoteEndpointIm // sending a fragmented message closing the endpoint. If this // happens, clearly there is no point trying to send the rest of // the message. -writeMessagePart(mpNext); +doWrite = true; } } +if (doWrite) { +// Actual write has to be outside sync block to avoid possible +// deadlock between messagePartLock and writeLock in +// o.a.coyote.http11.upgrade.AbstractServletOutputStream +writeMessagePart(mpNext); +} wsSession.updateLastActive(); Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1568804&r1=1568803&r2=1568804&view=diff == --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Sun Feb 16 18:30:16 2014 @@ -55,6 +55,16 @@ They eventually become mixed with the numbered issues. (I.e., numbered issues to not "pop up" wrt. others). --> + + + + +Avoid a possible deadlock when one thread is shutting down a connection +while another thread is trying to write to it. (markt) + + + +
Re: [VOTE] Release Apache Tomcat 7.0.52
On 14/02/2014 17:34, Konstantin Kolinko wrote: > 3) With NIO connector there were no "failed" tests, but the test hung twice. It was the same deadlock in both cases. This should be fixed in trunk and 7.0.x. Mark - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1568828 - in /tomcat/trunk: bin/service.bat res/tomcat.nsi webapps/docs/changelog.xml
Author: kkolinko Date: Sun Feb 16 21:05:04 2014 New Revision: 1568828 URL: http://svn.apache.org/r1568828 Log: Align Commons Daemon options between service.bat and exe installer service.bat changes: --DisplayName --StartPath, --StopPath (They should be unnecessary in --StartMode jvm, but exe installed sets them and they are visible and settable in configuration dialog) --JvmOptions: Just reordered, non significant --Classpath change mentioned in changelog was in r1568780 exe installer changes: --JvmMs, --JvmMx --LogPath fix from r1568779 was applied to exe installer as well. Modified: tomcat/trunk/bin/service.bat tomcat/trunk/res/tomcat.nsi tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/bin/service.bat URL: http://svn.apache.org/viewvc/tomcat/trunk/bin/service.bat?rev=1568828&r1=1568827&r2=1568828&view=diff == --- tomcat/trunk/bin/service.bat (original) +++ tomcat/trunk/bin/service.bat Sun Feb 16 21:05:04 2014 @@ -75,7 +75,7 @@ set "EXECUTABLE=%CATALINA_HOME%\bin\tomc rem Set default Service name set SERVICE_NAME=Tomcat@VERSION_MAJOR@ -set DISPLAYNAME=Apache Tomcat @VERSION_MAJOR@ +set DISPLAYNAME=Apache Tomcat @VERSION_MAJOR@ %SERVICE_NAME% if "x%1x" == "xx" goto displayUsage set SERVICE_CMD=%1 @@ -85,7 +85,7 @@ if "x%1x" == "xx" goto checkServiceCmd if "x%1x" == "x/userx" goto runAsUser if "x%1x" == "x--userx" goto runAsUser set SERVICE_NAME=%1 -set DISPLAYNAME=Apache Tomcat %1 +set DISPLAYNAME=Apache Tomcat @VERSION_MAJOR@ %1 shift if "x%1x" == "xx" goto checkServiceCmd goto checkUser @@ -152,11 +152,13 @@ if not "%CATALINA_HOME%" == "%CATALINA_B --Jvm "%JVM%" ^ --StartMode jvm ^ --StopMode jvm ^ +--StartPath "%CATALINA_HOME%" ^ +--StopPath "%CATALINA_HOME%" ^ --StartClass org.apache.catalina.startup.Bootstrap ^ --StopClass org.apache.catalina.startup.Bootstrap ^ --StartParams start ^ --StopParams stop ^ ---JvmOptions "-Dcatalina.base=%CATALINA_BASE%;-Dcatalina.home=%CATALINA_HOME%;-Djava.endorsed.dirs=%CATALINA_HOME%\endorsed;-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties" ^ +--JvmOptions "-Dcatalina.home=%CATALINA_HOME%;-Dcatalina.base=%CATALINA_BASE%;-Djava.endorsed.dirs=%CATALINA_HOME%\endorsed;-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties" ^ --JvmMs 128 ^ --JvmMx 256 if not errorlevel 1 goto installed Modified: tomcat/trunk/res/tomcat.nsi URL: http://svn.apache.org/viewvc/tomcat/trunk/res/tomcat.nsi?rev=1568828&r1=1568827&r2=1568828&view=diff == --- tomcat/trunk/res/tomcat.nsi (original) +++ tomcat/trunk/res/tomcat.nsi Sun Feb 16 21:05:04 2014 @@ -318,7 +318,7 @@ Section -post FileWrite $ServiceInstallLog "$\r$\n" FileWrite $ServiceInstallLog '"$INSTDIR\bin\$TomcatServiceFileName" //US//$TomcatServiceName --JvmOptions "-Dcatalina.home=$INSTDIR#-Dcatalina.base=$INSTDIR#-Djava.endorsed.dirs=$INSTDIR\endorsed#-Djava.io.tmpdir=$INSTDIR\temp#-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager#-Djava.util.logging.config.file=$INSTDIR\conf\logging.properties"' FileWrite $ServiceInstallLog "$\r$\n" -FileWrite $ServiceInstallLog '"$INSTDIR\bin\$TomcatServiceFileName" //US//$TomcatServiceName --StdOutput auto --StdError auto' +FileWrite $ServiceInstallLog '"$INSTDIR\bin\$TomcatServiceFileName" //US//$TomcatServiceName --StdOutput auto --StdError auto --JvmMs 128 --JvmMx 256' FileWrite $ServiceInstallLog "$\r$\n" FileClose $ServiceInstallLog ${EndIf} @@ -326,7 +326,7 @@ Section -post DetailPrint "Configuring $TomcatServiceName service" nsExec::ExecToLog '"$INSTDIR\bin\$TomcatServiceFileName" //US//$TomcatServiceName --Classpath "$INSTDIR\bin\bootstrap.jar;$INSTDIR\bin\tomcat-juli.jar" --StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap --StartParams start --StopParams stop --StartMode jvm --StopMode jvm' nsExec::ExecToLog '"$INSTDIR\bin\$TomcatServiceFileName" //US//$TomcatServiceName --JvmOptions "-Dcatalina.home=$INSTDIR#-Dcatalina.base=$INSTDIR#-Djava.endorsed.dirs=$INSTDIR\endorsed#-Djava.io.tmpdir=$INSTDIR\temp#-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager#-Djava.util.logging.config.file=$INSTDIR\conf\logging.properties"' - nsExec::ExecToLog '"$INSTDIR\bin\$TomcatServiceFileName" //US//$TomcatServiceName --StdOutput auto --StdError auto' + nsExec::ExecToLog '"$INSTDIR\bin\$TomcatServiceFileName" //US//$TomcatServiceName --StdOutput auto --StdError auto --JvmMs 128 --JvmMx 256' ${If} $TomcatShortcutAllUsers == "1" WriteRegStr HKLM "
svn commit: r1568844 - /tomcat/tc6.0.x/trunk/STATUS.txt
Author: kkolinko Date: Sun Feb 16 22:04:33 2014 New Revision: 1568844 URL: http://svn.apache.org/r1568844 Log: Proposal Modified: tomcat/tc6.0.x/trunk/STATUS.txt Modified: tomcat/tc6.0.x/trunk/STATUS.txt URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=1568844&r1=1568843&r2=1568844&view=diff == --- tomcat/tc6.0.x/trunk/STATUS.txt (original) +++ tomcat/tc6.0.x/trunk/STATUS.txt Sun Feb 16 22:04:33 2014 @@ -34,6 +34,12 @@ PATCHES PROPOSED TO BACKPORT: +1: markt, kkolinko -1: +* Make the xmlBlockExternal option in Catalina and Jasper to be true by default. + https://people.apache.org/~kkolinko/patches/2014-02-17_tc6_xmlBlockExternalTrue.patch + (backport of r1564747) + +1: kkolinko + -1: + PATCHES/ISSUES THAT ARE STALLED: - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1568846 - in /tomcat/tc7.0.x/trunk: ./ bin/catalina.bat bin/configtest.bat bin/digest.bat bin/service.bat bin/shutdown.bat bin/startup.bat bin/tool-wrapper.bat bin/version.bat webapps/doc
Author: kkolinko Date: Sun Feb 16 22:16:07 2014 New Revision: 1568846 URL: http://svn.apache.org/r1568846 Log: Merged r1568768 from tomcat/trunk: Simplify Windows *.bat files: remove %OS% checks, as current java does not run on ancient non-NT operating systems. Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/bin/catalina.bat tomcat/tc7.0.x/trunk/bin/configtest.bat tomcat/tc7.0.x/trunk/bin/digest.bat tomcat/tc7.0.x/trunk/bin/service.bat tomcat/tc7.0.x/trunk/bin/shutdown.bat tomcat/tc7.0.x/trunk/bin/startup.bat tomcat/tc7.0.x/trunk/bin/tool-wrapper.bat tomcat/tc7.0.x/trunk/bin/version.bat tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc7.0.x/trunk/ -- Merged /tomcat/trunk:r1568768 Modified: tomcat/tc7.0.x/trunk/bin/catalina.bat URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/bin/catalina.bat?rev=1568846&r1=1568845&r2=1568846&view=diff == --- tomcat/tc7.0.x/trunk/bin/catalina.bat (original) +++ tomcat/tc7.0.x/trunk/bin/catalina.bat Sun Feb 16 22:16:07 2014 @@ -14,7 +14,6 @@ rem WITHOUT WARRANTIES OR CONDITIONS OF rem See the License for the specific language governing permissions and rem limitations under the License. -if "%OS%" == "Windows_NT" setlocal rem --- rem Start/Stop Script for the CATALINA Server rem @@ -92,6 +91,8 @@ rem Example (all one l rem set TITLE=Tomcat.Cluster#1.Server#1 [%DATE% %TIME%] rem --- +setlocal + rem Suppress Terminate batch job on CTRL+C if not ""%1"" == ""run"" goto mainEntry if "%TEMP%" == "" goto mainEntry @@ -260,13 +261,8 @@ goto execCmd :doStart shift -if not "%OS%" == "Windows_NT" goto noTitle if "%TITLE%" == "" set TITLE=Tomcat set _EXECJAVA=start "%TITLE%" %_RUNJAVA% -goto gotTitle -:noTitle -set _EXECJAVA=start %_RUNJAVA% -:gotTitle if not ""%1"" == ""-security"" goto execCmd shift echo Using Security Manager Modified: tomcat/tc7.0.x/trunk/bin/configtest.bat URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/bin/configtest.bat?rev=1568846&r1=1568845&r2=1568846&view=diff == --- tomcat/tc7.0.x/trunk/bin/configtest.bat (original) +++ tomcat/tc7.0.x/trunk/bin/configtest.bat Sun Feb 16 22:16:07 2014 @@ -14,11 +14,12 @@ rem WITHOUT WARRANTIES OR CONDITIONS OF rem See the License for the specific language governing permissions and rem limitations under the License. -if "%OS%" == "Windows_NT" setlocal rem --- rem Configuration test script for the CATALINA Server rem --- +setlocal + rem Guess CATALINA_HOME if not defined set "CURRENT_DIR=%cd%" if not "%CATALINA_HOME%" == "" goto gotHome Modified: tomcat/tc7.0.x/trunk/bin/digest.bat URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/bin/digest.bat?rev=1568846&r1=1568845&r2=1568846&view=diff == --- tomcat/tc7.0.x/trunk/bin/digest.bat (original) +++ tomcat/tc7.0.x/trunk/bin/digest.bat Sun Feb 16 22:16:07 2014 @@ -14,11 +14,12 @@ rem WITHOUT WARRANTIES OR CONDITIONS OF rem See the License for the specific language governing permissions and rem limitations under the License. -if "%OS%" == "Windows_NT" setlocal rem --- rem Script to digest password using the algorithm specified rem --- +setlocal + rem Guess CATALINA_HOME if not defined set "CURRENT_DIR=%cd%" if not "%CATALINA_HOME%" == "" goto gotHome Modified: tomcat/tc7.0.x/trunk/bin/service.bat URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/bin/service.bat?rev=1568846&r1=1568845&r2=1568846&view=diff == --- tomcat/tc7.0.x/trunk/bin/service.bat (original) +++ tomcat/tc7.0.x/trunk/bin/service.bat Sun Feb 16 22:16:07 2014 @@ -14,7 +14,6 @@ rem WITHOUT WARRANTIES OR CONDITIONS OF rem See the License for the specific language governing permissions and rem limitations under the License. -if "%OS%" == "Windows_NT" setlocal rem --- rem NT Service Install/Uninstall script rem @@ -27,6 +26,8 @@ rem name(optional) If the second remto be new service name rem --- +setlocal + set "SELF=%~dp0%service.bat" rem Gu
[Bug 56144] New: commons-daemon has different file.encoding with none daemon env
https://issues.apache.org/bugzilla/show_bug.cgi?id=56144 Bug ID: 56144 Summary: commons-daemon has different file.encoding with none daemon env Product: Tomcat 6 Version: 6.0.36 Hardware: PC OS: Linux Status: NEW Severity: normal Priority: P2 Component: Catalina Assignee: dev@tomcat.apache.org Reporter: shiym...@gmail.com OS:CentOS 6.4 tomcat version: 6.0.36 JDK version: 1.6.0_43 daemon version: 1.0.10 I run tomcat with daemon and got a result by jinfo: sun.jnu.encoding = ANSI_X3.4-1968 file.encoding = ANSI_X3.4-1968 I got a different result when i run without daemon: sun.jnu.encoding = UTF-8 file.encoding = UTF-8 env|grep LANG LANG = en_US.UTF-8 daemon compile by commons-daemon-1.0.10-native-src from tomcat gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3) is there something wrong ? -- 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
[Bug 56144] commons-daemon has different file.encoding with none daemon env
https://issues.apache.org/bugzilla/show_bug.cgi?id=56144 Konstantin Kolinko changed: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |INVALID --- Comment #1 from Konstantin Kolinko --- Step by step instructions to reproduce = ? Bugzilla is not a support forum. You have to ask on a mailing list. It is likely your own configuration problem, not a bug. http://tomcat.apache.org/bugreport.html#Bugzilla_is_not_a_support_forum Thus closing as INVALID. Just one quick note: > env|grep LANG > LANG = en_US.UTF-8 Where is that? If it is in your own interactive shell, it may be unrelated to the LANG value seen by daemon script. The daemon might be launched by different user (root) or by different shell environment (interactive and non-interactive shells use different configuration files, see bash manual) or may be setting its LANG variable elsewhere (depends on what script you are using, how you installed it). -- 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