TOMEE-2301 - Scheduler executor and exception handling examples. Signed-off-by: brunobat <[email protected]>
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/934814e3 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/934814e3 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/934814e3 Branch: refs/heads/master Commit: 934814e368b0f566c30b67168724ab611e0b97b2 Parents: fe7bc8f Author: brunobat <[email protected]> Authored: Tue Dec 4 11:04:32 2018 +0000 Committer: brunobat <[email protected]> Committed: Wed Dec 5 15:27:04 2018 +0000 ---------------------------------------------------------------------- .../executor/ManagedScheduledService.java | 9 ++-- .../executor/ManagedScheduledServiceTest.java | 52 ++++++++++++++++++-- 2 files changed, 54 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/934814e3/examples/concurrency-utils/src/main/java/org/superbiz/executor/ManagedScheduledService.java ---------------------------------------------------------------------- diff --git a/examples/concurrency-utils/src/main/java/org/superbiz/executor/ManagedScheduledService.java b/examples/concurrency-utils/src/main/java/org/superbiz/executor/ManagedScheduledService.java index 1032f51..07760a3 100644 --- a/examples/concurrency-utils/src/main/java/org/superbiz/executor/ManagedScheduledService.java +++ b/examples/concurrency-utils/src/main/java/org/superbiz/executor/ManagedScheduledService.java @@ -34,13 +34,14 @@ public class ManagedScheduledService { @Resource private ManagedScheduledExecutorService executor; - public Future<Integer> singleFixedDelayTask(final int value) { + public Future<Integer> singleFixedDelayTask(final int value, final String errorMessage) { System.out.println("longCallableTask scheduled"); - return executor.schedule(longCallableTask(value, 10, null), 100, TimeUnit.MILLISECONDS); + return executor.schedule(longCallableTask(value, 10, errorMessage), 100, TimeUnit.MILLISECONDS); } - public ScheduledFuture<?> periodicFixedDelayTask(final int value) { - return executor.scheduleAtFixedRate(longRunnableTask(value, 10, null), 0, 100, TimeUnit.MILLISECONDS); + public ScheduledFuture<?> periodicFixedDelayTask(final int value, final String errorMessage) { + System.out.println("longRunnableTask scheduled"); + return executor.scheduleAtFixedRate(longRunnableTask(value, 10, errorMessage), 0, 100, TimeUnit.MILLISECONDS); } private Runnable longRunnableTask(final int value, http://git-wip-us.apache.org/repos/asf/tomee/blob/934814e3/examples/concurrency-utils/src/test/java/org/superbiz/executor/ManagedScheduledServiceTest.java ---------------------------------------------------------------------- diff --git a/examples/concurrency-utils/src/test/java/org/superbiz/executor/ManagedScheduledServiceTest.java b/examples/concurrency-utils/src/test/java/org/superbiz/executor/ManagedScheduledServiceTest.java index b4e3807..4baf428 100644 --- a/examples/concurrency-utils/src/test/java/org/superbiz/executor/ManagedScheduledServiceTest.java +++ b/examples/concurrency-utils/src/test/java/org/superbiz/executor/ManagedScheduledServiceTest.java @@ -27,10 +27,12 @@ import org.junit.runner.RunWith; import javax.inject.Inject; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; @RunWith(Arquillian.class) public class ManagedScheduledServiceTest { @@ -48,12 +50,56 @@ public class ManagedScheduledServiceTest { @Test public void singleFixedDelayTask() throws InterruptedException, ExecutionException, TimeoutException { - final Future<Integer> future = scheduledService.singleFixedDelayTask(1); - assertEquals(2, future.get(200, TimeUnit.MILLISECONDS).intValue()); + final Future<Integer> futureA = scheduledService.singleFixedDelayTask(1, null); + final Future<Integer> futureB = scheduledService.singleFixedDelayTask(50, null); + System.out.println("Do some other work while we wait for the tasks"); + assertEquals(2, futureA.get(200, TimeUnit.MILLISECONDS).intValue()); + assertEquals(51, futureB.get(200, TimeUnit.MILLISECONDS).intValue()); } @Test - public void periodicFixedDelayTask() { + public void periodicFixedDelayTask() throws InterruptedException, TimeoutException, ExecutionException { + final ScheduledFuture<?> scheduledFuture = scheduledService.periodicFixedDelayTask(1, null); + TimeUnit.MILLISECONDS.sleep(500); + if (!scheduledFuture.isCancelled()) { + scheduledFuture.cancel(true); + System.out.println("task stopped"); + } } + + + @Test + public void singleFixedDelayTaskWithException() throws InterruptedException, ExecutionException, TimeoutException { + final Future<Integer> future = scheduledService.singleFixedDelayTask(1, "Planned exception"); + try { + future.get(200, TimeUnit.MILLISECONDS); + } catch (ExecutionException e) { + // the thrown RuntimeException will be wrapped around an ExecutionException + assertEquals("Planned exception", e.getCause().getMessage()); + } catch (Exception e) { + fail("Unexpected exception" + e); + } + } + + @Test + public void periodicFixedDelayTaskWithException() throws InterruptedException { + final ScheduledFuture<?> scheduledFuture = scheduledService.periodicFixedDelayTask(1, "Planned exception"); + TimeUnit.MILLISECONDS.sleep(500); + + try { + scheduledFuture.get(200, TimeUnit.MILLISECONDS); + } catch (ExecutionException e) { + // the thrown RuntimeException will be wrapped around an ExecutionException + assertEquals("Planned exception", e.getCause().getMessage()); + } catch (Exception e) { + fail("Unexpected exception" + e); + } + + if (!scheduledFuture.isCancelled()) { + scheduledFuture.cancel(true); + System.out.println("task stopped"); + } + } + } \ No newline at end of file
