Author: markt Date: Fri Oct 7 08:54:34 2016 New Revision: 1763700 URL: http://svn.apache.org/viewvc?rev=1763700&view=rev Log: Add throwOnFailure to LifecycleBase. Defaults to no change to current behaviour.
Modified: tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java Modified: tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java?rev=1763700&r1=1763699&r2=1763700&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java (original) +++ tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java Fri Oct 7 08:54:34 2016 @@ -53,6 +53,37 @@ public abstract class LifecycleBase impl private volatile LifecycleState state = LifecycleState.NEW; + private boolean throwOnFailure = true; + + + /** + * Will a {@link LifecycleException} thrown by a sub-class during + * {@link #initInternal()}, {@link #startInternal()}, + * {@link #stopInternal()} or {@link #destroyInternal()} be re-thrown for + * the caller to handle or will it be logged instead? + * + * @return {@code true} if the exception will be re-thrown, otherwise + * {@code false} + */ + public boolean getThrowOnFailure() { + return throwOnFailure; + } + + + /** + * Configure if a {@link LifecycleException} thrown by a sub-class during + * {@link #initInternal()}, {@link #startInternal()}, + * {@link #stopInternal()} or {@link #destroyInternal()} will be re-thrown + * for the caller to handle or if it will be logged instead. + * + * @param throwOnFailure {@code true} if the exception should be re-thrown, + * otherwise {@code false} + */ + public void setThrowOnFailure(boolean throwOnFailure) { + this.throwOnFailure = throwOnFailure; + } + + /** * {@inheritDoc} */ @@ -105,9 +136,7 @@ public abstract class LifecycleBase impl initInternal(); setStateInternal(LifecycleState.INITIALIZED, null, false); } catch (Throwable t) { - ExceptionUtils.handleThrowable(t); - setStateInternal(LifecycleState.FAILED, null, false); - throw new LifecycleException(sm.getString("lifecycleBase.initFail",toString()), t); + handleSubClassException(t, "lifecycleBase.initFail", toString()); } } @@ -166,9 +195,7 @@ public abstract class LifecycleBase impl } catch (Throwable t) { // This is an 'uncontrolled' failure so put the component into the // FAILED state and throw an exception. - ExceptionUtils.handleThrowable(t); - setStateInternal(LifecycleState.FAILED, null, false); - throw new LifecycleException(sm.getString("lifecycleBase.startFail", toString()), t); + handleSubClassException(t, "lifecycleBase.startFail", toString()); } } @@ -237,9 +264,7 @@ public abstract class LifecycleBase impl setStateInternal(LifecycleState.STOPPED, null, false); } catch (Throwable t) { - ExceptionUtils.handleThrowable(t); - setStateInternal(LifecycleState.FAILED, null, false); - throw new LifecycleException(sm.getString("lifecycleBase.stopFail",toString()), t); + handleSubClassException(t, "lifecycleBase.stopFail", toString()); } finally { if (this instanceof Lifecycle.SingleUse) { // Complete stop process first @@ -297,9 +322,7 @@ public abstract class LifecycleBase impl destroyInternal(); setStateInternal(LifecycleState.DESTROYED, null, false); } catch (Throwable t) { - ExceptionUtils.handleThrowable(t); - setStateInternal(LifecycleState.FAILED, null, false); - throw new LifecycleException(sm.getString("lifecycleBase.destroyFail",toString()), t); + handleSubClassException(t, "lifecycleBase.destroyFail", toString()); } } @@ -407,4 +430,19 @@ public abstract class LifecycleBase impl String msg = sm.getString("lifecycleBase.invalidTransition", type, toString(), state); throw new LifecycleException(msg); } + + + private void handleSubClassException(Throwable t, String key, Object... args) throws LifecycleException { + ExceptionUtils.handleThrowable(t); + setStateInternal(LifecycleState.FAILED, null, false); + String msg = sm.getString(key, args); + if (getThrowOnFailure()) { + if (!(t instanceof LifecycleException)) { + t = new LifecycleException(msg, t); + } + throw (LifecycleException) t; + } else { + log.error(msg, t); + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org