From 3850d923c78c751879a15111ebb5a5a719edc45a Mon Sep 17 00:00:00 2001 From: markt Date: Tue, 4 Jan 2011 17:57:16 +0000 Subject: [PATCH] Re-fix https://issues.apache.org/bugzilla/show_bug.cgi?id=49372 Don't throw an LifecycleException for an invalid transition if a connector fails to start. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1055121 13f79535-47bb-0310-9956-ffa450edef68 --- java/org/apache/catalina/core/StandardService.java | 5 ++++- java/org/apache/catalina/util/LifecycleBase.java | 25 +++++++++++++++++----- webapps/docs/changelog.xml | 6 ++++++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/java/org/apache/catalina/core/StandardService.java b/java/org/apache/catalina/core/StandardService.java index cbada8120..216a7f851 100644 --- a/java/org/apache/catalina/core/StandardService.java +++ b/java/org/apache/catalina/core/StandardService.java @@ -453,7 +453,10 @@ public class StandardService extends LifecycleMBeanBase implements Service { synchronized (connectors) { for (Connector connector: connectors) { try { - connector.start(); + // 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", diff --git a/java/org/apache/catalina/util/LifecycleBase.java b/java/org/apache/catalina/util/LifecycleBase.java index b64492e64..bfe725dd0 100644 --- a/java/org/apache/catalina/util/LifecycleBase.java +++ b/java/org/apache/catalina/util/LifecycleBase.java @@ -97,7 +97,12 @@ public abstract class LifecycleBase implements Lifecycle { } setState(LifecycleState.INITIALIZING); - initInternal(); + try { + initInternal(); + } catch (LifecycleException e) { + setState(LifecycleState.FAILED); + throw e; + } setState(LifecycleState.INITIALIZED); } @@ -213,7 +218,12 @@ public abstract class LifecycleBase implements Lifecycle { setState(LifecycleState.STOPPING_PREP); - stopInternal(); + try { + stopInternal(); + } catch (LifecycleException e) { + setState(LifecycleState.FAILED); + throw e; + } if (state.equals(LifecycleState.MUST_DESTROY)) { // Complete stop process first @@ -221,8 +231,8 @@ public abstract class LifecycleBase implements Lifecycle { destroy(); } else { - // Shouldn't be necessary but acts as a check that sub-classes are doing - // what they are supposed to. + // Shouldn't be necessary but acts as a check that sub-classes are + // doing what they are supposed to. if (!state.equals(LifecycleState.STOPPING)) { invalidTransition(Lifecycle.AFTER_STOP_EVENT); } @@ -271,7 +281,12 @@ public abstract class LifecycleBase implements Lifecycle { setState(LifecycleState.DESTROYING); - destroyInternal(); + try { + destroyInternal(); + } catch (LifecycleException e) { + setState(LifecycleState.FAILED); + throw e; + } setState(LifecycleState.DESTROYED); } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index a3a04acf4..f789d4e07 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -82,6 +82,12 @@ the pool when a web application is stopped. (slaurent) + 49372: Re-fix after connector re-factoring. If connector + initialisation fails (e.g. if a port is alreasy in use) do not trigger + an LifecycleException for an invalid state transition. + (markt) + + 49650: Remove unnecessary entries package.access property defined in catalina.properties. Patch provided by Owen Farrell. (markt) -- 2.11.0