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/11/30 09:22:14 UTC
[isis] branch v2 updated: ISIS-2039: allows for AppConfig to be
managed by CDI if available
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/v2 by this push:
new c57e3fa ISIS-2039: allows for AppConfig to be managed by CDI if available
c57e3fa is described below
commit c57e3faeff95f135ad07d97c20c2b9a5a46ee203
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Nov 30 10:22:08 2018 +0100
ISIS-2039: allows for AppConfig to be managed by CDI if available
also updates helloworld, to showcase this
Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
---
.../isis/applib/ModuleOrBuilderAbstract.java | 5 ++-
.../org/apache/isis/config/AppConfigLocator.java | 49 +++++++++++++++++++---
.../apache/isis/applib/DomainObjectContainer.java | 8 ++--
.../isis/core/runtime/headless/IsisSystem.java | 5 +--
.../runtime/headless/IsisSystemBootstrapper.java | 1 +
.../application/HelloWorldAppManifest.java | 5 ++-
6 files changed, 56 insertions(+), 17 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java
index 6aff7cc..28d6de2 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java
@@ -20,6 +20,7 @@ package org.apache.isis.applib;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -86,7 +87,7 @@ abstract class ModuleOrBuilderAbstract<B extends ModuleOrBuilderAbstract<B>> {
return withAdditionalModules(Arrays.asList(modules));
}
- public B withAdditionalModules(final List<Class<?>> modules) {
+ public B withAdditionalModules(final Collection<Class<?>> modules) {
if(modules == null) {
return self();
}
@@ -98,7 +99,7 @@ abstract class ModuleOrBuilderAbstract<B extends ModuleOrBuilderAbstract<B>> {
return withAdditionalServices(Arrays.asList(additionalServices));
}
- public B withAdditionalServices(final List<Class<?>> additionalServices) {
+ public B withAdditionalServices(final Collection<Class<?>> additionalServices) {
if(additionalServices == null) {
return self();
}
diff --git a/core/config/src/main/java/org/apache/isis/config/AppConfigLocator.java b/core/config/src/main/java/org/apache/isis/config/AppConfigLocator.java
index 3127094..74e962d 100644
--- a/core/config/src/main/java/org/apache/isis/config/AppConfigLocator.java
+++ b/core/config/src/main/java/org/apache/isis/config/AppConfigLocator.java
@@ -1,5 +1,7 @@
package org.apache.isis.config;
+import javax.enterprise.inject.spi.CDI;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -23,15 +25,50 @@ public final class AppConfigLocator {
// -- HELPER
private static AppConfig lookupAppConfig() {
+
+ AppConfig appConfig;
+
+ appConfig = lookupAppConfig_UsingCDI();
+ if(appConfig!=null) {
+ LOG.info(String.format("Located AppConfig '%s' via CDI.", appConfig.getClass().getName()));
+ return appConfig;
+ }
+
+ appConfig = lookupAppConfig_UsingServiceLoader();
+ if(appConfig!=null) {
+ LOG.info(String.format("Located AppConfig '%s' via ServiceLoader.", appConfig.getClass().getName()));
+ return appConfig;
+ }
+
+ appConfig = lookupAppConfig_UsingConfigProperties();
+ if(appConfig!=null) {
+ LOG.info(String.format("Located AppConfig '%s' using config properties.", appConfig.getClass().getName()));
+ return appConfig;
+ }
+
+ throw new IsisException("Failed to locate the AppManifest");
+ }
+
+ private static AppConfig lookupAppConfig_UsingCDI() {
+ try {
+ final CDI<Object> cdi = CDI.current();
+ if(cdi==null) {
+ return null;
+ }
+ return cdi.select(AppConfig.class).get();
+ } catch (Exception e) {
+ // ignore
+ }
+ return null;
+ }
+
+ private static AppConfig lookupAppConfig_UsingServiceLoader() {
+
return _Plugin.getOrElse(AppConfig.class,
ambiguousPlugins->{
throw _Plugin.ambiguityNonRecoverable(AppConfig.class, ambiguousPlugins);
},
- ()->{
- LOG.warn("Failed to locate AppConfig via ServiceLoader, falling back to "
- + "search utilizing config properties.");
- return lookupAppConfig_UsingConfigProperties();
- });
+ ()->null);
}
// to support pre 2.0.0-M2 behavior
@@ -60,5 +97,7 @@ public final class AppConfigLocator {
}
+
+
}
diff --git a/core/legacy/transition-1-2/src/main/java/org/apache/isis/applib/DomainObjectContainer.java b/core/legacy/transition-1-2/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
index 7974b76..1c24fb7 100644
--- a/core/legacy/transition-1-2/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
+++ b/core/legacy/transition-1-2/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
@@ -44,7 +44,7 @@ import org.apache.isis.applib.services.title.TitleService;
import org.apache.isis.applib.services.user.UserService;
import org.apache.isis.applib.services.xactn.TransactionService;
import org.apache.isis.config.IsisConfiguration;
-import org.apache.isis.config.internal._Config;
+import org.apache.isis.core.runtime.system.context.IsisContext;
import static org.apache.isis.commons.internal.collections._Lists.lastElementIfAny;
@@ -420,7 +420,7 @@ public class DomainObjectContainer {
@Deprecated
@Programmatic
public String getProperty(String name) {
- return _Config.getConfiguration().getString(name);
+ return IsisContext.getConfiguration().getString(name);
}
/**
@@ -429,7 +429,7 @@ public class DomainObjectContainer {
@Deprecated
@Programmatic
public String getProperty(String name, String defaultValue) {
- return _Config.getConfiguration().getString(name, defaultValue);
+ return IsisContext.getConfiguration().getString(name, defaultValue);
}
/**
@@ -438,7 +438,7 @@ public class DomainObjectContainer {
@Deprecated
@Programmatic
public List<String> getPropertyNames() {
- return new ArrayList<>(_Config.getConfiguration().asMap().keySet());
+ return new ArrayList<>(IsisContext.getConfiguration().asMap().keySet());
}
/**
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java
index 320a0f1..243609d 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java
@@ -93,9 +93,6 @@ public final class IsisSystem {
// -- setup (also componentProvider)
- // populated at #setupSystem
- protected IsisComponentProvider componentProvider;
-
IsisSystem setUpSystem() throws RuntimeException {
try {
initIfRequiredThenOpenSession();
@@ -119,7 +116,7 @@ public final class IsisSystem {
boolean firstTime = isisSessionFactory == null;
if(firstTime) {
- componentProvider = IsisComponentProvider.builder(appManifest)
+ final IsisComponentProvider componentProvider = IsisComponentProvider.builder(appManifest)
.build();
//[2039] environment priming removed
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
index 61ac537..fc93242 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
@@ -33,6 +33,7 @@ import org.apache.isis.applib.fixturescripts.FixtureScripts;
import org.apache.isis.applib.services.jdosupport.IsisJdoSupport;
import org.apache.isis.applib.services.metamodel.MetaModelService;
import org.apache.isis.applib.services.registry.ServiceRegistry;
+import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.core.commons.ensure.Ensure;
import org.apache.isis.core.runtime.headless.logging.LeveledLogger;
diff --git a/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java b/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java
index 58aca18..489ad92 100644
--- a/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java
+++ b/example/application/helloworld/src/main/java/domainapp/application/HelloWorldAppManifest.java
@@ -27,6 +27,7 @@ import domainapp.dom.HelloWorldModule;
/**
* Bootstrap the application.
*/
+@javax.ejb.Singleton // only if you want AppConfig to be managed by CDI (if available), otherwise not required
public class HelloWorldAppManifest extends AppManifestAbstract2 implements AppConfig {
public static final Builder BUILDER = Builder
@@ -38,10 +39,10 @@ public class HelloWorldAppManifest extends AppManifestAbstract2 implements AppCo
super(BUILDER);
}
- // Tells the ServiceLoader which AppManifest to use to bootstrap the IsisConfiguration.
+ // Implementing AppConfig, to tell the framework how to bootstrap the configuration.
@Override
public IsisConfiguration isisConfiguration () {
- return IsisConfiguration.buildFromAppManifest(new HelloWorldAppManifest());
+ return IsisConfiguration.buildFromAppManifest(this);
}
}