Author: markt Date: Fri Oct 7 14:39:47 2016 New Revision: 1763769 URL: http://svn.apache.org/viewvc?rev=1763769&view=rev Log: Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=60152 Provide an option for Connector Lifecycle exceptions to be re-thrown rather than logged. This is controlled by the new throwOnFailure attribute of the Connector.
Modified: tomcat/trunk/java/org/apache/catalina/connector/Connector.java tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties tomcat/trunk/java/org/apache/catalina/core/LocalStrings_es.properties tomcat/trunk/java/org/apache/catalina/core/StandardService.java tomcat/trunk/test/org/apache/catalina/connector/TestConnector.java tomcat/trunk/webapps/docs/changelog.xml tomcat/trunk/webapps/docs/config/ajp.xml tomcat/trunk/webapps/docs/config/http.xml tomcat/trunk/webapps/docs/config/systemprops.xml Modified: tomcat/trunk/java/org/apache/catalina/connector/Connector.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Connector.java?rev=1763769&r1=1763768&r2=1763769&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/Connector.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/Connector.java Fri Oct 7 14:39:47 2016 @@ -106,6 +106,9 @@ public class Connector extends Lifecycle URIEncoding = "UTF-8"; URIEncodingLower = URIEncoding.toLowerCase(Locale.ENGLISH); } + + // Default for Connector depends on this system property + setThrowOnFailure(Boolean.getBoolean("org.apache.catalina.startup.EXIT_ON_INIT_FAILURE")); } Modified: tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties?rev=1763769&r1=1763768&r2=1763769&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties Fri Oct 7 14:39:47 2016 @@ -190,10 +190,6 @@ standardHostValue.customStatusFailed=Cus standardServer.accept.timeout=The socket listening for the shutdown command experienced an unexpected timeout [{0}] milliseconds after the call to accept(). Is this an instance of bug 56684? standardServer.shutdownViaPort=A valid shutdown command was received via the shutdown port. Stopping the Server instance. standardServer.storeConfig.notAvailable=No StoreConfig implementation was registered as an MBean named [{0}] so no configuration could be saved. A suitable MBean is normally registered via the StoreConfigLifecyleListener. -standardService.connector.destroyFailed=Failed to destroy connector [{0}] -standardService.connector.initFailed=Failed to initialize connector [{0}] -standardService.connector.startFailed=Failed to start connector [{0}] -standardService.connector.stopFailed=Failed to stop connector [{0}] standardService.engine.startFailed=Failed to start associated Engine standardService.engine.stopFailed=Failed to stop associated Engine standardService.mapperListener.startFailed=Failed to start associated MapperListener Modified: tomcat/trunk/java/org/apache/catalina/core/LocalStrings_es.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/LocalStrings_es.properties?rev=1763769&r1=1763768&r2=1763769&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/LocalStrings_es.properties (original) +++ tomcat/trunk/java/org/apache/catalina/core/LocalStrings_es.properties Fri Oct 7 14:39:47 2016 @@ -127,9 +127,6 @@ standardHost.noContext = No se ha config standardHost.notContext = El Hijo de una M\u00E1quina debe de ser un Contexto standardHost.nullName = Es necesario poner el nombre de M\u00E1quina standardServer.shutdownViaPort = Se ha recibido un comando de apagado a trav\u00E9s del puerto de apagado. Parando la instancia del Servidor. -standardService.connector.initFailed = No pude inicializar el conector [{0}] -standardService.connector.startFailed = No pude arrancar el conector [{0}] -standardService.connector.stopFailed = No pude parar el conector [{0}] standardService.start.name = Arrancando servicio {0} standardService.stop.name = Parando servicio {0} standardWrapper.allocate = Error reservando espacio para una instancia de servlet Modified: tomcat/trunk/java/org/apache/catalina/core/StandardService.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardService.java?rev=1763769&r1=1763768&r2=1763769&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/StandardService.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/StandardService.java Fri Oct 7 14:39:47 2016 @@ -434,15 +434,9 @@ public class StandardService extends Lif // Start our defined Connectors second synchronized (connectorsLock) { for (Connector connector: connectors) { - try { - // If it has already failed, don't try and start it - if (connector.getState() != LifecycleState.FAILED) { - connector.start(); - } - } catch (Exception e) { - log.error(sm.getString( - "standardService.connector.startFailed", - connector), e); + // If it has already failed, don't try and start it + if (connector.getState() != LifecycleState.FAILED) { + connector.start(); } } } @@ -488,13 +482,7 @@ public class StandardService extends Lif // stopped (e.g. via a JMX call) continue; } - try { - connector.stop(); - } catch (Exception e) { - log.error(sm.getString( - "standardService.connector.stopFailed", - connector), e); - } + connector.stop(); } } @@ -539,16 +527,7 @@ public class StandardService extends Lif // Initialize our defined Connectors synchronized (connectorsLock) { for (Connector connector : connectors) { - try { - connector.init(); - } catch (Exception e) { - String message = sm.getString( - "standardService.connector.initFailed", connector); - log.error(message, e); - - if (Boolean.getBoolean("org.apache.catalina.startup.EXIT_ON_INIT_FAILURE")) - throw new LifecycleException(message); - } + connector.init(); } } } @@ -561,12 +540,7 @@ public class StandardService extends Lif // Destroy our defined Connectors synchronized (connectorsLock) { for (Connector connector : connectors) { - try { - connector.destroy(); - } catch (Exception e) { - log.error(sm.getString( - "standardService.connector.destroyFailed", connector), e); - } + connector.destroy(); } } Modified: tomcat/trunk/test/org/apache/catalina/connector/TestConnector.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/connector/TestConnector.java?rev=1763769&r1=1763768&r2=1763769&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/catalina/connector/TestConnector.java (original) +++ tomcat/trunk/test/org/apache/catalina/connector/TestConnector.java Fri Oct 7 14:39:47 2016 @@ -24,6 +24,7 @@ import static org.junit.Assert.assertTru import org.junit.Test; import org.apache.catalina.Context; +import org.apache.catalina.LifecycleException; import org.apache.catalina.Wrapper; import org.apache.catalina.startup.TesterServlet; import org.apache.catalina.startup.Tomcat; @@ -92,4 +93,50 @@ public class TestConnector extends Tomca assertTrue(localPort1 > 0); assertTrue(localPort2 > 0); } + + + @Test(expected=LifecycleException.class) + public void testInvalidProtocolThrows() throws Exception { + doTestInvalidProtocol(true); + } + + + @Test + public void testInvalidProtocolNoThrows() throws Exception { + doTestInvalidProtocol(false); + } + + + private void doTestInvalidProtocol(boolean throwOnFailure) throws Exception { + Connector c = new Connector("foo.Bar"); + c.setThrowOnFailure(throwOnFailure); + + c.start(); + } + + + @Test(expected=LifecycleException.class) + public void testDuplicatePortThrows() throws Exception { + doTestDuplicatePort(true); + } + + + @Test + public void testDuplicatePortNoThrows() throws Exception { + doTestDuplicatePort(false); + } + + + private void doTestDuplicatePort(boolean throwOnFailure) throws Exception { + Connector c1 = new Connector(); + c1.setThrowOnFailure(throwOnFailure); + c1.setPort(0); + c1.start(); + + Connector c2 = new Connector(); + c2.setThrowOnFailure(throwOnFailure); + c2.setPort(c1.getLocalPort()); + + c2.start(); + } } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1763769&r1=1763768&r2=1763769&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Fri Oct 7 14:39:47 2016 @@ -55,6 +55,11 @@ Reduce multiple error messages when Connector fails to instantiate the associated ProtocolHandler. (markt) </fix> + <fix> + <bug>60152</bug>: Provide an option for Connector Lifecycle exceptions + to be re-thrown rather than logged. This is controlled by the new + <code>throwOnFailure</code> attribute of the Connector. (markt) + </fix> </changelog> </subsection> </section> Modified: tomcat/trunk/webapps/docs/config/ajp.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/ajp.xml?rev=1763769&r1=1763768&r2=1763769&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/config/ajp.xml (original) +++ tomcat/trunk/webapps/docs/config/ajp.xml Fri Oct 7 14:39:47 2016 @@ -446,6 +446,14 @@ </p> </attribute> + <attribute name="throwOnFailure" required="false"> + <p>If the Connector expereinces an Exception during a Lifecycle transition + should the Exception be rethrown or logged? If not specified, the default + of <code>false</code> will be used. Note that the default can be changed + by the <code>org.apache.catalina.startup.EXIT_ON_INIT_FAILURE</code> + system property.</p> + </attribute> + <attribute name="tomcatAuthentication" required="false"> <p>If set to <code>true</code>, the authentication will be done in Tomcat. Otherwise, the authenticated principal will be propagated from the native Modified: tomcat/trunk/webapps/docs/config/http.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/http.xml?rev=1763769&r1=1763768&r2=1763769&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/config/http.xml (original) +++ tomcat/trunk/webapps/docs/config/http.xml Fri Oct 7 14:39:47 2016 @@ -578,6 +578,15 @@ this priority means. </p> </attribute> + + <attribute name="throwOnFailure" required="false"> + <p>If the Connector expereinces an Exception during a Lifecycle transition + should the Exception be rethrown or logged? If not specified, the default + of <code>false</code> will be used. Note that the default can be changed + by the <code>org.apache.catalina.startup.EXIT_ON_INIT_FAILURE</code> + system property.</p> + </attribute> + </attributes> </subsection> Modified: tomcat/trunk/webapps/docs/config/systemprops.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/systemprops.xml?rev=1763769&r1=1763768&r2=1763769&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/config/systemprops.xml (original) +++ tomcat/trunk/webapps/docs/config/systemprops.xml Fri Oct 7 14:39:47 2016 @@ -623,8 +623,11 @@ <property name="org.apache.catalina.startup. EXIT_ON_INIT_FAILURE"> <p>If <code>true</code>, the server will exit if an exception happens - during the server initialization phase.</p> - <p>If not specified, the default value of <code>false</code> will be used.</p> + during the server initialization phase. To support this feature, this + system property is used as the default for the + <strong>throwOnFailure</strong> attribute of a Connector.</p> + <p>If not specified, the default value of <code>false</code> will be + used.</p> </property> <property name="org.apache.catalina.startup. RealmRuleSet.MAX_NESTED_REALM_LEVELS"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org