diff --git a/src/main/java/teetime/framework/Analysis.java b/src/main/java/teetime/framework/Analysis.java index 3156529382e1febae7819cc925d2bbca304bea58..873e2fc10dacde581866a0674d32a9a85c9f6619 100644 --- a/src/main/java/teetime/framework/Analysis.java +++ b/src/main/java/teetime/framework/Analysis.java @@ -99,7 +99,6 @@ public class Analysis implements UncaughtExceptionHandler { } else { runnable = new RunnableConsumerStage(stage, newListener); } - newListener.setRunnableStage(runnable); final Thread thread = new Thread(runnable); stage.setOwningThread(thread); this.consumerThreads.add(thread); @@ -107,7 +106,6 @@ public class Analysis implements UncaughtExceptionHandler { } case BY_SELF_DECISION: { RunnableProducerStage runnable = new RunnableProducerStage(stage, newListener); - newListener.setRunnableStage(runnable); final Thread thread = new Thread(runnable); stage.setOwningThread(thread); this.finiteProducerThreads.add(thread); @@ -115,7 +113,6 @@ public class Analysis implements UncaughtExceptionHandler { } case BY_INTERRUPT: { RunnableProducerStage runnable = new RunnableProducerStage(stage, newListener); - newListener.setRunnableStage(runnable); final Thread thread = new Thread(runnable); stage.setOwningThread(thread); this.infiniteProducerThreads.add(thread); diff --git a/src/main/java/teetime/framework/RunnableStage.java b/src/main/java/teetime/framework/RunnableStage.java index 6a8453bab06a09d5e7f686bc3d2cd162ad376b17..3acf6db53542fc8d7244f6d79e9b6ece6973f8e9 100644 --- a/src/main/java/teetime/framework/RunnableStage.java +++ b/src/main/java/teetime/framework/RunnableStage.java @@ -6,7 +6,7 @@ import org.slf4j.LoggerFactory; import teetime.framework.exceptionHandling.StageException; import teetime.framework.exceptionHandling.StageExceptionListener; -public abstract class RunnableStage implements Runnable { +abstract class RunnableStage implements Runnable { protected final Stage stage; @SuppressWarnings("PMD.LoggerIsNotStaticFinal") @@ -30,7 +30,9 @@ public abstract class RunnableStage implements Runnable { try { executeStage(); } catch (StageException e) { - this.listener.onStageException(e, e.getThrowingStage()); + if (!this.listener.onStageException(e, e.getThrowingStage())) { + this.stage.terminate(); + } } } while (!this.stage.shouldBeTerminated()); @@ -47,11 +49,6 @@ public abstract class RunnableStage implements Runnable { this.logger.debug("Finished runnable stage. (" + this.stage.getId() + ")"); } - public final void abortExecution() { - this.stage.terminate(); - // TODO: flag error and throw exception - } - protected abstract void beforeStageExecution(); protected abstract void executeStage(); diff --git a/src/main/java/teetime/framework/exceptionHandling/DefaultListener.java b/src/main/java/teetime/framework/exceptionHandling/DefaultListener.java index 26c2cfd2e22a5bc66b67d6fc394a3243148efaa0..1db8e36c65c6abfc5f9da5d4e6a77480a46e91dc 100644 --- a/src/main/java/teetime/framework/exceptionHandling/DefaultListener.java +++ b/src/main/java/teetime/framework/exceptionHandling/DefaultListener.java @@ -10,7 +10,7 @@ public class DefaultListener extends StageExceptionListener { } @Override - public void onStageException(final Exception e, final Stage throwingStage) { - // TODO Auto-generated method stub + public boolean onStageException(final Exception e, final Stage throwingStage) { + return true; } } diff --git a/src/main/java/teetime/framework/exceptionHandling/StageExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/StageExceptionListener.java index 8283ebd2346e9bc85cb6dacb32092ddfa27ee09d..1ebe184b4464369dcec7008587f89af85bce1eff 100644 --- a/src/main/java/teetime/framework/exceptionHandling/StageExceptionListener.java +++ b/src/main/java/teetime/framework/exceptionHandling/StageExceptionListener.java @@ -3,7 +3,6 @@ package teetime.framework.exceptionHandling; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import teetime.framework.RunnableStage; import teetime.framework.Stage; /** @@ -12,8 +11,6 @@ import teetime.framework.Stage; */ public abstract class StageExceptionListener { - private RunnableStage runnable; - /** * The default logger, which can be used by all subclasses */ @@ -31,16 +28,6 @@ public abstract class StageExceptionListener { * @param throwingStage * the stage, which has thrown the exception. */ - public abstract void onStageException(Exception e, Stage throwingStage); - - /** - * This method can be used to terminate the execution of the thread. - */ - protected final void terminateExecution() { - this.runnable.abortExecution(); - } + public abstract boolean onStageException(Exception e, Stage throwingStage); - public final void setRunnableStage(final RunnableStage runnableStage) { - this.runnable = runnableStage; - } }