diff --git a/src/main/java/teetime/framework/AbstractRunnableStage.java b/src/main/java/teetime/framework/AbstractRunnableStage.java index 8b20fa8c0c7f2490f674d8307ea4bbe5198f5780..35f41f13fb138957276ef11442afcc98ae0fff4b 100644 --- a/src/main/java/teetime/framework/AbstractRunnableStage.java +++ b/src/main/java/teetime/framework/AbstractRunnableStage.java @@ -4,13 +4,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import teetime.framework.exceptionHandling.StageException; -import teetime.framework.exceptionHandling.AbstractStageExceptionHandler; -import teetime.framework.exceptionHandling.AbstractStageExceptionHandler.FurtherExecution; +import teetime.framework.exceptionHandling.AbstractExceptionListener; +import teetime.framework.exceptionHandling.AbstractExceptionListener.FurtherExecution; import teetime.framework.signal.TerminatingSignal; abstract class AbstractRunnableStage implements Runnable { - private final AbstractStageExceptionHandler exceptionHandler; + private final AbstractExceptionListener exceptionHandler; private static final String TERMINATING_THREAD_DUE_TO_THE_FOLLOWING_EXCEPTION = "Terminating thread due to the following exception: "; @@ -18,7 +18,7 @@ abstract class AbstractRunnableStage implements Runnable { @SuppressWarnings("PMD.LoggerIsNotStaticFinal") protected final Logger logger; - public AbstractRunnableStage(final Stage stage, final AbstractStageExceptionHandler exceptionHandler) { + public AbstractRunnableStage(final Stage stage, final AbstractExceptionListener exceptionHandler) { this.stage = stage; this.logger = LoggerFactory.getLogger(stage.getClass()); this.exceptionHandler = exceptionHandler; diff --git a/src/main/java/teetime/framework/Analysis.java b/src/main/java/teetime/framework/Analysis.java index 9238dce94707318e07787c04ec8c59e0f812b0e2..01cefe37fa0b4915a95a6396f3a69da8cc747650 100644 --- a/src/main/java/teetime/framework/Analysis.java +++ b/src/main/java/teetime/framework/Analysis.java @@ -24,8 +24,9 @@ import java.util.concurrent.ConcurrentLinkedQueue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import teetime.framework.exceptionHandling.IgnoringStageListener; -import teetime.framework.exceptionHandling.AbstractStageExceptionHandler; +import teetime.framework.exceptionHandling.AbstractExceptionListener; +import teetime.framework.exceptionHandling.IExceptionListenerFactory; +import teetime.framework.exceptionHandling.IgnoringExceptionListenerFactory; import teetime.framework.signal.ValidatingSignal; import teetime.framework.validation.AnalysisNotValidException; import teetime.util.Pair; @@ -43,7 +44,7 @@ public final class Analysis implements UncaughtExceptionHandler { private final AnalysisConfiguration configuration; - private final Class<? extends teetime.framework.exceptionHandling.AbstractStageExceptionHandler> listener; + private final IExceptionListenerFactory factory; private boolean executionInterrupted = false; @@ -62,13 +63,13 @@ public final class Analysis implements UncaughtExceptionHandler { * to be used for the analysis */ public Analysis(final AnalysisConfiguration configuration) { - this(configuration, false, IgnoringStageListener.class); + this(configuration, false, new IgnoringExceptionListenerFactory()); } @SuppressWarnings("PMD.ConstructorCallsOverridableMethod") // TODO remove @SuppressWarnings if init is no longer deprecated public Analysis(final AnalysisConfiguration configuration, final boolean validationEnabled) { - this(configuration, validationEnabled, IgnoringStageListener.class); + this(configuration, validationEnabled, new IgnoringExceptionListenerFactory()); } /** @@ -76,16 +77,16 @@ public final class Analysis implements UncaughtExceptionHandler { * * @param configuration * to be used for the analysis - * @param listener + * @param factory * specific listener for the exception handling */ - public Analysis(final AnalysisConfiguration configuration, final Class<? extends AbstractStageExceptionHandler> listener) { - this(configuration, false, listener); + public Analysis(final AnalysisConfiguration configuration, final IExceptionListenerFactory factory) { + this(configuration, false, factory); } - public Analysis(final AnalysisConfiguration configuration, final boolean validationEnabled, final Class<? extends AbstractStageExceptionHandler> listener) { + public Analysis(final AnalysisConfiguration configuration, final boolean validationEnabled, final IExceptionListenerFactory factory) { this.configuration = configuration; - this.listener = listener; + this.factory = factory; if (validationEnabled) { validateStages(); } @@ -124,14 +125,8 @@ public final class Analysis implements UncaughtExceptionHandler { throw new IllegalStateException("No stage was added using the addThreadableStage(..) method. Add at least one stage."); } for (Stage stage : threadableStageJobs) { - AbstractStageExceptionHandler newListener; - try { - newListener = listener.newInstance(); - } catch (InstantiationException e) { - throw new IllegalStateException(e); - } catch (IllegalAccessException e) { - throw new IllegalStateException(e); - } + AbstractExceptionListener newListener; + newListener = factory.newHandlerInstance(); switch (stage.getTerminationStrategy()) { case BY_SIGNAL: { final Thread thread = new Thread(new RunnableConsumerStage(stage, newListener)); diff --git a/src/main/java/teetime/framework/RunnableConsumerStage.java b/src/main/java/teetime/framework/RunnableConsumerStage.java index 9c37dde762205d47ddc91c151924c23181d99d42..92ed61e4853fefdba6c7a25900bd21a383ee7a9c 100644 --- a/src/main/java/teetime/framework/RunnableConsumerStage.java +++ b/src/main/java/teetime/framework/RunnableConsumerStage.java @@ -15,7 +15,7 @@ */ package teetime.framework; -import teetime.framework.exceptionHandling.AbstractStageExceptionHandler; +import teetime.framework.exceptionHandling.AbstractExceptionListener; import teetime.framework.idle.IdleStrategy; import teetime.framework.idle.YieldStrategy; import teetime.framework.signal.ISignal; @@ -32,11 +32,11 @@ final class RunnableConsumerStage extends AbstractRunnableStage { * @param stage * to execute within an own thread */ - public RunnableConsumerStage(final Stage stage, final AbstractStageExceptionHandler exceptionListener) { + public RunnableConsumerStage(final Stage stage, final AbstractExceptionListener exceptionListener) { this(stage, new YieldStrategy(), exceptionListener); } - public RunnableConsumerStage(final Stage stage, final IdleStrategy idleStrategy, final AbstractStageExceptionHandler exceptionListener) { + public RunnableConsumerStage(final Stage stage, final IdleStrategy idleStrategy, final AbstractExceptionListener exceptionListener) { super(stage, exceptionListener); this.inputPorts = stage.getInputPorts(); // FIXME should getInputPorts() really be defined in Stage? } diff --git a/src/main/java/teetime/framework/RunnableProducerStage.java b/src/main/java/teetime/framework/RunnableProducerStage.java index fc4c8a546bd17a7f08678da4001697dfe741661d..adda02b6221afe85751f114dbaa39433714a53e8 100644 --- a/src/main/java/teetime/framework/RunnableProducerStage.java +++ b/src/main/java/teetime/framework/RunnableProducerStage.java @@ -15,13 +15,13 @@ */ package teetime.framework; -import teetime.framework.exceptionHandling.AbstractStageExceptionHandler; +import teetime.framework.exceptionHandling.AbstractExceptionListener; import teetime.framework.signal.StartingSignal; import teetime.framework.signal.TerminatingSignal; public final class RunnableProducerStage extends AbstractRunnableStage { - public RunnableProducerStage(final Stage stage, final AbstractStageExceptionHandler listener) { + public RunnableProducerStage(final Stage stage, final AbstractExceptionListener listener) { super(stage, listener); } diff --git a/src/main/java/teetime/framework/exceptionHandling/AbstractStageExceptionHandler.java b/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java similarity index 91% rename from src/main/java/teetime/framework/exceptionHandling/AbstractStageExceptionHandler.java rename to src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java index eac052e88179d138f05c61cfc3b3008f2a84b676..990c58e9c7ff3ade3409103a0fdc437862e5c23d 100644 --- a/src/main/java/teetime/framework/exceptionHandling/AbstractStageExceptionHandler.java +++ b/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java @@ -9,7 +9,7 @@ import teetime.framework.Stage; * Represent a minimalistic StageExceptionListener. Listener which extend from this one, must a least implement this functionality. * This abstract class provides a Logger {@link #logger} and a method to terminate the threads execution {@link #terminateExecution()}. */ -public abstract class AbstractStageExceptionHandler { +public abstract class AbstractExceptionListener { public enum FurtherExecution { CONTINUE, TERMINATE @@ -20,7 +20,7 @@ public abstract class AbstractStageExceptionHandler { */ protected final Logger logger; - public AbstractStageExceptionHandler() { + public AbstractExceptionListener() { this.logger = LoggerFactory.getLogger(this.getClass().getCanonicalName()); } diff --git a/src/main/java/teetime/framework/exceptionHandling/IExceptionListenerFactory.java b/src/main/java/teetime/framework/exceptionHandling/IExceptionListenerFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..56e93d4fcfb3ddb9291d0cf65e04a36227132713 --- /dev/null +++ b/src/main/java/teetime/framework/exceptionHandling/IExceptionListenerFactory.java @@ -0,0 +1,7 @@ +package teetime.framework.exceptionHandling; + +public interface IExceptionListenerFactory { + + public AbstractExceptionListener newHandlerInstance(); + +} diff --git a/src/main/java/teetime/framework/exceptionHandling/IgnoringStageListener.java b/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java similarity index 67% rename from src/main/java/teetime/framework/exceptionHandling/IgnoringStageListener.java rename to src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java index a815fa2a27b29db549c7af746eb7ada2814cbc6d..f64d828ae15eeb143a85132eece8f3d5d471b97a 100644 --- a/src/main/java/teetime/framework/exceptionHandling/IgnoringStageListener.java +++ b/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java @@ -2,9 +2,9 @@ package teetime.framework.exceptionHandling; import teetime.framework.Stage; -public class IgnoringStageListener extends AbstractStageExceptionHandler { +public class IgnoringExceptionListener extends AbstractExceptionListener { - public IgnoringStageListener() { + public IgnoringExceptionListener() { super(); } diff --git a/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListenerFactory.java b/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListenerFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..9d3423b2daaeb6428c44f9ff5a7b1a73a2a793f7 --- /dev/null +++ b/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListenerFactory.java @@ -0,0 +1,10 @@ +package teetime.framework.exceptionHandling; + +public class IgnoringExceptionListenerFactory implements IExceptionListenerFactory { + + @Override + public AbstractExceptionListener newHandlerInstance() { + return new IgnoringExceptionListener(); + } + +} diff --git a/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListenerFactory.java b/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListenerFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..5bac663e1a36d04ec04b858664811274d8488972 --- /dev/null +++ b/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListenerFactory.java @@ -0,0 +1,10 @@ +package teetime.framework.exceptionHandling; + +public class LoggingExceptionListenerFactory implements IExceptionListenerFactory { + + @Override + public AbstractExceptionListener newHandlerInstance() { + return new LoggingExceptionListenerListener(); + } + +} diff --git a/src/main/java/teetime/framework/exceptionHandling/LoggingStageListener.java b/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListenerListener.java similarity index 77% rename from src/main/java/teetime/framework/exceptionHandling/LoggingStageListener.java rename to src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListenerListener.java index 8df9fc4517d9b3634f61e48622052ecb7320cbd5..2cdd03d5e79d13e3a0b7551df6abffd30f5f947e 100644 --- a/src/main/java/teetime/framework/exceptionHandling/LoggingStageListener.java +++ b/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListenerListener.java @@ -2,7 +2,7 @@ package teetime.framework.exceptionHandling; import teetime.framework.Stage; -public class LoggingStageListener extends AbstractStageExceptionHandler { +public class LoggingExceptionListenerListener extends AbstractExceptionListener { @Override public FurtherExecution onStageException(final Exception e, final Stage throwingStage) { diff --git a/src/main/java/teetime/framework/exceptionHandling/TerminatingStageListener.java b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java similarity index 78% rename from src/main/java/teetime/framework/exceptionHandling/TerminatingStageListener.java rename to src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java index 020e7fbe733b9b0b392f6ce0150bb82d40b10450..14a3f9d7d3dfd54d889b7cbf5d788e637c0f90d6 100644 --- a/src/main/java/teetime/framework/exceptionHandling/TerminatingStageListener.java +++ b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java @@ -2,7 +2,7 @@ package teetime.framework.exceptionHandling; import teetime.framework.Stage; -public class TerminatingStageListener extends AbstractStageExceptionHandler { +public class TerminatingExceptionListener extends AbstractExceptionListener { @Override public FurtherExecution onStageException(final Exception e, final Stage throwingStage) { diff --git a/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListenerFactory.java b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListenerFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..49822c174c99cf51489f1b7d60009cd366299c1c --- /dev/null +++ b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListenerFactory.java @@ -0,0 +1,10 @@ +package teetime.framework.exceptionHandling; + +public class TerminatingExceptionListenerFactory implements IExceptionListenerFactory { + + @Override + public AbstractExceptionListener newHandlerInstance() { + return new TerminatingExceptionListener(); + } + +} diff --git a/src/performancetest/java/teetime/examples/experiment09pipeimpls/MethodCallThroughputAnalysis9.java b/src/performancetest/java/teetime/examples/experiment09pipeimpls/MethodCallThroughputAnalysis9.java index 6bfaad61fd3e42735944034148b812d201a4bb52..43260a7b626a0cd66f0613f7380bb88f1bebdd7a 100644 --- a/src/performancetest/java/teetime/examples/experiment09pipeimpls/MethodCallThroughputAnalysis9.java +++ b/src/performancetest/java/teetime/examples/experiment09pipeimpls/MethodCallThroughputAnalysis9.java @@ -20,7 +20,7 @@ import java.util.List; import teetime.framework.OldHeadPipeline; import teetime.framework.RunnableProducerStage; import teetime.framework.Stage; -import teetime.framework.exceptionHandling.IgnoringStageListener; +import teetime.framework.exceptionHandling.IgnoringExceptionListener; import teetime.framework.pipe.IPipeFactory; import teetime.stage.CollectorSink; import teetime.stage.NoopFilter; @@ -45,7 +45,7 @@ public class MethodCallThroughputAnalysis9 { public void init(final IPipeFactory pipeFactory) { Stage pipeline = this.buildPipeline(pipeFactory); - this.runnable = new RunnableProducerStage(pipeline, new IgnoringStageListener()); + this.runnable = new RunnableProducerStage(pipeline, new IgnoringExceptionListener()); } /** diff --git a/src/performancetest/java/teetime/examples/experiment11/MethodCallThroughputAnalysis11.java b/src/performancetest/java/teetime/examples/experiment11/MethodCallThroughputAnalysis11.java index 1c14ea89a79b581d8dcceb8ae78780f42ab6ee2d..60926b61e0373e81e73a94ec6a58627959b30099 100644 --- a/src/performancetest/java/teetime/examples/experiment11/MethodCallThroughputAnalysis11.java +++ b/src/performancetest/java/teetime/examples/experiment11/MethodCallThroughputAnalysis11.java @@ -20,7 +20,7 @@ import java.util.List; import teetime.framework.OldHeadPipeline; import teetime.framework.RunnableProducerStage; import teetime.framework.Stage; -import teetime.framework.exceptionHandling.IgnoringStageListener; +import teetime.framework.exceptionHandling.IgnoringExceptionListener; import teetime.framework.pipe.UnorderedGrowablePipe; import teetime.stage.CollectorSink; import teetime.stage.NoopFilter; @@ -45,7 +45,7 @@ public class MethodCallThroughputAnalysis11 { public void init() { Stage pipeline = this.buildPipeline(this.numInputObjects, this.inputObjectCreator); - this.runnable = new RunnableProducerStage(pipeline, new IgnoringStageListener()); + this.runnable = new RunnableProducerStage(pipeline, new IgnoringExceptionListener()); } private OldHeadPipeline<ObjectProducer<TimestampObject>, CollectorSink<TimestampObject>> buildPipeline(final long numInputObjects, diff --git a/src/performancetest/java/teetime/examples/experiment15/MethodCallThroughputAnalysis15.java b/src/performancetest/java/teetime/examples/experiment15/MethodCallThroughputAnalysis15.java index e276da60d99e09e7cf2cb92b0cf9382f1afb0e94..2182aa24d83375dcdcc296d601b94d9398da060c 100644 --- a/src/performancetest/java/teetime/examples/experiment15/MethodCallThroughputAnalysis15.java +++ b/src/performancetest/java/teetime/examples/experiment15/MethodCallThroughputAnalysis15.java @@ -21,7 +21,7 @@ import teetime.framework.AnalysisConfiguration; import teetime.framework.OldHeadPipeline; import teetime.framework.RunnableProducerStage; import teetime.framework.Stage; -import teetime.framework.exceptionHandling.IgnoringStageListener; +import teetime.framework.exceptionHandling.IgnoringExceptionListener; import teetime.framework.pipe.IPipeFactory; import teetime.framework.pipe.OrderedGrowableArrayPipe; import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; @@ -65,10 +65,10 @@ public class MethodCallThroughputAnalysis15 extends AnalysisConfiguration { public void init() { OldHeadPipeline<Clock, Sink<Long>> clockPipeline = this.buildClockPipeline(); - this.clockRunnable = new RunnableProducerStage(clockPipeline, new IgnoringStageListener()); + this.clockRunnable = new RunnableProducerStage(clockPipeline, new IgnoringExceptionListener()); Stage pipeline = this.buildPipeline(this.clock); - this.runnable = new RunnableProducerStage(pipeline, new IgnoringStageListener()); + this.runnable = new RunnableProducerStage(pipeline, new IgnoringExceptionListener()); } private OldHeadPipeline<Clock, Sink<Long>> buildClockPipeline() { diff --git a/src/test/java/teetime/framework/ExceptionHandling.java b/src/test/java/teetime/framework/exceptionHandling/ExceptionHandling.java similarity index 73% rename from src/test/java/teetime/framework/ExceptionHandling.java rename to src/test/java/teetime/framework/exceptionHandling/ExceptionHandling.java index 8e4681cb92fbae0de11fa139a9f765fb9413ec87..a13865c804155cf9e5631e66ce7a912a0a4b9af8 100644 --- a/src/test/java/teetime/framework/ExceptionHandling.java +++ b/src/test/java/teetime/framework/exceptionHandling/ExceptionHandling.java @@ -1,4 +1,4 @@ -package teetime.framework; +package teetime.framework.exceptionHandling; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -6,17 +6,15 @@ import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; -import teetime.framework.exceptionHandling.TestListener; +import teetime.framework.Analysis; public class ExceptionHandling { - private Class<TestListener> listener; private Analysis analysis; @Before public void newInstances() { - listener = TestListener.class; - analysis = new Analysis(new ExceptionTestConfiguration(), listener); + analysis = new Analysis(new ExceptionTestConfiguration(), new TestListenerFactory()); } @Test(timeout = 5000, expected = RuntimeException.class) diff --git a/src/test/java/teetime/framework/ExceptionTestConfiguration.java b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestConfiguration.java similarity index 89% rename from src/test/java/teetime/framework/ExceptionTestConfiguration.java rename to src/test/java/teetime/framework/exceptionHandling/ExceptionTestConfiguration.java index f7f2a76cafcba26e6c2432239ff619489a4225ea..64a742a2eb647f66b148840a59e78c6b58163dce 100644 --- a/src/test/java/teetime/framework/ExceptionTestConfiguration.java +++ b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestConfiguration.java @@ -1,5 +1,6 @@ -package teetime.framework; +package teetime.framework.exceptionHandling; +import teetime.framework.AnalysisConfiguration; import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; diff --git a/src/test/java/teetime/framework/ExceptionTestConsumerStage.java b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestConsumerStage.java similarity index 76% rename from src/test/java/teetime/framework/ExceptionTestConsumerStage.java rename to src/test/java/teetime/framework/exceptionHandling/ExceptionTestConsumerStage.java index 034055fd542931281bee1e4edeff571cb385b487..05f84fde0ce726b746f552bccbc3d6250bf04af5 100644 --- a/src/test/java/teetime/framework/ExceptionTestConsumerStage.java +++ b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestConsumerStage.java @@ -1,4 +1,6 @@ -package teetime.framework; +package teetime.framework.exceptionHandling; + +import teetime.framework.AbstractConsumerStage; public class ExceptionTestConsumerStage extends AbstractConsumerStage<Object> { diff --git a/src/test/java/teetime/framework/ExceptionTestProducerStage.java b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestProducerStage.java similarity index 82% rename from src/test/java/teetime/framework/ExceptionTestProducerStage.java rename to src/test/java/teetime/framework/exceptionHandling/ExceptionTestProducerStage.java index 02c0a086cce5b085e7459efe1157b1df859d5aa8..637143ed57e3762f258524d922b15f896ac5b823 100644 --- a/src/test/java/teetime/framework/ExceptionTestProducerStage.java +++ b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestProducerStage.java @@ -1,4 +1,8 @@ -package teetime.framework; +package teetime.framework.exceptionHandling; + +import teetime.framework.AbstractProducerStage; +import teetime.framework.InputPort; +import teetime.framework.TerminationStrategy; public class ExceptionTestProducerStage extends AbstractProducerStage<Object> { diff --git a/src/test/java/teetime/framework/exceptionHandling/TestListener.java b/src/test/java/teetime/framework/exceptionHandling/TestListener.java index 809fbd5f727048a9da3583c9bc4830a26c8b2b79..9638e84d8d914488ef82a9dde95ffd51a4d96f72 100644 --- a/src/test/java/teetime/framework/exceptionHandling/TestListener.java +++ b/src/test/java/teetime/framework/exceptionHandling/TestListener.java @@ -2,7 +2,7 @@ package teetime.framework.exceptionHandling; import teetime.framework.Stage; -public class TestListener extends AbstractStageExceptionHandler { +public class TestListener extends AbstractExceptionListener { public static int exceptionInvoked = 0; diff --git a/src/test/java/teetime/framework/exceptionHandling/TestListenerFactory.java b/src/test/java/teetime/framework/exceptionHandling/TestListenerFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..ae3785d92642edc04e3b792873f498f5960a5502 --- /dev/null +++ b/src/test/java/teetime/framework/exceptionHandling/TestListenerFactory.java @@ -0,0 +1,10 @@ +package teetime.framework.exceptionHandling; + +public class TestListenerFactory implements IExceptionListenerFactory { + + @Override + public AbstractExceptionListener newHandlerInstance() { + return new TestListener(); + } + +}