You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/03/01 15:05:00 UTC
[isis] branch master updated: ISIS-1841 allow eventbus plugins to
be automatically installed
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 30cfa00 ISIS-1841 allow eventbus plugins to be automatically installed
30cfa00 is described below
commit 30cfa0020f5e109621bb3521a3297892a8056082
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Mar 1 16:04:57 2018 +0100
ISIS-1841 allow eventbus plugins to be automatically installed
by setting
org.apache.isis.applib.services.eventbus.EventBusImplementation
to 'auto' or 'plugin', while retaining previous behavior
---
.../isis/applib/internal/context/_Plugin.java | 19 +++++++++++++++++-
.../isis/applib/internal/discover/_Discover.java | 23 +++++++++++-----------
.../swagger/internal/ValuePropertyFactory.java | 2 +-
.../dflt/ProgrammingModelFacetsJava5.java | 2 +-
...applib.services.eventbus.EventBusImplementation | 1 +
...applib.services.eventbus.EventBusImplementation | 1 +
.../services/eventbus/EventBusServiceDefault.java | 22 +++++++++++++++++----
7 files changed, 51 insertions(+), 19 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/internal/context/_Plugin.java b/core/applib/src/main/java/org/apache/isis/applib/internal/context/_Plugin.java
index 5f9a043..a18c5f7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/internal/context/_Plugin.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/internal/context/_Plugin.java
@@ -22,6 +22,8 @@ package org.apache.isis.applib.internal.context;
import java.util.Objects;
import java.util.ServiceLoader;
import java.util.Set;
+import java.util.function.Function;
+import java.util.function.Supplier;
import org.apache.isis.applib.internal.collections._Sets;
@@ -56,7 +58,7 @@ public final class _Plugin {
* @param service
* @return non null
*/
- public static <S> Set<S> load(Class<S> service){
+ public static <S> Set<S> loadAll(Class<S> service){
Objects.requireNonNull(service);
ServiceLoader<S> loader = ServiceLoader.load(service, _Context.getDefaultClassLoader());
@@ -64,4 +66,19 @@ public final class _Plugin {
return _Sets.unmodifiable(loader);
}
+ public static <S> S getOrElse(Class<S> service, Function<Set<S>, S> onAmbiguity, Supplier<S> onNotFound){
+
+ final Set<S> plugins = loadAll(service);
+
+ if(plugins.isEmpty()) {
+ return onNotFound.get();
+ }
+
+ if(plugins.size()>1) {
+ return onAmbiguity.apply(plugins);
+ }
+
+ return plugins.iterator().next();
+ }
+
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/internal/discover/_Discover.java b/core/applib/src/main/java/org/apache/isis/applib/internal/discover/_Discover.java
index 19730b0..c602c1c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/internal/discover/_Discover.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/internal/discover/_Discover.java
@@ -20,7 +20,6 @@
package org.apache.isis.applib.internal.discover;
import java.util.List;
-import java.util.Set;
import org.apache.isis.applib.internal.context._Context;
import org.apache.isis.applib.internal.context._Plugin;
@@ -68,18 +67,18 @@ public final class _Discover {
}
private static ClassDiscoveryPlugin loadPluginsPickAny() {
- final Set<ClassDiscoveryPlugin> plugins = _Plugin.load(ClassDiscoveryPlugin.class);
- if(plugins.isEmpty()) {
- return ClassDiscoveryPlugin.nop();
- }
-
- if(plugins.size()>1) {
- final Logger LOG = LoggerFactory.getLogger(ClassDiscoveryPlugin.class);
- LOG.warn("you have more than one ClassDiscoveryPlugin on your class path, just picking one");
- }
-
- return plugins.iterator().next();
+ return _Plugin.getOrElse(ClassDiscoveryPlugin.class,
+ ambiguosPlugins->{
+ final Logger LOG = LoggerFactory.getLogger(ClassDiscoveryPlugin.class);
+ LOG.warn("You have more than one ClassDiscoveryPlugin on your class path, just picking one!");
+ return ambiguosPlugins.iterator().next();
+ },
+ ()->{
+ final Logger LOG = LoggerFactory.getLogger(ClassDiscoveryPlugin.class);
+ LOG.error("You have no ClassDiscoveryPlugin on your class path!");
+ return ClassDiscoveryPlugin.nop();
+ });
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/internal/ValuePropertyFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/internal/ValuePropertyFactory.java
index e76fd93..f260eed 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/internal/ValuePropertyFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/internal/ValuePropertyFactory.java
@@ -137,7 +137,7 @@ public class ValuePropertyFactory {
// -- HELPER
private static ValuePropertyCollector discoverValueProperties() {
- final Set<ValuePropertyPlugin> plugins = _Plugin.load(ValuePropertyPlugin.class);
+ final Set<ValuePropertyPlugin> plugins = _Plugin.loadAll(ValuePropertyPlugin.class);
final ValuePropertyCollector collector = ValuePropertyPlugin.collector();
plugins.forEach(plugin->{
plugin.plugin(collector);
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 57f3760..88ae176 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -437,7 +437,7 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
// -- HELPER
private static FactoryCollector discoverFactories() {
- final Set<ProgrammingModelPlugin> plugins = _Plugin.load(ProgrammingModelPlugin.class);
+ final Set<ProgrammingModelPlugin> plugins = _Plugin.loadAll(ProgrammingModelPlugin.class);
final FactoryCollector collector = ProgrammingModelPlugin.collector();
plugins.forEach(plugin->{
plugin.plugin(collector);
diff --git a/core/plugins/eventbus-axon/src/main/resources/META-INF/services/org.apache.isis.applib.services.eventbus.EventBusImplementation b/core/plugins/eventbus-axon/src/main/resources/META-INF/services/org.apache.isis.applib.services.eventbus.EventBusImplementation
new file mode 100644
index 0000000..4a07d72
--- /dev/null
+++ b/core/plugins/eventbus-axon/src/main/resources/META-INF/services/org.apache.isis.applib.services.eventbus.EventBusImplementation
@@ -0,0 +1 @@
+org.apache.isis.core.runtime.services.eventbus.adapter.EventBusImplementationForAxonSimple
\ No newline at end of file
diff --git a/core/plugins/eventbus-guava/src/main/resources/META-INF/services/org.apache.isis.applib.services.eventbus.EventBusImplementation b/core/plugins/eventbus-guava/src/main/resources/META-INF/services/org.apache.isis.applib.services.eventbus.EventBusImplementation
new file mode 100644
index 0000000..1aaefda
--- /dev/null
+++ b/core/plugins/eventbus-guava/src/main/resources/META-INF/services/org.apache.isis.applib.services.eventbus.EventBusImplementation
@@ -0,0 +1 @@
+org.apache.isis.core.runtime.services.eventbus.adapter.EventBusImplementationForGuava
\ No newline at end of file
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
index a7e662a..848e964 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
@@ -23,6 +23,7 @@ import javax.enterprise.context.RequestScoped;
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.context._Plugin;
import org.apache.isis.applib.services.eventbus.EventBusImplementation;
import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.applib.services.registry.ServiceRegistry;
@@ -124,13 +125,26 @@ public abstract class EventBusServiceDefault extends EventBusService {
}
private EventBusImplementation instantiateEventBus() {
+
String fqImplementationName = implementation;
- if("guava".equals(implementation)) {
+
+ if( "plugin".equalsIgnoreCase(implementation) || "auto".equalsIgnoreCase(implementation) ) {
+
+ return _Plugin.getOrElse(EventBusImplementation.class,
+ ambiguousPlugins->{
+ throw new NonRecoverableException(
+ "Ambiguity: Could not instantiate event bus implementation '" + implementation + "'");
+ }, ()->{
+ throw new NonRecoverableException(
+ "Missing Plugin: Could not instantiate event bus implementation '" + implementation + "'");
+ });
+
+ } else if("guava".equalsIgnoreCase(implementation)) {
// legacy of return new EventBusImplementationForGuava();
- fqImplementationName = "org.apache.isis.core.runtime.services.eventbus.EventBusImplementationForGuava";
- } else if("axon".equals(implementation)) {
+ fqImplementationName = "org.apache.isis.core.runtime.services.eventbus.adapter.EventBusImplementationForGuava";
+ } else if("axon".equalsIgnoreCase(implementation)) {
// legacy of return new EventBusImplementationForAxonSimple();
- fqImplementationName = "org.apache.isis.core.runtime.services.eventbus.EventBusImplementationForAxonSimple";
+ fqImplementationName = "org.apache.isis.core.runtime.services.eventbus.adapter.EventBusImplementationForAxonSimple";
}
final Class<?> aClass = ClassUtil.forName(fqImplementationName);
--
To stop receiving notification emails like this one, please contact
ahuber@apache.org.