From 21302b696a5d809e435ac845554f56dc8ca214ec Mon Sep 17 00:00:00 2001 From: Christian Wulf <chw@informatik.uni-kiel.de> Date: Tue, 4 Nov 2014 06:21:51 +0100 Subject: [PATCH] reduced visibility of PerformanceChecks; fixed bug in performance test --- .../java/teetime/framework/AbstractStage.java | 4 ++-- .../framework/signal/StartingSignal.java | 20 ++++++++++++++++++- .../framework/signal/TerminatingSignal.java | 20 ++++++++++++++++++- src/main/java/teetime/stage/Cache.java | 3 +-- .../java/teetime/stage/CollectorSink.java | 4 ++-- .../stage/ElementDelayMeasuringStage.java | 4 ++-- .../ElementThroughputMeasuringStage.java | 4 ++-- src/main/java/teetime/stage/Relay.java | 4 ++-- src/main/java/teetime/stage/basic/Delay.java | 4 ++-- .../stage/basic/distributor/Distributor.java | 9 --------- .../teetime/stage/basic/merger/Merger.java | 4 ++-- src/main/java/teetime/stage/io/Printer.java | 4 ++-- .../stringBuffer/StringBufferFilter.java | 6 +++--- .../ChwHomeComparisonMethodcallWithPorts.java | 8 ++++++-- .../experiment01/ChwHomePerformanceCheck.java | 2 +- .../experiment01/ChwWorkPerformanceCheck.java | 2 +- .../experiment09/ChwHomePerformanceCheck.java | 2 +- .../experiment09/ChwWorkPerformanceCheck.java | 2 +- ...odCallThoughputTimestampAnalysis9Test.java | 2 -- .../experiment10/ChwHomePerformanceCheck.java | 8 ++++---- .../experiment10/ChwWorkPerformanceCheck.java | 2 +- .../experiment11/ChwHomePerformanceCheck.java | 2 +- .../experiment11/ChwWorkPerformanceCheck.java | 2 +- .../experiment14/ChwHomePerformanceCheck.java | 2 +- .../experiment14/ChwWorkPerformanceCheck.java | 2 +- .../experiment16/ChwHomePerformanceCheck.java | 2 +- .../experiment16/ChwWorkPerformanceCheck.java | 2 +- .../teetime/examples/loopStage/Countdown.java | 4 ++-- 28 files changed, 81 insertions(+), 53 deletions(-) diff --git a/src/main/java/teetime/framework/AbstractStage.java b/src/main/java/teetime/framework/AbstractStage.java index 33be2f0c..63ef5546 100644 --- a/src/main/java/teetime/framework/AbstractStage.java +++ b/src/main/java/teetime/framework/AbstractStage.java @@ -117,14 +117,14 @@ public abstract class AbstractStage implements Stage { this.validateOutputPorts(invalidPortConnections); } - public void onStarting() { + public void onStarting() throws Exception { this.cachedInputPorts = this.inputPortList.toArray(new InputPort<?>[0]); this.cachedOutputPorts = this.outputPortList.toArray(new OutputPort<?>[0]); this.connectUnconnectedOutputPorts(); } - public void onTerminating() { + public void onTerminating() throws Exception { // empty default implementation } diff --git a/src/main/java/teetime/framework/signal/StartingSignal.java b/src/main/java/teetime/framework/signal/StartingSignal.java index d1b7aa54..77637f97 100644 --- a/src/main/java/teetime/framework/signal/StartingSignal.java +++ b/src/main/java/teetime/framework/signal/StartingSignal.java @@ -1,12 +1,30 @@ package teetime.framework.signal; +import java.util.LinkedList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import teetime.framework.AbstractStage; public class StartingSignal implements ISignal { + private static final Logger LOGGER = LoggerFactory.getLogger(StartingSignal.class); + private final List<Exception> catchedExceptions = new LinkedList<Exception>(); + @Override public void trigger(final AbstractStage stage) { - stage.onStarting(); + try { + stage.onStarting(); + } catch (Exception e) { + catchedExceptions.add(e); + LOGGER.error("Exception while sending the start signal", e); + } + } + + public List<Exception> getCatchedExceptions() { + return catchedExceptions; } } diff --git a/src/main/java/teetime/framework/signal/TerminatingSignal.java b/src/main/java/teetime/framework/signal/TerminatingSignal.java index 0aba57ba..081adccd 100644 --- a/src/main/java/teetime/framework/signal/TerminatingSignal.java +++ b/src/main/java/teetime/framework/signal/TerminatingSignal.java @@ -1,12 +1,30 @@ package teetime.framework.signal; +import java.util.LinkedList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import teetime.framework.AbstractStage; public class TerminatingSignal implements ISignal { + private static final Logger LOGGER = LoggerFactory.getLogger(TerminatingSignal.class); + private final List<Exception> catchedExceptions = new LinkedList<Exception>(); + @Override public void trigger(final AbstractStage stage) { - stage.onTerminating(); + try { + stage.onTerminating(); + } catch (Exception e) { + catchedExceptions.add(e); + LOGGER.error("Exception while sending the start signal", e); + } + } + + public List<Exception> getCatchedExceptions() { + return catchedExceptions; } } diff --git a/src/main/java/teetime/stage/Cache.java b/src/main/java/teetime/stage/Cache.java index 07b7d289..6fb6f4b7 100644 --- a/src/main/java/teetime/stage/Cache.java +++ b/src/main/java/teetime/stage/Cache.java @@ -20,8 +20,7 @@ public class Cache<T> extends ConsumerStage<T> { } @Override - public void onTerminating() { - super.onTerminating(); + public void onTerminating() throws Exception { this.logger.debug("Emitting " + this.cachedObjects.size() + " cached elements..."); StopWatch stopWatch = new StopWatch(); stopWatch.start(); diff --git a/src/main/java/teetime/stage/CollectorSink.java b/src/main/java/teetime/stage/CollectorSink.java index f3b3875d..39a2c8f8 100644 --- a/src/main/java/teetime/stage/CollectorSink.java +++ b/src/main/java/teetime/stage/CollectorSink.java @@ -45,9 +45,9 @@ public class CollectorSink<T> extends ConsumerStage<T> { } @Override - public void onTerminating() { - super.onTerminating(); + public void onTerminating() throws Exception { System.out.println("size: " + this.elements.size()); + super.onTerminating(); } @Override diff --git a/src/main/java/teetime/stage/ElementDelayMeasuringStage.java b/src/main/java/teetime/stage/ElementDelayMeasuringStage.java index 452f75e3..2f963dbe 100644 --- a/src/main/java/teetime/stage/ElementDelayMeasuringStage.java +++ b/src/main/java/teetime/stage/ElementDelayMeasuringStage.java @@ -29,9 +29,9 @@ public class ElementDelayMeasuringStage<T> extends ConsumerStage<T> { } @Override - public void onStarting() { - this.resetTimestamp(System.nanoTime()); + public void onStarting() throws Exception { super.onStarting(); + this.resetTimestamp(System.nanoTime()); } private void computeElementDelay(final Long timestampInNs) { diff --git a/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java b/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java index ea36801a..ed4626c5 100644 --- a/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java +++ b/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java @@ -30,9 +30,9 @@ public class ElementThroughputMeasuringStage<T> extends ConsumerStage<T> { } @Override - public void onStarting() { - this.resetTimestamp(System.nanoTime()); + public void onStarting() throws Exception { super.onStarting(); + this.resetTimestamp(System.nanoTime()); } private void computeElementThroughput(final Long timestampInNs) { diff --git a/src/main/java/teetime/stage/Relay.java b/src/main/java/teetime/stage/Relay.java index 144b34ea..b5c82fae 100644 --- a/src/main/java/teetime/stage/Relay.java +++ b/src/main/java/teetime/stage/Relay.java @@ -25,9 +25,9 @@ public class Relay<T> extends ProducerStage<T> { } @Override - public void onStarting() { - this.cachedCastedInputPipe = (InterThreadPipe) this.inputPort.getPipe(); + public void onStarting() throws Exception { super.onStarting(); + this.cachedCastedInputPipe = (InterThreadPipe) this.inputPort.getPipe(); } public InputPort<T> getInputPort() { diff --git a/src/main/java/teetime/stage/basic/Delay.java b/src/main/java/teetime/stage/basic/Delay.java index 6c0ecac5..4682ba64 100644 --- a/src/main/java/teetime/stage/basic/Delay.java +++ b/src/main/java/teetime/stage/basic/Delay.java @@ -34,11 +34,11 @@ public class Delay<T> extends AbstractStage { } @Override - public void onTerminating() { - super.onTerminating(); + public void onTerminating() throws Exception { while (!this.inputPort.getPipe().isEmpty()) { this.executeWithPorts(); } + super.onTerminating(); } public InputPort<T> getInputPort() { diff --git a/src/main/java/teetime/stage/basic/distributor/Distributor.java b/src/main/java/teetime/stage/basic/distributor/Distributor.java index b80c8e5e..3e4b59bd 100644 --- a/src/main/java/teetime/stage/basic/distributor/Distributor.java +++ b/src/main/java/teetime/stage/basic/distributor/Distributor.java @@ -37,15 +37,6 @@ public class Distributor<T> extends ConsumerStage<T> { this.strategy.distribute((OutputPort<T>[]) this.getOutputPorts(), element); } - @Override - public void onTerminating() { - super.onTerminating(); - // for (OutputPort<T> op : this.outputPortList) { - // op.getPipe().close(); - // System.out.println("End signal sent, size: " + op.getPipe().size()); - // } - } - public OutputPort<T> getNewOutputPort() { return this.createOutputPort(); } diff --git a/src/main/java/teetime/stage/basic/merger/Merger.java b/src/main/java/teetime/stage/basic/merger/Merger.java index 870b22b9..6afda057 100644 --- a/src/main/java/teetime/stage/basic/merger/Merger.java +++ b/src/main/java/teetime/stage/basic/merger/Merger.java @@ -62,9 +62,9 @@ public class Merger<T> extends AbstractStage { } @Override - public void onTerminating() { - super.onTerminating(); + public void onTerminating() throws Exception { this.finishedInputPorts++; + super.onTerminating(); } public IMergerStrategy<T> getStrategy() { diff --git a/src/main/java/teetime/stage/io/Printer.java b/src/main/java/teetime/stage/io/Printer.java index 40ee69ee..21936fbc 100644 --- a/src/main/java/teetime/stage/io/Printer.java +++ b/src/main/java/teetime/stage/io/Printer.java @@ -86,13 +86,13 @@ public class Printer<T> extends ConsumerStage<T> { } @Override - public void onStarting() { + public void onStarting() throws Exception { super.onStarting(); this.initializeStream(); } @Override - public void onTerminating() { + public void onTerminating() throws Exception { this.closeStream(); super.onTerminating(); } diff --git a/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java b/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java index 2cefc39d..6e2d9ac4 100644 --- a/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java +++ b/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java @@ -25,7 +25,7 @@ import teetime.stage.stringBuffer.util.KiekerHashMap; /** * @author Christian Wulf - * + * * @since 1.10 */ public class StringBufferFilter<T> extends ConsumerStage<T> { @@ -44,12 +44,12 @@ public class StringBufferFilter<T> extends ConsumerStage<T> { } @Override - public void onStarting() { + public void onStarting() throws Exception { + super.onStarting(); for (final AbstractDataTypeHandler<?> handler : this.dataTypeHandlers) { handler.setLogger(this.logger); handler.setStringRepository(this.kiekerHashMap); } - super.onStarting(); } private T handle(final T object) { diff --git a/src/performancetest/java/teetime/examples/ChwHomeComparisonMethodcallWithPorts.java b/src/performancetest/java/teetime/examples/ChwHomeComparisonMethodcallWithPorts.java index afd8226e..a0ea8537 100644 --- a/src/performancetest/java/teetime/examples/ChwHomeComparisonMethodcallWithPorts.java +++ b/src/performancetest/java/teetime/examples/ChwHomeComparisonMethodcallWithPorts.java @@ -65,8 +65,12 @@ public class ChwHomeComparisonMethodcallWithPorts extends ProfiledPerformanceAss // assertEquals(53, value17, 4.1); // +0 // since 31.08.2014 (incl.) - assertEquals(68, value15, 4.1); // ?? - assertEquals(75, value17, 4.1); // ?? + // assertEquals(68, value15, 4.1); // +24 + // assertEquals(75, value17, 4.1); // +22 + + // since 04.11.2014 (incl.) + assertEquals(38, value15, 4.1); // -30 + assertEquals(78, value17, 4.1); // +3 // below results vary too much, possibly due to the OS' scheduler // assertEquals(RESULT_TESTS_16, (double) test16a.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1); diff --git a/src/performancetest/java/teetime/examples/experiment01/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment01/ChwHomePerformanceCheck.java index 9c9321d3..3493118d 100644 --- a/src/performancetest/java/teetime/examples/experiment01/ChwHomePerformanceCheck.java +++ b/src/performancetest/java/teetime/examples/experiment01/ChwHomePerformanceCheck.java @@ -5,7 +5,7 @@ import util.test.PerformanceResult; import util.test.PerformanceTest; import util.test.ProfiledPerformanceAssertion; -public class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion { +class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion { @Override public String getCorrespondingPerformanceProfile() { diff --git a/src/performancetest/java/teetime/examples/experiment01/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment01/ChwWorkPerformanceCheck.java index 0f7c9f19..07bdf509 100644 --- a/src/performancetest/java/teetime/examples/experiment01/ChwWorkPerformanceCheck.java +++ b/src/performancetest/java/teetime/examples/experiment01/ChwWorkPerformanceCheck.java @@ -5,7 +5,7 @@ import util.test.PerformanceResult; import util.test.PerformanceTest; import util.test.ProfiledPerformanceAssertion; -public class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion { +class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion { @Override public String getCorrespondingPerformanceProfile() { diff --git a/src/performancetest/java/teetime/examples/experiment09/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment09/ChwHomePerformanceCheck.java index 248925bd..cb92c4d7 100644 --- a/src/performancetest/java/teetime/examples/experiment09/ChwHomePerformanceCheck.java +++ b/src/performancetest/java/teetime/examples/experiment09/ChwHomePerformanceCheck.java @@ -2,7 +2,7 @@ package teetime.examples.experiment09; import static org.junit.Assert.assertEquals; -public class ChwHomePerformanceCheck extends AbstractPerformanceCheck { +class ChwHomePerformanceCheck extends AbstractPerformanceCheck { @Override public String getCorrespondingPerformanceProfile() { diff --git a/src/performancetest/java/teetime/examples/experiment09/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment09/ChwWorkPerformanceCheck.java index 1f5e65eb..ba4eda09 100644 --- a/src/performancetest/java/teetime/examples/experiment09/ChwWorkPerformanceCheck.java +++ b/src/performancetest/java/teetime/examples/experiment09/ChwWorkPerformanceCheck.java @@ -2,7 +2,7 @@ package teetime.examples.experiment09; import static org.junit.Assert.assertEquals; -public class ChwWorkPerformanceCheck extends AbstractPerformanceCheck { +class ChwWorkPerformanceCheck extends AbstractPerformanceCheck { @Override public String getCorrespondingPerformanceProfile() { diff --git a/src/performancetest/java/teetime/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java b/src/performancetest/java/teetime/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java index 4267330d..2fe74dff 100644 --- a/src/performancetest/java/teetime/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java +++ b/src/performancetest/java/teetime/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java @@ -19,8 +19,6 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -import teetime.examples.experiment10.ChwHomePerformanceCheck; -import teetime.examples.experiment10.ChwWorkPerformanceCheck; import teetime.util.ConstructorClosure; import teetime.util.TimestampObject; import util.test.PerformanceTest; diff --git a/src/performancetest/java/teetime/examples/experiment10/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment10/ChwHomePerformanceCheck.java index 925ab5bb..cb1f74aa 100644 --- a/src/performancetest/java/teetime/examples/experiment10/ChwHomePerformanceCheck.java +++ b/src/performancetest/java/teetime/examples/experiment10/ChwHomePerformanceCheck.java @@ -2,7 +2,7 @@ package teetime.examples.experiment10; import static org.junit.Assert.assertEquals; -public class ChwHomePerformanceCheck extends AbstractPerformanceCheck { +class ChwHomePerformanceCheck extends AbstractPerformanceCheck { @Override public String getCorrespondingPerformanceProfile() { @@ -13,9 +13,9 @@ public class ChwHomePerformanceCheck extends AbstractPerformanceCheck { public void check() { super.check(); - double meanSpeedup = (double) test10.quantiles.get(0.5) / test01.quantiles.get(0.5); + double medianSpeedup = (double) test10.quantiles.get(0.5) / test01.quantiles.get(0.5); - System.out.println("meanSpeedup (10): " + meanSpeedup); + System.out.println("meanSpeedup (10): " + medianSpeedup); // since 26.06.2014 (incl.) // assertEquals(26, value10, 2.1); // +14 @@ -24,6 +24,6 @@ public class ChwHomePerformanceCheck extends AbstractPerformanceCheck { // since 11.08.2014 (incl.) // assertEquals(47, value10, 2.1); // +21 // since 31.08.2014 (incl.) - assertEquals(51, meanSpeedup, 2.1); + assertEquals(51, medianSpeedup, 2.2); } } diff --git a/src/performancetest/java/teetime/examples/experiment10/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment10/ChwWorkPerformanceCheck.java index 2845935e..bbb49ded 100644 --- a/src/performancetest/java/teetime/examples/experiment10/ChwWorkPerformanceCheck.java +++ b/src/performancetest/java/teetime/examples/experiment10/ChwWorkPerformanceCheck.java @@ -2,7 +2,7 @@ package teetime.examples.experiment10; import static org.junit.Assert.assertEquals; -public class ChwWorkPerformanceCheck extends AbstractPerformanceCheck { +class ChwWorkPerformanceCheck extends AbstractPerformanceCheck { @Override public String getCorrespondingPerformanceProfile() { diff --git a/src/performancetest/java/teetime/examples/experiment11/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment11/ChwHomePerformanceCheck.java index 6b5d256d..99f8fc66 100644 --- a/src/performancetest/java/teetime/examples/experiment11/ChwHomePerformanceCheck.java +++ b/src/performancetest/java/teetime/examples/experiment11/ChwHomePerformanceCheck.java @@ -5,7 +5,7 @@ import util.test.PerformanceResult; import util.test.PerformanceTest; import util.test.ProfiledPerformanceAssertion; -public class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion { +class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion { @Override public String getCorrespondingPerformanceProfile() { diff --git a/src/performancetest/java/teetime/examples/experiment11/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment11/ChwWorkPerformanceCheck.java index 65049146..8dcfd608 100644 --- a/src/performancetest/java/teetime/examples/experiment11/ChwWorkPerformanceCheck.java +++ b/src/performancetest/java/teetime/examples/experiment11/ChwWorkPerformanceCheck.java @@ -5,7 +5,7 @@ import util.test.PerformanceResult; import util.test.PerformanceTest; import util.test.ProfiledPerformanceAssertion; -public class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion { +class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion { @Override public String getCorrespondingPerformanceProfile() { diff --git a/src/performancetest/java/teetime/examples/experiment14/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment14/ChwHomePerformanceCheck.java index 5b34a6d4..9ca9528b 100644 --- a/src/performancetest/java/teetime/examples/experiment14/ChwHomePerformanceCheck.java +++ b/src/performancetest/java/teetime/examples/experiment14/ChwHomePerformanceCheck.java @@ -2,7 +2,7 @@ package teetime.examples.experiment14; import static org.junit.Assert.assertEquals; -public class ChwHomePerformanceCheck extends AbstractPerformanceCheck { +class ChwHomePerformanceCheck extends AbstractPerformanceCheck { @Override public String getCorrespondingPerformanceProfile() { diff --git a/src/performancetest/java/teetime/examples/experiment14/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment14/ChwWorkPerformanceCheck.java index eeea568d..b8ce7c10 100644 --- a/src/performancetest/java/teetime/examples/experiment14/ChwWorkPerformanceCheck.java +++ b/src/performancetest/java/teetime/examples/experiment14/ChwWorkPerformanceCheck.java @@ -2,7 +2,7 @@ package teetime.examples.experiment14; import static org.junit.Assert.assertEquals; -public class ChwWorkPerformanceCheck extends AbstractPerformanceCheck { +class ChwWorkPerformanceCheck extends AbstractPerformanceCheck { @Override public String getCorrespondingPerformanceProfile() { diff --git a/src/performancetest/java/teetime/examples/experiment16/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment16/ChwHomePerformanceCheck.java index 29a27cf7..0aacc0b2 100644 --- a/src/performancetest/java/teetime/examples/experiment16/ChwHomePerformanceCheck.java +++ b/src/performancetest/java/teetime/examples/experiment16/ChwHomePerformanceCheck.java @@ -5,7 +5,7 @@ import util.test.PerformanceResult; import util.test.PerformanceTest; import util.test.ProfiledPerformanceAssertion; -public class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion { +class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion { @Override public String getCorrespondingPerformanceProfile() { diff --git a/src/performancetest/java/teetime/examples/experiment16/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment16/ChwWorkPerformanceCheck.java index 8aeae42d..6a61017a 100644 --- a/src/performancetest/java/teetime/examples/experiment16/ChwWorkPerformanceCheck.java +++ b/src/performancetest/java/teetime/examples/experiment16/ChwWorkPerformanceCheck.java @@ -5,7 +5,7 @@ import util.test.PerformanceResult; import util.test.PerformanceTest; import util.test.ProfiledPerformanceAssertion; -public class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion { +class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion { @Override public void check() { diff --git a/src/performancetest/java/teetime/examples/loopStage/Countdown.java b/src/performancetest/java/teetime/examples/loopStage/Countdown.java index f70e3eb6..adbbeff6 100644 --- a/src/performancetest/java/teetime/examples/loopStage/Countdown.java +++ b/src/performancetest/java/teetime/examples/loopStage/Countdown.java @@ -17,9 +17,9 @@ public class Countdown extends ProducerStage<Void> { } @Override - public void onStarting() { - this.countdownInputPort.getPipe().add(this.initialCountdown); + public void onStarting() throws Exception { super.onStarting(); + this.countdownInputPort.getPipe().add(this.initialCountdown); } @Override -- GitLab