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

Reply via email to