You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2016/05/27 00:29:12 UTC
[3/7] isis git commit: ISIS-1416: new configuration properties to
enable/disable inject...() and set...() style injection.
ISIS-1416: new configuration properties to enable/disable inject...() and set...() style injection.
Also updates to docs and migration notes.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/ba74043c
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/ba74043c
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/ba74043c
Branch: refs/heads/master
Commit: ba74043c5c055acbac349aad37627f2a18de7987
Parents: 90b6666
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu May 26 23:15:55 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu May 26 23:15:55 2016 +0100
----------------------------------------------------------------------
.../_migration-notes_1.12.0-to-1.13.0.adoc | 19 +++-
.../guides/_rgcfg_configuring-core.adoc | 20 ++++
.../isis/applib/AbstractContainedObject.java | 6 +-
.../metamodel/services/ServicesInjector.java | 112 +++++++------------
.../defaults/DefaultedFacetFactoryTest.java | 13 +--
.../encodable/EncodableFacetFactoryTest.java | 17 ++-
.../services/ServicesInjectorDefaultTest.java | 4 +-
...ServicesInjectorDefaultTest_usingFields.java | 4 +-
...cesInjectorDefaultTest_validateServices.java | 8 +-
.../SpecificationLoaderTestAbstract.java | 6 +-
.../testspec/ObjectSpecificationStub.java | 6 +-
.../isis/core/runtime/system/IsisSystem.java | 2 +-
.../IsisComponentProvider.java | 6 +-
.../ObjectActionLayoutXmlDefaultTest.java | 6 +-
.../system/ObjectMemberAbstractTest.java | 7 +-
.../system/OneToManyAssociationDefaultTest.java | 5 +-
.../src/main/webapp/WEB-INF/isis.properties | 11 +-
17 files changed, 144 insertions(+), 108 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/adocs/documentation/src/main/asciidoc/_migration-notes_1.12.0-to-1.13.0.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/_migration-notes_1.12.0-to-1.13.0.adoc b/adocs/documentation/src/main/asciidoc/_migration-notes_1.12.0-to-1.13.0.adoc
index 0c9fee8..16dbadf 100644
--- a/adocs/documentation/src/main/asciidoc/_migration-notes_1.12.0-to-1.13.0.adoc
+++ b/adocs/documentation/src/main/asciidoc/_migration-notes_1.12.0-to-1.13.0.adoc
@@ -19,10 +19,23 @@ issues here.
== Faster startup times
-The new `isis.services.applicationFeatures.init` can be used to control whether the
-xref:rgsvc.adoc#_rgsvc_api_ApplicationFeatureRepository[`ApplicationFeatureRepository`] domain service lazily or
-eagerly initializes itself based on the framework's internal metamodel.
+Several new configuration settings influence application startup times:
+* `isis.services.applicationFeatures.init` +
++
+This setting can be used to control whether the
+xref:rgsvc.adoc#_rgsvc_api_ApplicationFeatureRepository[`ApplicationFeatureRepository`] domain service lazily or
+eagerly initializes itself based on the framework's internal metamodel. +
++
Prior to `1.13.0` this service eagerly initialized itself, causing the framework to have to traverse the domain object
model graph for all types. This could add noticeable overhead. For `1.13.0` this service now initializes itself
lazily. The previous behaviour (of eager initialization) can be re-enabled by setting this property to `eager`.
+
+* `isis.services.injector.injectPrefix` and `isis.services.injector.setPrefix` +
++
+These settings can be used to control the styles of injection of domain services that the framework supports. +
++
+Prior to `1.13.0` the framework supported the injection of fields using xref:rgant.adoc#_rgant-Inject[`@Inject`], and
+also injection to `set...()` setter methods and also `inject...()` methods. In `1.13.0` the injection through `@Inject`
+remains, and injection through setters is enabled by default. Injection through `inject...()` is disabled however.
+For faster start-up times still, consider disabling injection through `set...()`.
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/adocs/documentation/src/main/asciidoc/guides/_rgcfg_configuring-core.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rgcfg_configuring-core.adoc b/adocs/documentation/src/main/asciidoc/guides/_rgcfg_configuring-core.adoc
index e612250..5415060 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgcfg_configuring-core.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgcfg_configuring-core.adoc
@@ -312,6 +312,26 @@ This implementation provides a default set of recognizers to convert RDBMS const
|`isis.services.` +
+`injector.injectPrefix`
+| `true`,`false` +
+(`false`)
+|(`1.13.0-SNAPSHOT`) Whether the framework should support `inject...()` as a prefix for injecting domain services into other domain objects.
++
+By default this is disabled. The default prior to `1.13.0` was enabled. If the setting is left as disabled then this may reduce application start-up times.
+
+
+|`isis.services.` +
+`injector.setPrefix`
+| `true`,`false` +
+(`true`)
+|(`1.13.0-SNAPSHOT`) Whether the framework should support `set...()` as a prefix for injecting domain services into other domain objects.
++
+By default this is enabled (no change in `1.13.0`). If the setting is changed to disabled then this may reduce application start-up times.
+
+
+
+
+|`isis.services.` +
`publish.objects`
| `all`, `none` +
(`all`)
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java b/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java
index 99536b1..0e89af0 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java
@@ -21,6 +21,8 @@ package org.apache.isis.applib;
import java.util.List;
+import javax.inject.Inject;
+
import com.google.common.base.Predicate;
import org.apache.isis.applib.annotation.Programmatic;
@@ -702,6 +704,7 @@ public abstract class AbstractContainedObject {
// //////////////////////////////////////
+ @Inject
private DomainObjectContainer container;
/**
@@ -712,8 +715,9 @@ public abstract class AbstractContainedObject {
}
/**
- * Injected by the application container itself.
+ * @deprecated - will use the field to inject instead.
*/
+ @Deprecated
@Programmatic
public void setContainer(final DomainObjectContainer container) {
this.container = container;
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
index c001fd5..cda5630 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
@@ -27,8 +27,6 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
import javax.inject.Inject;
import com.google.common.base.Predicate;
@@ -38,7 +36,6 @@ import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,14 +43,14 @@ import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
import org.apache.isis.applib.services.publish.PublishingService;
import org.apache.isis.core.commons.components.ApplicationScopedComponent;
-import org.apache.isis.core.commons.ensure.Assert;
-import org.apache.isis.core.commons.lang.ObjectExtensions;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.commons.util.ToString;
import org.apache.isis.core.metamodel.exceptions.MetaModelException;
+import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
import org.apache.isis.core.metamodel.spec.InjectorMethodEvaluator;
import org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
-import org.apache.isis.core.metamodel.specloader.ServiceInitializer;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
/**
@@ -69,6 +66,9 @@ public class ServicesInjector implements ApplicationScopedComponent {
private static final Logger LOG = LoggerFactory.getLogger(ServicesInjector.class);
+ public static final String KEY_SET_PREFIX = "isis.services.injector.setPrefix";
+ public static final String KEY_INJECT_PREFIX = "isis.services.injector.injectPrefix";
+
//region > constructor, fields
/**
* This is mutable internally, but only ever exposed (in {@link #getRegisteredServices()}) as immutable.
@@ -84,21 +84,46 @@ public class ServicesInjector implements ApplicationScopedComponent {
private final Map<Class<?>, Object> serviceByConcreteType = Maps.newHashMap();
private final InjectorMethodEvaluator injectorMethodEvaluator;
+ private final boolean autowireSetters;
+ private final boolean autowireInject;
+
+ public ServicesInjector(final List<Object> services, final IsisConfiguration configuration) {
+ this(services, null, configuration);
+ }
+
+ /**
+ * For testing.
+ */
+ public ServicesInjector(
+ final List<Object> services,
+ final IsisConfigurationDefault configuration,
+ final InjectorMethodEvaluator injectorMethodEvaluator) {
+ this(services, injectorMethodEvaluator, defaultAutowiring(configuration));
+ }
- public ServicesInjector(final List<Object> services) {
- this(services, null);
+ private static IsisConfiguration defaultAutowiring(final IsisConfigurationDefault configuration) {
+ configuration.put(KEY_SET_PREFIX, ""+true);
+ configuration.put(KEY_INJECT_PREFIX, ""+false);
+ return configuration;
}
/**
* For testing.
*/
- public ServicesInjector(final List<Object> services, final InjectorMethodEvaluator injectorMethodEvaluator) {
+ private ServicesInjector(
+ final List<Object> services,
+ final InjectorMethodEvaluator injectorMethodEvaluator,
+ final IsisConfiguration configuration) {
this.services.addAll(services);
+
this.injectorMethodEvaluator =
injectorMethodEvaluator != null
? injectorMethodEvaluator
: new InjectorMethodEvaluatorDefault();
+ this.autowireSetters = configuration.getBoolean(KEY_SET_PREFIX, true);
+ this.autowireInject = configuration.getBoolean(KEY_INJECT_PREFIX, false);
+
autowireServicesAndContainer();
}
@@ -153,25 +178,13 @@ public class ServicesInjector implements ApplicationScopedComponent {
}
/**
- * Validate domain service Ids are unique, and that the {@link PostConstruct} method, if present, must either
- * take no arguments or take a {@link Map} object), and that the {@link PreDestroy} method, if present, must take
- * no arguments.
- *
- * <p>
- * TODO: there seems to be some duplication/overlap with {@link ServiceInitializer}.
+ * Validate domain service Ids are unique.
*/
public void validateServices() {
validate(getRegisteredServices());
}
private static void validate(List<Object> serviceList) {
- for (Object service : serviceList) {
- final Method[] methods = service.getClass().getMethods();
- for (Method method : methods) {
- validatePostConstructMethods(service, method);
- validatePreDestroyMethods(service, method);
- }
- }
ListMultimap<String, Object> servicesById = ArrayListMultimap.create();
for (Object service : serviceList) {
String id = ServiceUtil.id(service);
@@ -199,33 +212,6 @@ public class ServicesInjector implements ApplicationScopedComponent {
return buf.toString();
}
- private static void validatePostConstructMethods(Object service, Method method) {
- final PostConstruct postConstruct = method.getAnnotation(PostConstruct.class);
- if(postConstruct == null) {
- return;
- }
- final int numParams = method.getParameterTypes().length;
- if(numParams == 0) {
- return;
- }
- if(numParams == 1 && method.getParameterTypes()[0].isAssignableFrom(Map.class)) {
- return;
- }
- throw new IllegalStateException("Domain service " + service.getClass().getName() + " has @PostConstruct method " + method.getName() + "; such methods must take either no argument or 1 argument of type Map<String,String>");
- }
-
- private static void validatePreDestroyMethods(Object service, Method method) {
- final PreDestroy preDestroy = method.getAnnotation(PreDestroy.class);
- if(preDestroy == null) {
- return;
- }
- final int numParams = method.getParameterTypes().length;
- if(numParams == 0) {
- return;
- }
- throw new IllegalStateException("Domain service " + service.getClass().getName() + " has @PreDestroy method " + method.getName() + "; such methods must take no arguments");
- }
-
static boolean contains(final List<Object> services, final Class<?> serviceClass) {
for (Object service : services) {
@@ -244,21 +230,6 @@ public class ServicesInjector implements ApplicationScopedComponent {
return Collections.unmodifiableList(services);
}
- private void addServices(final List<Object> services) {
- for (final Object service : services) {
- if (service instanceof List) {
- final List<Object> serviceList = ObjectExtensions.asListT(service, Object.class);
- addServices(serviceList);
- } else {
- addService(service);
- }
- }
- }
-
- private boolean addService(final Object service) {
- return services.add(service);
- }
-
//endregion
//region > injectServicesInto
@@ -270,9 +241,7 @@ public class ServicesInjector implements ApplicationScopedComponent {
* Called in multiple places from metamodel and facets.
*/
public void injectServicesInto(final Object object) {
- Assert.assertNotNull("no services", services);
-
- injectServices(object, Collections.unmodifiableList(services));
+ injectServices(object, services);
}
/**
@@ -308,8 +277,13 @@ public class ServicesInjector implements ApplicationScopedComponent {
final Class<?> cls = object.getClass();
autowireViaFields(object, services, cls);
- autowireViaPrefixedMethods(object, services, cls, "set");
- autowireViaPrefixedMethods(object, services, cls, "inject");
+
+ if(autowireSetters) {
+ autowireViaPrefixedMethods(object, services, cls, "set");
+ }
+ if(autowireInject) {
+ autowireViaPrefixedMethods(object, services, cls, "inject");
+ }
}
private void autowireViaFields(final Object object, final List<Object> services, final Class<?> cls) {
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
index 96d635c..86f65b7 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
@@ -23,25 +23,24 @@ import java.util.Collections;
import org.apache.isis.applib.adapters.DefaultsProvider;
import org.apache.isis.applib.annotation.Defaulted;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
import org.apache.isis.core.metamodel.facets.object.defaults.annotcfg.DefaultedFacetAnnotationElseConfigurationFactory;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
public class DefaultedFacetFactoryTest extends AbstractFacetFactoryTest {
private DefaultedFacetAnnotationElseConfigurationFactory facetFactory;
- private IsisConfigurationDefault isisConfigurationDefault;
@Override
protected void setUp() throws Exception {
super.setUp();
facetFactory = new DefaultedFacetAnnotationElseConfigurationFactory();
- ServicesInjector servicesInjector = new ServicesInjector(Collections.emptyList());
- servicesInjector.addFallbackIfRequired(ConfigurationServiceInternal.class, isisConfigurationDefault = new IsisConfigurationDefault());
+
+ ServicesInjector servicesInjector = new ServicesInjector(Collections.emptyList(), stubConfiguration);
+ servicesInjector.addFallbackIfRequired(ConfigurationServiceInternal.class, stubConfiguration);
facetFactory.setServicesInjector(servicesInjector);
}
@@ -190,7 +189,7 @@ public class DefaultedFacetFactoryTest extends AbstractFacetFactoryTest {
public void testDefaultedProviderNameCanBePickedUpFromConfiguration() {
final String className = "org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetFactoryTest$MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration";
- isisConfigurationDefault.add(DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_SUFFIX, className);
+ stubConfiguration.add(DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_SUFFIX, className);
facetFactory.process(new ProcessClassContext(MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
assertNotNull(facet);
@@ -213,7 +212,7 @@ public class DefaultedFacetFactoryTest extends AbstractFacetFactoryTest {
public void testNonAnnotatedDefaultedCanBePickedUpFromConfiguration() {
final String className = "org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetFactoryTest$NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration";
- isisConfigurationDefault.add(DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_SUFFIX, className);
+ stubConfiguration.add(DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_SUFFIX, className);
facetFactory.process(new ProcessClassContext(NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
assertNotNull(facet);
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/encodable/EncodableFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/encodable/EncodableFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/encodable/EncodableFacetFactoryTest.java
index 8c65066..0368b24 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/encodable/EncodableFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/encodable/EncodableFacetFactoryTest.java
@@ -23,30 +23,27 @@ import java.util.Collections;
import org.apache.isis.applib.adapters.EncoderDecoder;
import org.apache.isis.applib.annotation.Encodable;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
-import org.apache.isis.core.metamodel.facets.object.encodeable.annotcfg.EncodableFacetAnnotationElseConfigurationFactory;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacetAbstract;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncoderDecoderUtil;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
+import org.apache.isis.core.metamodel.facets.object.encodeable.annotcfg.EncodableFacetAnnotationElseConfigurationFactory;
import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
public class EncodableFacetFactoryTest extends AbstractFacetFactoryTest {
private EncodableFacetAnnotationElseConfigurationFactory facetFactory;
- private IsisConfigurationDefault isisConfigurationDefault;
@Override
protected void setUp() throws Exception {
super.setUp();
facetFactory = new EncodableFacetAnnotationElseConfigurationFactory();
- isisConfigurationDefault = new IsisConfigurationDefault();
- ServicesInjector servicesInjector = new ServicesInjector(Collections.emptyList());
- servicesInjector.addFallbackIfRequired(ConfigurationServiceInternal.class, isisConfigurationDefault = new IsisConfigurationDefault());
+ ServicesInjector servicesInjector = new ServicesInjector(Collections.emptyList(), stubConfiguration);
+ servicesInjector.addFallbackIfRequired(ConfigurationServiceInternal.class, stubConfiguration);
facetFactory.setServicesInjector(servicesInjector);
}
@@ -186,7 +183,7 @@ public class EncodableFacetFactoryTest extends AbstractFacetFactoryTest {
public void testEncoderDecoderNameCanBePickedUpFromConfiguration() {
final String className = "org.apache.isis.core.metamodel.facets.object.encodable.EncodableFacetFactoryTest$MyEncodableWithEncoderDecoderSpecifiedUsingConfiguration";
- isisConfigurationDefault.add(EncoderDecoderUtil.ENCODER_DECODER_NAME_KEY_PREFIX + canonical(className) + EncoderDecoderUtil.ENCODER_DECODER_NAME_KEY_SUFFIX, className);
+ stubConfiguration.add(EncoderDecoderUtil.ENCODER_DECODER_NAME_KEY_PREFIX + canonical(className) + EncoderDecoderUtil.ENCODER_DECODER_NAME_KEY_SUFFIX, className);
facetFactory.process(new ProcessClassContext(MyEncodableWithEncoderDecoderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
final EncodableFacetAbstract facet = (EncodableFacetAbstract) facetedMethod.getFacet(EncodableFacet.class);
assertNotNull(facet);
@@ -204,7 +201,7 @@ public class EncodableFacetFactoryTest extends AbstractFacetFactoryTest {
public void testNonAnnotatedEncodeableCanPickUpEncoderDecoderFromConfiguration() {
final String className = "org.apache.isis.core.metamodel.facets.object.encodable.EncodableFacetFactoryTest$NonAnnotatedEncodeableEncoderDecoderSpecifiedUsingConfiguration";
- isisConfigurationDefault.add(EncoderDecoderUtil.ENCODER_DECODER_NAME_KEY_PREFIX + canonical(className) + EncoderDecoderUtil.ENCODER_DECODER_NAME_KEY_SUFFIX, className);
+ stubConfiguration.add(EncoderDecoderUtil.ENCODER_DECODER_NAME_KEY_PREFIX + canonical(className) + EncoderDecoderUtil.ENCODER_DECODER_NAME_KEY_SUFFIX, className);
facetFactory.process(new ProcessClassContext(NonAnnotatedEncodeableEncoderDecoderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
final EncodableFacetAbstract facet = (EncodableFacetAbstract) facetedMethod.getFacet(EncodableFacet.class);
assertNotNull(facet);
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
index 87e4958..4ee5a13 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
@@ -27,6 +27,7 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
@@ -70,7 +71,8 @@ public class ServicesInjectorDefaultTest {
public void setUp() throws Exception {
final Object[] services = { mockContainer, mockService1, mockService2 };
- injector = new ServicesInjector(Arrays.asList(services), new InjectorMethodEvaluatorDefault());
+ IsisConfigurationDefault stubConfiguration = new IsisConfigurationDefault();
+ injector = new ServicesInjector(Arrays.asList(services), stubConfiguration, new InjectorMethodEvaluatorDefault());
}
@After
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java
index b4e67bd..8aa8201 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java
@@ -28,6 +28,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
@@ -84,7 +85,8 @@ public class ServicesInjectorDefaultTest_usingFields {
service1 = new SomeDomainService1();
service3 = new SomeDomainService3();
service2 = new SomeDomainService2();
- injector = new ServicesInjector(Arrays.asList(container, service1, service3, service2));
+ final IsisConfigurationDefault stubConfiguration = new IsisConfigurationDefault();
+ injector = new ServicesInjector(Arrays.asList(container, service1, service3, service2), stubConfiguration);
}
@Test
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_validateServices.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_validateServices.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_validateServices.java
index fa99e9e..7008a90 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_validateServices.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_validateServices.java
@@ -26,6 +26,8 @@ import com.google.common.collect.Lists;
import org.junit.Before;
import org.junit.Test;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+
public class ServicesInjectorDefaultTest_validateServices {
ServicesInjector servicesInjector;
@@ -45,10 +47,12 @@ public class ServicesInjectorDefaultTest_validateServices {
public static class ValidateServicesTestValidateServices extends ServicesInjectorDefaultTest_validateServices {
List<Object> serviceList;
+ IsisConfigurationDefault stubConfiguration;
@Before
public void setUp() throws Exception {
serviceList = Lists.newArrayList();
+ stubConfiguration = new IsisConfigurationDefault();
}
@Test(expected=IllegalStateException.class)
@@ -58,7 +62,7 @@ public class ServicesInjectorDefaultTest_validateServices {
serviceList.add(new DomainServiceWithSomeId());
serviceList.add(new DomainServiceWithDuplicateId());
- servicesInjector = new ServicesInjector(serviceList, null);
+ servicesInjector = new ServicesInjector(serviceList, stubConfiguration, null);
// when
servicesInjector.validateServices();
@@ -70,7 +74,7 @@ public class ServicesInjectorDefaultTest_validateServices {
serviceList.add(new DomainServiceWithSomeId());
serviceList.add(new DomainServiceWithDifferentId());
- servicesInjector = new ServicesInjector(serviceList, null);
+ servicesInjector = new ServicesInjector(serviceList, stubConfiguration, null);
// when
servicesInjector.validateServices();
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
index 06b7bd0..78a6654 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
@@ -103,7 +103,8 @@ public abstract class SpecificationLoaderTestAbstract {
stubConfiguration = new IsisConfigurationDefault(null);
stubServicesInjector =
- new ServicesInjector(Lists.newArrayList(
+ new ServicesInjector(
+ Lists.newArrayList(
mockAuthenticationSessionProvider,
stubConfiguration,
mockDeploymentCategoryProvider,
@@ -112,7 +113,8 @@ public abstract class SpecificationLoaderTestAbstract {
mockMessageBrokerServiceInternal,
mockTransactionStateProviderInternal,
mockGridService,
- mockDeploymentCategoryProvider));
+ mockDeploymentCategoryProvider),
+ stubConfiguration);
final SpecificationLoader specificationLoader =
new SpecificationLoader(DeploymentCategory.PRODUCTION,
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 4c86911..6720a7e 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -71,9 +71,9 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
public ObjectSpecificationStub(final Class<?> type) {
this(type.getName());
- this.servicesInjector = new ServicesInjector(Collections.emptyList());
- servicesInjector.addFallbackIfRequired(
- ConfigurationServiceInternal.class, new IsisConfigurationDefault(null));
+ IsisConfigurationDefault stubConfiguration = new IsisConfigurationDefault(null);
+ this.servicesInjector = new ServicesInjector(Collections.emptyList(), stubConfiguration);
+ servicesInjector.addFallbackIfRequired(ConfigurationServiceInternal.class, stubConfiguration);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
index d0c7241..2cf0654 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
@@ -146,7 +146,7 @@ public class IsisSystem implements ApplicationScopedComponent {
final IsisConfigurationDefault configuration = componentProvider.getConfiguration();
// services
- ServicesInjector servicesInjector = componentProvider.provideServiceInjector();
+ ServicesInjector servicesInjector = componentProvider.provideServiceInjector(configuration);
servicesInjector.addFallbackIfRequired(FixtureScripts.class, new FixtureScriptsDefault());
servicesInjector.addFallbackIfRequired(ConfigurationServiceInternal.class, configuration);
servicesInjector.validateServices();
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
index 6b41a5e..5b41613 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
@@ -265,8 +265,10 @@ public abstract class IsisComponentProvider {
return authorizationManager;
}
- public ServicesInjector provideServiceInjector() {
- return new ServicesInjector(services);
+ public ServicesInjector provideServiceInjector(final IsisConfiguration configuration) {
+ boolean autowireSetters = configuration.getBoolean(ServicesInjector.KEY_SET_PREFIX, false);
+ boolean autowireInject = configuration.getBoolean(ServicesInjector.KEY_INJECT_PREFIX, false);
+ return new ServicesInjector(services, configuration);
}
public FixturesInstaller provideFixturesInstaller() {
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionLayoutXmlDefaultTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionLayoutXmlDefaultTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionLayoutXmlDefaultTest.java
index c3bfe80..29161b0 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionLayoutXmlDefaultTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionLayoutXmlDefaultTest.java
@@ -29,6 +29,7 @@ import org.junit.Test;
import org.apache.isis.applib.Identifier;
import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
@@ -69,16 +70,19 @@ public class ObjectActionLayoutXmlDefaultTest {
private PersistenceSessionServiceInternal mockPersistenceSessionServiceInternal;
private ServicesInjector stubServicesInjector;
+ private IsisConfigurationDefault stubConfiguration;
@Before
public void setUp() throws Exception {
+ stubConfiguration = new IsisConfigurationDefault();
+
stubServicesInjector =
new ServicesInjector(Lists.newArrayList(
mockAuthenticationSessionProvider,
mockSpecificationLoader,
mockPersistenceSessionServiceInternal,
- mockMessageBrokerServiceInternal));
+ mockMessageBrokerServiceInternal), stubConfiguration);
context.checking(new Expectations() {
{
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
index 1f52d76..16b0f1e 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
@@ -32,6 +32,7 @@ import org.apache.isis.applib.annotation.When;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
@@ -85,9 +86,8 @@ public class ObjectMemberAbstractTest {
@Mock
private SpecificationLoader mockSpecificationLoader;
- // @Mock
-// ServicesInjector mockServicesInjector;
ServicesInjector stubServicesInjector;
+ private IsisConfigurationDefault stubConfiguration;
@Mock
private ObjectSpecification mockSpecForCustomer;
@@ -99,8 +99,9 @@ public class ObjectMemberAbstractTest {
public void setUp() throws Exception {
org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.OFF);
+ stubConfiguration = new IsisConfigurationDefault();
stubServicesInjector = new ServicesInjector(Lists.<Object>newArrayList(
- mockSpecificationLoader, mockSpecificationLoader));
+ mockSpecificationLoader, mockSpecificationLoader), stubConfiguration);
context.checking(new Expectations() {{
allowing(mockAuthenticationSessionProvider).getAuthenticationSession();
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationDefaultTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationDefaultTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationDefaultTest.java
index 2924e88..70d1904 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationDefaultTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationDefaultTest.java
@@ -29,6 +29,7 @@ import org.junit.Test;
import org.apache.isis.applib.Identifier;
import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
@@ -85,16 +86,18 @@ public class OneToManyAssociationDefaultTest {
private CollectionAddToFacet mockCollectionAddToFacet;
private ServicesInjector stubServicesInjector;
+ private IsisConfigurationDefault stubConfiguration;
private OneToManyAssociation association;
@Before
public void setUp() {
+ stubConfiguration = new IsisConfigurationDefault();
stubServicesInjector = new ServicesInjector(Lists.newArrayList(
mockAuthenticationSessionProvider,
mockSpecificationLoader,
mockMessageBrokerServiceInternal,
- mockPersistenceSessionServiceInternal));
+ mockPersistenceSessionServiceInternal), stubConfiguration);
allowingPeerToReturnCollectionType();
allowingPeerToReturnIdentifier();
http://git-wip-us.apache.org/repos/asf/isis/blob/ba74043c/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
index dcff15a..f8c66ed 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -211,12 +211,21 @@ isis.reflector.facet.domainObjectAnnotation.removingLifecycleEvent.postForDefaul
#
-# Whether the ApplicationFeatureRepository should eagerly initialize itself (slowing start-up times)
+# Whether the ApplicationFeatureRepository should eagerly initialize itself (increasing start-up times)
# or initialize itself lazily. Default is lazy initialization.
#
#isis.services.applicationFeatures.init=lazy|eager
+#
+# Whether the framework supports inject...() and set...() styles of dependency injection. By default the former
+# is disabled, the latter is enabled. Disabling these settings can reduce application start-up times.
+#
+#isis.services.injector.injectPrefix=false|true
+#isis.services.injector.setPrefix=false|true
+isis.services.injector.setPrefix=false
+
+
################################################################################
#
# Policies