diff --git a/src/main/java/teetime/framework/ConfigurationContext.java b/src/main/java/teetime/framework/ConfigurationContext.java index 9e0f7e1a705afd56c0aa1bbef5efabd152049631..41fe620bb45dad13e1345cdf33554236fe3ee525 100644 --- a/src/main/java/teetime/framework/ConfigurationContext.java +++ b/src/main/java/teetime/framework/ConfigurationContext.java @@ -85,7 +85,6 @@ final class ConfigurationContext { } else { stage.owningContext = this; } - } final void initializeContext() { diff --git a/src/main/java/teetime/framework/Stage.java b/src/main/java/teetime/framework/Stage.java index 986593eacf3e9d1c2dd03e9b31ae74ed723fa31d..8b51301e873578cbbcc098d42278965445da8a6b 100644 --- a/src/main/java/teetime/framework/Stage.java +++ b/src/main/java/teetime/framework/Stage.java @@ -134,7 +134,6 @@ public abstract class Stage { return owningThread; } - @SuppressWarnings("PMD.DefaultPackage") void setOwningThread(final Thread owningThread) { this.owningThread = owningThread; } diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java index aca4c7b340ec5a46df61bad43243a9dce5cdd1b6..161e94cf968c2b3ceca777cdeb880cc4f593273d 100644 --- a/src/main/java/teetime/framework/ThreadService.java +++ b/src/main/java/teetime/framework/ThreadService.java @@ -1,19 +1,17 @@ package teetime.framework; -import java.util.Collection; +import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.ConcurrentLinkedQueue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import teetime.framework.exceptionHandling.AbstractExceptionListener; import teetime.framework.exceptionHandling.IExceptionListenerFactory; -import teetime.util.ThreadThrowableContainer; import teetime.util.framework.concurrent.SignalingCounter; /** @@ -39,21 +37,15 @@ class ThreadService extends AbstractService<ThreadService> { public ThreadService(final AbstractCompositeStage compositeStage) { this.compositeStage = compositeStage; - } - private final Collection<ThreadThrowableContainer> exceptions = new ConcurrentLinkedQueue<ThreadThrowableContainer>(); - private final List<RunnableProducerStage> producerRunnables = new LinkedList<RunnableProducerStage>(); @Override void onInitialize() { - IExceptionListenerFactory factory; - try { - factory = ((Configuration) compositeStage).getFactory(); - } catch (ClassCastException e) { - throw new IllegalStateException("Something went wrong"); - } + // is invoked only by a Configuration + IExceptionListenerFactory factory = ((Configuration) compositeStage).getFactory(); + if (threadableStages.isEmpty()) { throw new IllegalStateException("No stage was added using the addThreadableStage(..) method. Add at least one stage."); } @@ -121,9 +113,23 @@ class ThreadService extends AbstractService<ThreadService> { thread.interrupt(); } - // if (!exceptions.isEmpty()) { - // throw new ExecutionException(exceptions); - // } + List<Exception> exceptions = collectExceptions(); + if (!exceptions.isEmpty()) { + // throw new ExecutionException(exceptions); + } + } + + // TODO impl throw exception + private List<Exception> collectExceptions() { + // Collection<ThreadThrowableContainer> exceptions = new ConcurrentLinkedQueue<ThreadThrowableContainer>(); + List<Exception> exceptions = new ArrayList<Exception>(); + + for (Stage stage : threadableStages.keySet()) { + // List<Exception> stageExceptions = stage.exceptionListener.getExceptions(); + // exceptions.addAll(stageExceptions); + } + + return exceptions; } private void initializeIntraStages(final Set<Stage> intraStages, final Thread thread, final AbstractExceptionListener newListener) { diff --git a/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java index fef3dff68ef330e1830c6e9e33d61d7b6cfe2730..d0c7dec4ff085fc059458f9ac8572381e831e069 100644 --- a/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java +++ b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java @@ -15,14 +15,26 @@ */ package teetime.framework.exceptionHandling; +import java.util.ArrayList; +import java.util.List; + import teetime.framework.Stage; class TerminatingExceptionListener extends AbstractExceptionListener { + private final List<Exception> exceptions = new ArrayList<Exception>(); + @Override public FurtherExecution onStageException(final Exception e, final Stage throwingStage) { - logger.warn("Exception occurred in " + throwingStage.getId(), e); + if (logger.isWarnEnabled()) { + logger.warn("Exception occurred in " + throwingStage.getId(), e); + } + exceptions.add(e); return FurtherExecution.TERMINATE; } + public List<Exception> getExceptions() { + return exceptions; + } + } diff --git a/src/main/java/teetime/framework/signal/StartingSignal.java b/src/main/java/teetime/framework/signal/StartingSignal.java index 375952f009c1506bd02b42c4a69d3094519f6af7..5b547dd5e6fb6253af064271b5578fd72598adf3 100644 --- a/src/main/java/teetime/framework/signal/StartingSignal.java +++ b/src/main/java/teetime/framework/signal/StartingSignal.java @@ -27,7 +27,7 @@ public final class StartingSignal extends AbstractSignal { public void trigger(final Stage stage) { try { stage.onStarting(); - } catch (Exception e) { // NOCS (Stages can throw any arbitrary Exception) + } catch (final Exception e) { // NOCS NOPMD (Stages can throw any arbitrary Exception) this.catchedExceptions.add(e); LOGGER.error("Exception while sending the start signal", e); } diff --git a/src/main/java/teetime/framework/signal/TerminatingSignal.java b/src/main/java/teetime/framework/signal/TerminatingSignal.java index 5823902b87110544e213e0302c23e967e00ec9f4..32ec5bf20e9d38a56c0f949d32954cae4490be52 100644 --- a/src/main/java/teetime/framework/signal/TerminatingSignal.java +++ b/src/main/java/teetime/framework/signal/TerminatingSignal.java @@ -27,7 +27,7 @@ public final class TerminatingSignal extends AbstractSignal { public void trigger(final Stage stage) { try { stage.onTerminating(); - } catch (Exception e) { // NOCS (Stages can throw any arbitrary Exception) + } catch (final Exception e) { // NOCS NOPMD (Stages can throw any arbitrary Exception) this.catchedExceptions.add(e); LOGGER.error("Exception while sending the termination signal", e); }