diff options
author | Decebal Suiu <decebal.suiu@gmail.com> | 2019-04-19 13:50:15 +0300 |
---|---|---|
committer | Decebal Suiu <decebal.suiu@gmail.com> | 2019-04-19 13:50:15 +0300 |
commit | e708f0713cd86060b79e9ee37bde646c89675e20 (patch) | |
tree | 9c0b1b12ebdaeb86325c1312bbd29dfaa22245c2 | |
parent | c3843893afd4afcf32a4fa47a4dd0e5068293d27 (diff) | |
download | pf4j-async.tar.gz pf4j-async.zip |
Returns CompletionStage instead of CompletableFuture in Async APIasync
-rw-r--r-- | demo/app/src/main/java/org/pf4j/demo/Boot.java | 12 | ||||
-rw-r--r-- | pf4j/src/main/java/org/pf4j/AsyncPluginManager.java | 6 | ||||
-rw-r--r-- | pf4j/src/main/java/org/pf4j/DefaultAsyncPluginManager.java | 9 |
3 files changed, 14 insertions, 13 deletions
diff --git a/demo/app/src/main/java/org/pf4j/demo/Boot.java b/demo/app/src/main/java/org/pf4j/demo/Boot.java index c4ddc3f..904b32f 100644 --- a/demo/app/src/main/java/org/pf4j/demo/Boot.java +++ b/demo/app/src/main/java/org/pf4j/demo/Boot.java @@ -27,7 +27,7 @@ import org.pf4j.demo.api.Greeting; import java.util.List; import java.util.Set; -import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; /** * A boot class that start the demo. @@ -55,19 +55,19 @@ public class Boot { // load the plugins // pluginManager.loadPlugins(); - CompletableFuture<Void> feature = pluginManager.loadPluginsAsync(); - feature.thenRun(() -> System.out.println("Plugins loaded")); + CompletionStage<Void> stage = pluginManager.loadPluginsAsync(); + stage.thenRun(() -> System.out.println("Plugins loaded")); // enable a disabled plugin // pluginManager.enablePlugin("welcome-plugin"); // start (active/resolved) the plugins // pluginManager.startPlugins(); - feature.thenCompose(v -> pluginManager.startPluginsAsync()); - feature.thenRun(() -> System.out.println("Plugins started")); + stage.thenCompose(v -> pluginManager.startPluginsAsync()); + stage.thenRun(() -> System.out.println("Plugins started")); // block and wait for the future to complete (not the best approach in real applications) - feature.get(); + stage.toCompletableFuture().get(); // retrieves the extensions for Greeting extension point List<Greeting> greetings = pluginManager.getExtensions(Greeting.class); diff --git a/pf4j/src/main/java/org/pf4j/AsyncPluginManager.java b/pf4j/src/main/java/org/pf4j/AsyncPluginManager.java index 5f3c12b..d1195d6 100644 --- a/pf4j/src/main/java/org/pf4j/AsyncPluginManager.java +++ b/pf4j/src/main/java/org/pf4j/AsyncPluginManager.java @@ -15,7 +15,7 @@ */ package org.pf4j; -import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; /** * A {@link PluginManager} that supports asynchronous operation with the methods ending in {@code Async}. @@ -24,8 +24,8 @@ import java.util.concurrent.CompletableFuture; */ public interface AsyncPluginManager extends PluginManager { - CompletableFuture<Void> loadPluginsAsync(); + CompletionStage<Void> loadPluginsAsync(); - CompletableFuture<Void> startPluginsAsync(); + CompletionStage<Void> startPluginsAsync(); } diff --git a/pf4j/src/main/java/org/pf4j/DefaultAsyncPluginManager.java b/pf4j/src/main/java/org/pf4j/DefaultAsyncPluginManager.java index 35d3d9a..ecbc3ff 100644 --- a/pf4j/src/main/java/org/pf4j/DefaultAsyncPluginManager.java +++ b/pf4j/src/main/java/org/pf4j/DefaultAsyncPluginManager.java @@ -23,6 +23,7 @@ import java.nio.file.Path; import java.util.List; import java.util.Objects; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; /** * An extension of {@link DefaultPluginManager} that supports asynchronous methods (@{AsyncPluginManager}). @@ -34,7 +35,7 @@ public class DefaultAsyncPluginManager extends DefaultPluginManager implements A private static final Logger log = LoggerFactory.getLogger(DefaultAsyncPluginManager.class); @Override - public CompletableFuture<Void> loadPluginsAsync() { + public CompletionStage<Void> loadPluginsAsync() { Path pluginsRoot = getPluginsRoot(); PluginRepository pluginRepository = getPluginRepository(); @@ -75,7 +76,7 @@ public class DefaultAsyncPluginManager extends DefaultPluginManager implements A } @Override - public CompletableFuture<Void> startPluginsAsync() { + public CompletionStage<Void> startPluginsAsync() { /* // chain start plugins one after another CompletableFuture<Void> feature = CompletableFuture.completedFuture(null); @@ -91,7 +92,7 @@ public class DefaultAsyncPluginManager extends DefaultPluginManager implements A .toArray(CompletableFuture[]::new)); } - protected CompletableFuture<PluginWrapper> loadPluginFromPathAsync(Path pluginPath) { + protected CompletionStage<PluginWrapper> loadPluginFromPathAsync(Path pluginPath) { return CompletableFuture.supplyAsync(() -> { try { return loadPluginFromPath(pluginPath); @@ -102,7 +103,7 @@ public class DefaultAsyncPluginManager extends DefaultPluginManager implements A }); } - protected CompletableFuture<Void> startPluginAsync(PluginWrapper pluginWrapper) { + protected CompletionStage<Void> startPluginAsync(PluginWrapper pluginWrapper) { return CompletableFuture.runAsync(() -> { PluginState pluginState = pluginWrapper.getPluginState(); if ((PluginState.DISABLED != pluginState) && (PluginState.STARTED != pluginState)) { |