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 2019/10/03 08:52:43 UTC
[isis] branch v2 updated: ISIS-2158: have IsisSystemEnvironment
cleanup Isis' _Context
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 2e77b77 ISIS-2158: have IsisSystemEnvironment cleanup Isis' _Context
2e77b77 is described below
commit 2e77b77f3cceee8515e2ea42e21d10c685a3f4b7
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 3 10:52:31 2019 +0200
ISIS-2158: have IsisSystemEnvironment cleanup Isis' _Context
- also tries to ensure, there can be only one IsisSystemEnvironment
instance at any time
- moving IsisSystemEnvironment one up in package hierarchy
- we hook into the Spring context's life-cycle and call _Context.clear()
when Spring is about to start the @PostConstuct phase
- also fixes a concurrent testing issue
---
.../{plugins => }/environment/DeploymentType.java | 2 +-
.../environment/IsisSystemEnvironment.java | 49 +++++++++++++++++-----
.../org/apache/isis/config/IsisConfigModule.java | 2 +-
.../isis/config/IsisConfigurationLegacy.java | 2 +-
.../metamodel/specloader/IntrospectionMode.java | 4 +-
.../isis/metamodel/ServiceRegistry_forTesting.java | 14 ++++---
.../action/ActionAnnotationFacetFactory.java | 2 +-
.../PrototypeFacetForActionAnnotation.java | 2 +-
.../actions/prototype/PrototypeFacetAbstract.java | 2 +-
.../param/DeriveFacetsPostProcessor.java | 2 +-
.../services/grid/GridLoaderServiceDefault.java | 2 +-
.../services/grid/GridSystemServiceAbstract.java | 2 +-
.../isis/metamodel/spec/feature/ObjectAction.java | 2 +-
.../specloader/SpecificationLoaderDefault.java | 2 +-
.../prototype/PrototypeFacetAbstractTest.java | 2 +-
.../SpecificationLoaderTestAbstract.java | 2 +-
.../confmenu/ConfigurationViewServiceDefault.java | 2 +-
.../services/i18n/po/TranslationServicePo.java | 2 +-
.../menubars/MenuBarsLoaderServiceDefault.java | 2 +-
.../menubars/bootstrap3/MenuBarsServiceBS3.java | 2 +-
.../modules/h2console/WebModuleH2Console.java | 2 +-
.../fixtures/LogonFixtureAuthenticator.java | 2 +-
.../jmocking/JUnitRuleMockery2.java | 2 +-
.../rendering/util/JsonWriterUtil.java | 2 +-
.../wicket/viewer/IsisWicketApplication.java | 3 +-
.../isis/viewer/wicket/viewer/WebModuleWicket.java | 2 +-
.../collection/AssociatedWithActionsHelper.java | 2 +-
.../ajaxtable/PrototypingMessageProvider.java | 2 +-
.../DomainModelTest_usingBadDomain.java | 2 +-
.../domainmodel/SpecloaderPerformanceTest.java | 31 ++++++++++----
.../bootstrapping/builtin-singleton.list | 4 +-
.../fixtures/FixturesLifecyleService.java | 2 +-
32 files changed, 103 insertions(+), 54 deletions(-)
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/DeploymentType.java b/core/commons/src/main/java/org/apache/isis/commons/internal/environment/DeploymentType.java
similarity index 94%
rename from core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/DeploymentType.java
rename to core/commons/src/main/java/org/apache/isis/commons/internal/environment/DeploymentType.java
index 7e7e911..f65bc85 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/DeploymentType.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/environment/DeploymentType.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.commons.internal.plugins.environment;
+package org.apache.isis.commons.internal.environment;
/**
*
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/IsisSystemEnvironment.java b/core/commons/src/main/java/org/apache/isis/commons/internal/environment/IsisSystemEnvironment.java
similarity index 68%
rename from core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/IsisSystemEnvironment.java
rename to core/commons/src/main/java/org/apache/isis/commons/internal/environment/IsisSystemEnvironment.java
index b84015e..d5aa65f 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/IsisSystemEnvironment.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/environment/IsisSystemEnvironment.java
@@ -16,15 +16,19 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.commons.internal.plugins.environment;
+package org.apache.isis.commons.internal.environment;
+import javax.annotation.PostConstruct;
import javax.inject.Singleton;
-import org.springframework.core.Ordered;
-import org.springframework.core.annotation.Order;
+import org.springframework.context.event.ContextClosedEvent;
+import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
-import org.apache.isis.commons.internal.base._Lazy;
+import org.apache.isis.commons.internal.context._Context;
+
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
/**
* Represents configuration, that is available in an early phase of bootstrapping.
@@ -32,22 +36,47 @@ import org.apache.isis.commons.internal.base._Lazy;
*
* @since 2.0
*/
-@Service @Singleton @Order(value = Ordered.LOWEST_PRECEDENCE)
+@Service @Singleton @Log4j2
public class IsisSystemEnvironment {
- private static _Lazy<IsisSystemEnvironment> singleton = _Lazy.threadSafe(IsisSystemEnvironment::new);
-
/**
* @deprecated - this is provided only as a stepping stone for code that currently uses static method calls
* rather than having this bean injected.
*/
@Deprecated
public static IsisSystemEnvironment get() {
- return singleton.get();
+ return _Context.computeIfAbsent(IsisSystemEnvironment.class, IsisSystemEnvironment::new);
}
- // -- INIT
-
+ // -- LIFE-CYCLE
+
+ @PostConstruct
+ public void postConstruct() {
+ // when NOT bootstrapped with Spring, postConstruct() never gets called
+
+ // when bootstrapped with Spring, postConstruct() must happen before any call to get() above,
+ // otherwise we copy over settings from the primed instance already created with get() above,
+ // then on the _Context replace the primed with this one
+ val primed = _Context.getIfAny(IsisSystemEnvironment.class);
+ if(primed!=null) {
+ _Context.remove(IsisSystemEnvironment.class);
+ this.setPrototyping(primed.isPrototyping());
+ this.setUnitTesting(primed.isUnitTesting());
+ }
+ _Context.putSingleton(IsisSystemEnvironment.class, this);
+ }
+
+ @EventListener(ContextClosedEvent.class)
+ public void onContextAboutToClose(ContextClosedEvent event) {
+ // happens before any @PostConstruct
+ // as a consequence, no managed bean should touch the _Context during its post-construct phase
+ // as it has already been cleared here
+ log.info("Context about to close.");
+ _Context.clear();
+ }
+
+ // -- SETUP
+
/**
* For framework internal unit tests.<p>
* Let the framework know what context we are running on.
diff --git a/core/config/src/main/java/org/apache/isis/config/IsisConfigModule.java b/core/config/src/main/java/org/apache/isis/config/IsisConfigModule.java
index 04d78e4..34cf4b3 100644
--- a/core/config/src/main/java/org/apache/isis/config/IsisConfigModule.java
+++ b/core/config/src/main/java/org/apache/isis/config/IsisConfigModule.java
@@ -28,8 +28,8 @@ import org.springframework.context.annotation.Import;
import org.springframework.core.env.ConfigurableEnvironment;
import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.commons.internal.ioc.spring._Spring;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
import org.apache.isis.config.internal._Config;
import org.apache.isis.config.registry.IsisBeanTypeRegistry;
diff --git a/core/config/src/main/java/org/apache/isis/config/IsisConfigurationLegacy.java b/core/config/src/main/java/org/apache/isis/config/IsisConfigurationLegacy.java
index 2980256..e9ee658 100644
--- a/core/config/src/main/java/org/apache/isis/config/IsisConfigurationLegacy.java
+++ b/core/config/src/main/java/org/apache/isis/config/IsisConfigurationLegacy.java
@@ -25,7 +25,7 @@ import java.util.Map;
import java.util.TreeMap;
import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import lombok.val;
diff --git a/core/config/src/main/java/org/apache/isis/metamodel/specloader/IntrospectionMode.java b/core/config/src/main/java/org/apache/isis/metamodel/specloader/IntrospectionMode.java
index 569ea62..c29fe17 100644
--- a/core/config/src/main/java/org/apache/isis/metamodel/specloader/IntrospectionMode.java
+++ b/core/config/src/main/java/org/apache/isis/metamodel/specloader/IntrospectionMode.java
@@ -19,8 +19,8 @@
package org.apache.isis.metamodel.specloader;
import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.commons.internal.plugins.environment.DeploymentType;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
+import org.apache.isis.commons.internal.environment.DeploymentType;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.config.IsisConfiguration;
import lombok.val;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/ServiceRegistry_forTesting.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/ServiceRegistry_forTesting.java
index 9c41fbe..8f54f1b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/ServiceRegistry_forTesting.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/ServiceRegistry_forTesting.java
@@ -87,14 +87,16 @@ class ServiceRegistry_forTesting implements ServiceRegistry {
// -- HELPER
private Set<BeanAdapter> registeredBeans() {
- if(registeredBeans.isEmpty()) {
+ synchronized(registeredBeans) {
+ if(registeredBeans.isEmpty()) {
- val beanSortClassifier = IsisBeanTypeRegistry.current();
+ val beanSortClassifier = IsisBeanTypeRegistry.current();
- streamSingletons()
- .map(s->toBeanAdapter(s, beanSortClassifier))
- .filter(_NullSafe::isPresent)
- .forEach(registeredBeans::add);
+ streamSingletons()
+ .map(s->toBeanAdapter(s, beanSortClassifier))
+ .filter(_NullSafe::isPresent)
+ .forEach(registeredBeans::add);
+ }
}
return registeredBeans;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
index 53bb4b7..9a883b2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
@@ -28,7 +28,7 @@ import org.apache.isis.applib.services.HasUniqueId;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Collections;
import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.facetapi.FacetUtil;
import org.apache.isis.metamodel.facetapi.FeatureType;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/prototype/PrototypeFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/prototype/PrototypeFacetForActionAnnotation.java
index df1e492..38c1afe 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/prototype/PrototypeFacetForActionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/prototype/PrototypeFacetForActionAnnotation.java
@@ -23,7 +23,7 @@ import java.util.List;
import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.RestrictTo;
-import org.apache.isis.commons.internal.plugins.environment.DeploymentType;
+import org.apache.isis.commons.internal.environment.DeploymentType;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.facets.actions.prototype.PrototypeFacet;
import org.apache.isis.metamodel.facets.actions.prototype.PrototypeFacetAbstract;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/prototype/PrototypeFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/prototype/PrototypeFacetAbstract.java
index 0e98eee..01ec38e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/prototype/PrototypeFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/prototype/PrototypeFacetAbstract.java
@@ -22,7 +22,7 @@ package org.apache.isis.metamodel.facets.actions.prototype;
import java.util.Map;
import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
-import org.apache.isis.commons.internal.plugins.environment.DeploymentType;
+import org.apache.isis.commons.internal.environment.DeploymentType;
import org.apache.isis.metamodel.facetapi.Facet;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.facets.MarkerFacetAbstract;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
index b5bec30..e6782ae 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
@@ -31,7 +31,7 @@ import org.apache.isis.applib.events.domain.CollectionDomainEvent;
import org.apache.isis.applib.events.domain.PropertyDomainEvent;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.metamodel.facetapi.Facet;
import org.apache.isis.metamodel.facetapi.FacetUtil;
import org.apache.isis.metamodel.facets.Annotations;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridLoaderServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridLoaderServiceDefault.java
index 2ceca3a..a07f305 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridLoaderServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridLoaderServiceDefault.java
@@ -27,7 +27,6 @@ import java.util.Objects;
import javax.inject.Inject;
import javax.inject.Singleton;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.layout.grid.Grid;
@@ -36,6 +35,7 @@ import org.apache.isis.applib.services.message.MessageService;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.commons.internal.resources._Resources;
import lombok.extern.log4j.Log4j2;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridSystemServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridSystemServiceAbstract.java
index 46e4569..daf2886 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridSystemServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridSystemServiceAbstract.java
@@ -55,7 +55,7 @@ import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.metamodel.facetapi.Facet;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.facetapi.FacetUtil;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java
index 837b06c..dd64fff 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java
@@ -39,7 +39,7 @@ import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.consent.Consent;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
index b5f6bb0..1c8089b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
@@ -26,11 +26,11 @@ import javax.annotation.Nullable;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.base._Timing;
import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.config.registry.IsisBeanTypeRegistry;
import org.apache.isis.metamodel.facetapi.Facet;
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java
index 6dbbaf4..4f17548 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java
@@ -22,7 +22,7 @@ import org.jmock.auto.Mock;
import org.junit.Rule;
import org.junit.Test;
-import org.apache.isis.commons.internal.plugins.environment.DeploymentType;
+import org.apache.isis.commons.internal.environment.DeploymentType;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.interactions.VisibilityContext;
import org.apache.isis.unittestsupport.jmocking.JUnitRuleMockery2;
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/SpecificationLoaderTestAbstract.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/SpecificationLoaderTestAbstract.java
index 20333b1..0e051c7 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/SpecificationLoaderTestAbstract.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/SpecificationLoaderTestAbstract.java
@@ -30,7 +30,7 @@ import org.apache.isis.applib.services.i18n.TranslationService;
import org.apache.isis.applib.services.i18n.TranslationService.Mode;
import org.apache.isis.applib.services.message.MessageService;
import org.apache.isis.commons.internal.base._Timing;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.metamodel.MetaModelContext;
import org.apache.isis.metamodel.facetapi.Facet;
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/confmenu/ConfigurationViewServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/confmenu/ConfigurationViewServiceDefault.java
index f6cca48..0c16e74 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/confmenu/ConfigurationViewServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/confmenu/ConfigurationViewServiceDefault.java
@@ -31,7 +31,7 @@ import org.apache.isis.applib.services.confview.ConfigurationProperty;
import org.apache.isis.applib.services.confview.ConfigurationViewService;
import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.config.ConfigurationConstants;
import org.apache.isis.config.IsisConfigurationLegacy;
import org.apache.isis.config.internal._Config;
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/TranslationServicePo.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/TranslationServicePo.java
index 736ebd1..5ff2d2d 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/TranslationServicePo.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/TranslationServicePo.java
@@ -22,7 +22,6 @@ import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.i18n.LocaleProvider;
@@ -31,6 +30,7 @@ import org.apache.isis.applib.services.i18n.TranslationsResolver;
import org.apache.isis.commons.collections.Bin;
import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.runtime.system.context.IsisContext;
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/MenuBarsLoaderServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/MenuBarsLoaderServiceDefault.java
index 7074dbe..bb0216e 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/MenuBarsLoaderServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/MenuBarsLoaderServiceDefault.java
@@ -23,7 +23,6 @@ import java.util.Optional;
import javax.inject.Inject;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.AbstractResource;
import org.springframework.stereotype.Service;
@@ -33,6 +32,7 @@ import org.apache.isis.applib.services.jaxb.JaxbService;
import org.apache.isis.applib.services.menu.MenuBarsLoaderService;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.config.beans.WebAppConfigBean;
import lombok.val;
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/bootstrap3/MenuBarsServiceBS3.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/bootstrap3/MenuBarsServiceBS3.java
index f002355..ba9fb09 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/bootstrap3/MenuBarsServiceBS3.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/bootstrap3/MenuBarsServiceBS3.java
@@ -27,7 +27,6 @@ import java.util.stream.Stream;
import javax.inject.Inject;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.DomainServiceLayout;
@@ -47,6 +46,7 @@ import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.metamodel.MetaModelContext;
import org.apache.isis.metamodel.facets.actions.notinservicemenu.NotInServiceMenuFacet;
import org.apache.isis.metamodel.facets.all.named.NamedFacet;
diff --git a/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/h2console/WebModuleH2Console.java b/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/h2console/WebModuleH2Console.java
index 93ff78c..5773dcc 100644
--- a/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/h2console/WebModuleH2Console.java
+++ b/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/h2console/WebModuleH2Console.java
@@ -23,7 +23,6 @@ import javax.servlet.ServletContext;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
import org.apache.isis.config.IsisConfiguration;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
@@ -31,6 +30,7 @@ import org.springframework.stereotype.Service;
import org.apache.isis.applib.value.LocalResourcePath;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.config.IsisConfigurationLegacy;
import org.apache.isis.webapp.modules.WebModule;
import org.apache.isis.webapp.modules.WebModuleContext;
diff --git a/core/security/api/src/main/java/org/apache/isis/security/authentication/fixtures/LogonFixtureAuthenticator.java b/core/security/api/src/main/java/org/apache/isis/security/authentication/fixtures/LogonFixtureAuthenticator.java
index 99dca52..ed9be90 100644
--- a/core/security/api/src/main/java/org/apache/isis/security/authentication/fixtures/LogonFixtureAuthenticator.java
+++ b/core/security/api/src/main/java/org/apache/isis/security/authentication/fixtures/LogonFixtureAuthenticator.java
@@ -19,7 +19,7 @@
package org.apache.isis.security.authentication.fixtures;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.security.authentication.AuthenticationRequest;
import org.apache.isis.security.authentication.standard.AuthenticatorAbstract;
diff --git a/core/testsupport/unittestsupport/src/main/java/org/apache/isis/unittestsupport/jmocking/JUnitRuleMockery2.java b/core/testsupport/unittestsupport/src/main/java/org/apache/isis/unittestsupport/jmocking/JUnitRuleMockery2.java
index cf6d048..beddfde 100644
--- a/core/testsupport/unittestsupport/src/main/java/org/apache/isis/unittestsupport/jmocking/JUnitRuleMockery2.java
+++ b/core/testsupport/unittestsupport/src/main/java/org/apache/isis/unittestsupport/jmocking/JUnitRuleMockery2.java
@@ -24,7 +24,6 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.List;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
import org.jmock.Expectations;
import org.jmock.auto.Mock;
import org.jmock.integration.junit4.JUnit4Mockery;
@@ -37,6 +36,7 @@ import org.picocontainer.MutablePicoContainer;
import org.picocontainer.PicoBuilder;
import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/JsonWriterUtil.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/JsonWriterUtil.java
index dbc07c4..86f4651 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/JsonWriterUtil.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/JsonWriterUtil.java
@@ -21,7 +21,7 @@ package org.apache.isis.viewer.restfulobjects.rendering.util;
import java.io.IOException;
import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.runtime.system.context.IsisContext;
import org.apache.isis.runtime.system.session.IsisSessionFactory;
import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index 3d1263a..c90890e 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -29,7 +29,7 @@ import java.util.function.Function;
import javax.inject.Inject;
import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
+
import org.apache.wicket.Application;
import org.apache.wicket.ConverterLocator;
import org.apache.wicket.IConverterLocator;
@@ -65,6 +65,7 @@ import org.wicketstuff.select2.ApplicationSettings;
import org.apache.isis.commons.internal.concurrent._ConcurrentContext;
import org.apache.isis.commons.internal.concurrent._ConcurrentTaskList;
import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.commons.internal.resources._Resources;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/WebModuleWicket.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/WebModuleWicket.java
index c045a75..2f85b54 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/WebModuleWicket.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/WebModuleWicket.java
@@ -25,11 +25,11 @@ import javax.servlet.ServletContext;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.webapp.modules.WebModule;
import org.apache.isis.webapp.modules.WebModuleContext;
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
index 0d0f02b..a511d4a 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
@@ -26,7 +26,7 @@ import java.util.stream.Stream;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.spec.ActionType;
import org.apache.isis.metamodel.spec.ObjectSpecification;
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/PrototypingMessageProvider.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/PrototypingMessageProvider.java
index 17dc6d3..6606924 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/PrototypingMessageProvider.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/PrototypingMessageProvider.java
@@ -20,13 +20,13 @@ package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable
import java.util.Locale;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.isis.commons.internal.base._Timing;
import org.apache.isis.commons.internal.base._Timing.StopWatch;
import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.runtime.system.context.IsisContext;
/**
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingBadDomain.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
index 19986ff..74f4fd1 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
@@ -25,7 +25,7 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.TestPropertySource;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.config.IsisPresets;
import org.apache.isis.integtestsupport.validate.ValidateDomainModel;
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/SpecloaderPerformanceTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/SpecloaderPerformanceTest.java
index 157f477..9fd1e1b 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/SpecloaderPerformanceTest.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/SpecloaderPerformanceTest.java
@@ -18,6 +18,8 @@
*/
package org.apache.isis.testdomain.domainmodel;
+import java.time.Duration;
+
import javax.inject.Inject;
import org.junit.jupiter.api.BeforeAll;
@@ -34,6 +36,10 @@ import org.apache.isis.testdomain.Smoketest;
import org.apache.isis.testdomain.conf.Configuration_headless;
import org.apache.isis.testdomain.model.good.Configuration_usingValidDomain;
+import static org.junit.jupiter.api.Assertions.assertTimeout;
+
+import lombok.val;
+
@Smoketest
@SpringBootTest(
classes = {
@@ -60,15 +66,26 @@ class SpecloaderPerformanceTest {
IsisBeanTypeRegistry.repeatedTesting = true;
}
- @Test //under constr.
- void repeatedSpecloading() {
+ static long ITERATIONS = 40; /* should typically run in ~10s */
+ static long EXPECTED_MILLIS_PER_ITERATION = 500;
+
+ @Test
+ void repeatedConcurrentSpecloading_shouldNotDeadlock() {
+
+ config.getReflector().getIntrospector().setParallelize(true);
+
+ val timeOutMillis = ITERATIONS * EXPECTED_MILLIS_PER_ITERATION;
+
+ assertTimeout(Duration.ofMillis(timeOutMillis), ()->{
+
+ for(int i=0; i<ITERATIONS; ++i) {
+ specificationLoader.shutdown();
+ specificationLoader.init();
+ }
+
+ });
- config.getReflector().getIntrospector().setParallelize(false);
- for(int i=0; i<40; ++i) {
- specificationLoader.shutdown();
- specificationLoader.init();
- }
}
diff --git a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list
index b353ffe..dae1651 100644
--- a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list
+++ b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list
@@ -16,7 +16,7 @@ org.apache.isis.applib.services.scratchpad.Scratchpad
org.apache.isis.applib.services.swagger.SwaggerServiceMenu
org.apache.isis.applib.services.tablecol.TableColumnOrderService$Default
org.apache.isis.applib.services.urlencoding.UrlEncodingServiceWithCompression
-org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment
+org.apache.isis.commons.internal.environment.IsisSystemEnvironment
org.apache.isis.config.IsisConfiguration$PatternsConverter
org.apache.isis.config.beans.IsisBeanFactoryPostProcessorForSpring
org.apache.isis.config.beans.WebAppConfigBean
@@ -87,6 +87,6 @@ org.apache.isis.runtime.system.transaction.PersistenceSessionServiceInternalDefa
org.apache.isis.security.authentication.bypass.AuthenticatorBypass
org.apache.isis.security.authentication.manager.AuthorizationManagerStandard
org.apache.isis.security.authentication.standard.AuthenticationManagerStandard
-org.apache.isis.security.authorization.bypass.AuthorizorBypass
+#org.apache.isis.security.authorization.bypass.AuthorizorBypass
org.apache.isis.testdomain.jdo.InventoryResource
org.apache.isis.wrapper.WrapperFactoryDefault
\ No newline at end of file
diff --git a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesLifecyleService.java b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesLifecyleService.java
index f027dca..5f23b49 100644
--- a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesLifecyleService.java
+++ b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesLifecyleService.java
@@ -22,11 +22,11 @@ import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
-import org.apache.isis.commons.internal.plugins.environment.IsisSystemEnvironment;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.clock.Clock;
import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
import org.apache.isis.extensions.fixtures.legacy.FixtureClock;
import org.apache.isis.runtime.system.session.IsisSessionFactory;