From a76723a02cffcb93b4f8afb748b34f9e08b4c880 Mon Sep 17 00:00:00 2001 From: Nelson Tavares de Sousa <stu103017@mail.uni-kiel.de> Date: Thu, 6 Aug 2015 15:45:17 +0200 Subject: [PATCH] moved catch to onSignal and removed obsolete AbstractSignal --- .../framework/AbstractRunnableStage.java | 9 +++-- .../java/teetime/framework/AbstractStage.java | 6 ++- .../framework/signal/AbstractSignal.java | 38 ------------------- .../teetime/framework/signal/ISignal.java | 2 +- .../framework/signal/StartingSignal.java | 13 ++----- .../framework/signal/TerminatingSignal.java | 13 ++----- 6 files changed, 18 insertions(+), 63 deletions(-) delete mode 100644 src/main/java/teetime/framework/signal/AbstractSignal.java diff --git a/src/main/java/teetime/framework/AbstractRunnableStage.java b/src/main/java/teetime/framework/AbstractRunnableStage.java index e2f87810..d9116d45 100644 --- a/src/main/java/teetime/framework/AbstractRunnableStage.java +++ b/src/main/java/teetime/framework/AbstractRunnableStage.java @@ -49,9 +49,9 @@ abstract class AbstractRunnableStage implements Runnable { throw new IllegalArgumentException("Argument stage may not have a nullable owning context"); } try { - do { + while (!stage.shouldBeTerminated()) { executeStage(); - } while (!stage.shouldBeTerminated()); + } } catch (TerminateException e) { this.stage.terminate(); stage.getOwningContext().abortConfigurationRun(); @@ -65,13 +65,16 @@ abstract class AbstractRunnableStage implements Runnable { } catch (InterruptedException e) { this.logger.error(TERMINATING_THREAD_DUE_TO_THE_FOLLOWING_EXCEPTION, e); } - } finally { + } finally + + { if (stage.getTerminationStrategy() != TerminationStrategy.BY_INTERRUPT) { stage.getOwningContext().getThreadService().getRunnableCounter().dec(); } } logger.debug("Finished runnable stage. (" + stage.getId() + ")"); + } protected abstract void beforeStageExecution() throws InterruptedException; diff --git a/src/main/java/teetime/framework/AbstractStage.java b/src/main/java/teetime/framework/AbstractStage.java index 308165a7..da814420 100644 --- a/src/main/java/teetime/framework/AbstractStage.java +++ b/src/main/java/teetime/framework/AbstractStage.java @@ -55,7 +55,11 @@ public abstract class AbstractStage extends Stage { @Override public void onSignal(final ISignal signal, final InputPort<?> inputPort) { if (!this.signalAlreadyReceived(signal, inputPort)) { - signal.trigger(this); + try { + signal.trigger(this); + } catch (Exception e) { + this.getOwningContext().abortConfigurationRun(); + } for (OutputPort<?> outputPort : outputPorts.getOpenedPorts()) { outputPort.sendSignal(signal); } diff --git a/src/main/java/teetime/framework/signal/AbstractSignal.java b/src/main/java/teetime/framework/signal/AbstractSignal.java deleted file mode 100644 index cd67b53c..00000000 --- a/src/main/java/teetime/framework/signal/AbstractSignal.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (C) 2015 Christian Wulf, Nelson Tavares de Sousa (http://christianwulf.github.io/teetime) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package teetime.framework.signal; - -import java.util.LinkedList; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -abstract class AbstractSignal implements ISignal { - - protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractSignal.class); - - protected final List<Exception> catchedExceptions = new LinkedList<Exception>(); - - protected AbstractSignal() { - super(); - } - - public List<Exception> getCatchedExceptions() { - return this.catchedExceptions; - } - -} diff --git a/src/main/java/teetime/framework/signal/ISignal.java b/src/main/java/teetime/framework/signal/ISignal.java index 13ecf747..80469661 100644 --- a/src/main/java/teetime/framework/signal/ISignal.java +++ b/src/main/java/teetime/framework/signal/ISignal.java @@ -23,7 +23,7 @@ import teetime.framework.Stage; public interface ISignal { - void trigger(Stage stage); + void trigger(Stage stage) throws Exception; // Only used by the merger so far boolean mayBeTriggered(Set<InputPort<?>> receivedInputPorts, List<InputPort<?>> allInputPorts); diff --git a/src/main/java/teetime/framework/signal/StartingSignal.java b/src/main/java/teetime/framework/signal/StartingSignal.java index cb668ba9..f8e00159 100644 --- a/src/main/java/teetime/framework/signal/StartingSignal.java +++ b/src/main/java/teetime/framework/signal/StartingSignal.java @@ -19,20 +19,13 @@ import java.util.List; import java.util.Set; import teetime.framework.InputPort; -import teetime.framework.RuntimeServiceFacade; import teetime.framework.Stage; -public final class StartingSignal extends AbstractSignal { +public final class StartingSignal implements ISignal { @Override - public void trigger(final Stage stage) { - try { - stage.onStarting(); - } catch (final Exception e) { // NOCS NOPMD (Stages can throw any arbitrary Exception) - this.catchedExceptions.add(e); - RuntimeServiceFacade.INSTANCE.abortExecution(stage); - LOGGER.error("Exception while sending the start signal", e); - } + public void trigger(final Stage stage) throws Exception { + stage.onStarting(); } @Override diff --git a/src/main/java/teetime/framework/signal/TerminatingSignal.java b/src/main/java/teetime/framework/signal/TerminatingSignal.java index 96ef9d3b..f17b532a 100644 --- a/src/main/java/teetime/framework/signal/TerminatingSignal.java +++ b/src/main/java/teetime/framework/signal/TerminatingSignal.java @@ -19,20 +19,13 @@ import java.util.List; import java.util.Set; import teetime.framework.InputPort; -import teetime.framework.RuntimeServiceFacade; import teetime.framework.Stage; -public final class TerminatingSignal extends AbstractSignal { +public final class TerminatingSignal implements ISignal { @Override - public void trigger(final Stage stage) { - try { - stage.onTerminating(); - } catch (final Exception e) { // NOCS NOPMD (Stages can throw any arbitrary Exception) - this.catchedExceptions.add(e); - RuntimeServiceFacade.INSTANCE.abortExecution(stage); - LOGGER.error("Exception while sending the termination signal", e); - } + public void trigger(final Stage stage) throws Exception { + stage.onTerminating(); } @Override -- GitLab