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/03/20 20:04:20 UTC
[isis] branch 2033-IoC_spring updated: ISIS-2033: major: replacing
EventBusService by CDI Events
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch 2033-IoC_spring
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/2033-IoC_spring by this push:
new ff407a8 ISIS-2033: major: replacing EventBusService by CDI Events
ff407a8 is described below
commit ff407a829fe7e12d0f1c294156aacb7af67c4ee8
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Mar 20 21:04:10 2019 +0100
ISIS-2033: major: replacing EventBusService by CDI Events
+ using much simple services for framework internal events
+ fixing some provisioning failures
+ working towards having spring boot taking over the bootstrapping
Task-Url: https://issues.apache.org/jira/browse/ISIS-2033
---
.../org/apache/isis/applib/AbstractSubscriber.java | 72 -----------
.../fixturescripts/ExecutionParametersService.java | 10 +-
.../isis/applib/services/clock/ClockService.java | 22 +---
.../applib/services/command/CommandContext.java | 20 ---
.../exceprecog/ExceptionRecognizerAbstract.java | 9 +-
.../fixturespec/FixtureScriptsDefault.java | 17 ++-
.../applib/services/i18n/TranslationService.java | 4 +-
.../isis/applib/services/iactn/Interaction.java | 1 -
.../applib/services/metrics/MetricsService.java | 25 +++-
.../QueryResultsCacheControlInternal.java | 27 ++--
.../applib/services/registry/ServiceRegistry.java | 31 +++--
.../org/apache/isis/commons/internal/cdi/_CDI.java | 142 +++++----------------
.../commons/internal/exceptions/_Exceptions.java | 10 ++
.../apache/isis/core/commons/collections/Bin.java | 49 ++++++-
.../isis/core/commons/collections/Bin_Empty.java | 7 +
.../core/commons/collections/Bin_Multiple.java | 7 +
.../core/commons/collections/Bin_Singleton.java | 7 +
.../org/apache/isis/config/AppConfigLocator.java | 22 +---
.../isis/config/builder/ModulePackageHelper.java | 8 +-
...TypeRegistry.java => IsisBeanTypeRegistry.java} | 43 +++++--
.../apache/isis/config/registry/TypeMetaData.java | 9 +-
.../isis/core/metamodel/MetaModelContexts.java | 25 ++--
.../core/metamodel/facetapi/MetaModelRefiner.java | 7 +-
.../core/metamodel/facets/DomainEventHelper.java | 33 ++---
.../invocation/ActionDomainEventFacetAbstract.java | 2 +-
...ctionInvocationFacetForDomainEventAbstract.java | 2 +-
...ectionAddToFacetForDomainEventFromAbstract.java | 3 +-
.../modify/CollectionDomainEventFacetAbstract.java | 2 +-
...nRemoveFromFacetForDomainEventFromAbstract.java | 3 +-
...assFacetOnActionFromConfiguredRegexFactory.java | 2 +-
...ObjectLayoutAnnotationUsingCssClassUiEvent.java | 31 +++--
...wModelLayoutAnnotationUsingCssClassUiEvent.java | 19 ++-
.../DomainObjectLayoutFacetFactory.java | 21 +--
...mainObjectLayoutAnnotationUsingIconUiEvent.java | 20 +--
...aViewModelLayoutAnnotationUsingIconUiEvent.java | 22 ++--
...inObjectLayoutAnnotationUsingLayoutUiEvent.java | 27 ++--
...iewModelLayoutAnnotationUsingLayoutUiEvent.java | 27 ++--
...ainObjectLayoutAnnotationUsingTitleUiEvent.java | 24 ++--
...ViewModelLayoutAnnotationUsingTitleUiEvent.java | 27 ++--
.../modify/PropertyDomainEventFacetAbstract.java | 2 +-
...tySetterOrClearFacetForDomainEventAbstract.java | 2 +-
.../metamodel/services/ServiceInjectorDefault.java | 23 ++--
.../services/events/MetamodelEventService.java | 63 +++++++++
.../metamodel/MetaModelServiceDefault.java | 2 +-
.../services/registry/ServiceRegistryDefault.java | 7 +-
.../metamodel/specloader/SpecificationLoader.java | 4 +-
.../specimpl/ObjectSpecificationAbstract.java | 6 +-
.../facets/AbstractFacetFactoryJUnit4TestCase.java | 21 ++-
...nEventHelperTest_newActionInteractionEvent.java | 9 +-
...HelperTest_newCollectionDomainEvent_forAdd.java | 6 +-
...perTest_newCollectionDomainEvent_forRemove.java | 6 +-
...HelperTest_newPropertyDomainEvent_forClear.java | 10 +-
...elperTest_newPropertyDomainEvent_forModify.java | 10 +-
.../apache/isis/core/metamodel/facets/Utils.java | 4 +
.../SpecificationLoaderTestAbstract.java | 2 +-
.../isis/core/plugins/ioc/weld/WeldFactory.java | 4 +-
.../SeamConversationContextSupport.java | 2 +-
.../ClassDiscoveryServiceDefault.java | 4 +-
.../applib/services/eventbus/EventBusService.java | 0
.../applib/services/eventbus/package-info.java | 0
.../isis/core/runtime/headless/IsisSystem.java | 2 +-
.../core/webapp/IsisWebAppContextListener.java | 44 ++++---
.../confmenu}/ConfigurationViewServiceDefault.java | 2 +-
.../services/i18n/po/TranslationServicePo.java | 5 +-
.../publish/PublishingServiceInternalDefault.java | 4 -
.../fixtures/FixturesInstallerDelegate.java | 33 +++--
.../core/runtime/system/context/IsisContext.java | 14 +-
.../context/managers/ManagedObjectResolver.java | 7 +-
.../context/managers/UniversalContextManager.java | 3 +-
.../context/managers/UniversalObjectManager.java | 8 +-
.../managers/builtin/MixinContextManager.java | 6 +-
.../managers/builtin/ValueContextManager.java | 7 +-
.../managers/builtin/ViewModelContextManager.java | 5 +-
.../context/managers/cdi/CDIContextManager.java | 12 +-
.../context/session/RuntimeEventService.java | 41 ++++--
.../system/session/IsisSessionFactoryDefault.java | 8 +-
.../system/transaction/IsisTransaction.java | 7 +-
.../wicket/viewer/IsisWicketApplication.java | 12 +-
.../integration/wicket/WebRequestCycleForIsis.java | 7 +-
.../viewer/wicket/model/models/ActionModel.java | 2 +-
.../CollectionContentsAsAjaxTablePanel.java | 18 ++-
.../isis/viewer/wicket/ui/pages/PageAbstract.java | 2 +-
.../wicket/ui/panels/FormExecutorDefault.java | 2 +-
example/application/springapp/pom.xml | 6 +
.../incubator/BeanScanInterceptorForSpring.java | 9 +-
.../src/main/java/isis/incubator/IsisBoot.java | 97 ++++++++++++--
.../boot/web/SpringBootTomcatApplication.java | 17 +--
.../springapp/src/main/webapp/WEB-INF/shiro.ini | 58 +++++++++
88 files changed, 770 insertions(+), 694 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/AbstractSubscriber.java b/core/applib/src/main/java/org/apache/isis/applib/AbstractSubscriber.java
deleted file mode 100644
index f16c3de..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/AbstractSubscriber.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.applib;
-
-import javax.annotation.PostConstruct;
-
-import org.apache.isis.applib.annotation.DomainServiceLayout;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.applib.services.factory.FactoryService;
-import org.apache.isis.applib.services.message.MessageService;
-import org.apache.isis.applib.services.repository.RepositoryService;
-import org.apache.isis.applib.services.title.TitleService;
-import org.apache.isis.applib.services.user.UserService;
-import org.apache.isis.applib.services.xactn.TransactionService;
-
-/**
- * Convenience class for services that act as subscribers.
- */
-@DomainServiceLayout(
- menuOrder = "1"
- )
-public abstract class AbstractSubscriber {
-
- @PostConstruct
- public void postConstruct() {
- eventBusService.register(this);
- }
-
- @Programmatic
- public void preDestroy() {
- eventBusService.unregister(this);
- }
-
- @javax.inject.Inject
- protected MessageService messageService;
-
- @javax.inject.Inject
- protected TitleService titleService;
-
- @javax.inject.Inject
- protected RepositoryService repositoryService;
-
- @javax.inject.Inject
- protected FactoryService factoryService;
-
- @javax.inject.Inject
- protected UserService userService;
-
- @javax.inject.Inject
- protected TransactionService transactionService;
-
- @javax.inject.Inject
- protected EventBusService eventBusService;
-
-}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ExecutionParametersService.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ExecutionParametersService.java
index e119a6e..89dd947 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ExecutionParametersService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ExecutionParametersService.java
@@ -18,9 +18,7 @@
*/
package org.apache.isis.applib.fixturescripts;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.Programmatic;
+import javax.inject.Singleton;
/**
@@ -34,13 +32,9 @@ import org.apache.isis.applib.annotation.Programmatic;
* </p>
* it
*/
-@DomainService(
- nature = NatureOfService.DOMAIN,
- menuOrder = "" + Integer.MAX_VALUE
- )
+@Singleton
public class ExecutionParametersService {
- @Programmatic
public ExecutionParameters newExecutionParameters(final String parameters) {
return new ExecutionParameters(parameters);
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/clock/ClockService.java b/core/applib/src/main/java/org/apache/isis/applib/services/clock/ClockService.java
index c1ef0bc..8c3193f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/clock/ClockService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/clock/ClockService.java
@@ -18,51 +18,37 @@ package org.apache.isis.applib.services.clock;
import java.sql.Timestamp;
+import javax.inject.Singleton;
+
+import org.apache.isis.applib.clock.Clock;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.clock.Clock;
-
/**
* This service allows an application to be decoupled from the system time. The most common use case is in support of
* testing scenarios, to "mock the clock". Use of this service also opens up the use of centralized
* co-ordinated time management through a centralized time service.
- *
- * <p>
- * This service has only one implementation and so is automatically registered. and available for use; no further
- * configuration is required.
*/
-@DomainService(
- nature = NatureOfService.DOMAIN,
- menuOrder = "" + Integer.MAX_VALUE
- )
+@Singleton
public class ClockService {
- @Programmatic
public LocalDate now() {
return Clock.getTimeAsLocalDate();
}
- @Programmatic
public LocalDateTime nowAsLocalDateTime() {
return Clock.getTimeAsLocalDateTime();
}
- @Programmatic
public DateTime nowAsDateTime() {
return Clock.getTimeAsDateTime();
}
- @Programmatic
public Timestamp nowAsJavaSqlTimestamp() {
return Clock.getTimeAsJavaSqlTimestamp();
}
- @Programmatic
public long nowAsMillis() {
return Clock.getTime();
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandContext.java b/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandContext.java
index 1ae1719..0b26c09 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandContext.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandContext.java
@@ -18,33 +18,14 @@ package org.apache.isis.applib.services.command;
import javax.enterprise.context.RequestScoped;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.Programmatic;
-
/**
* This service (API and implementation) provides access to context information about any {@link Command}.
- *
- * This implementation has no UI and there is only one implementation (this class) in applib, so it is annotated with
- * {@link org.apache.isis.applib.annotation.DomainService}. This means that it is automatically registered and
- * available for use; no further configuration is required.
*/
-@DomainService(
- nature = NatureOfService.DOMAIN,
- menuOrder = "" + Integer.MAX_VALUE
- )
@RequestScoped
public class CommandContext {
- @SuppressWarnings("unused")
- private static final Logger LOG = LoggerFactory.getLogger(CommandContext.class);
-
private Command command;
- @Programmatic
public Command getCommand() {
return command;
}
@@ -52,7 +33,6 @@ public class CommandContext {
/**
* <b>NOT API</b>: intended to be called only by the framework.
*/
- @Programmatic
public void setCommand(final Command command) {
this.command = command;
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
index 1e2e3b4..3a45519 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
@@ -24,14 +24,14 @@ import java.util.function.Predicate;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import javax.inject.Inject;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.services.i18n.TranslatableString;
import org.apache.isis.applib.services.i18n.TranslationService;
import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Abstract implementation of {@link ExceptionRecognizer} that looks
@@ -155,7 +155,6 @@ public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer
return Recognition.of(category, recognize(ex));
}
- @javax.inject.Inject
- protected TranslationService translationService;
+ @Inject protected TranslationService translationService;
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsDefault.java b/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsDefault.java
index 7665d3d..55cd6b3 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsDefault.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsDefault.java
@@ -21,9 +21,11 @@ package org.apache.isis.applib.services.fixturespec;
import java.util.List;
import javax.annotation.PostConstruct;
+import javax.enterprise.event.Event;
import javax.enterprise.inject.Any;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
+import javax.inject.Singleton;
import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.ActionLayout;
@@ -41,7 +43,6 @@ import org.apache.isis.applib.fixturescripts.FixtureScript;
import org.apache.isis.applib.fixturescripts.FixtureScripts;
import org.apache.isis.applib.fixturescripts.events.FixturesInstalledEvent;
import org.apache.isis.applib.fixturescripts.events.FixturesInstallingEvent;
-import org.apache.isis.applib.services.eventbus.EventBusService;
/**
* Default instance of {@link FixtureScripts}, instantiated automatically by the framework if no custom user-defined instance was
@@ -73,6 +74,7 @@ import org.apache.isis.applib.services.eventbus.EventBusService;
menuBar = DomainServiceLayout.MenuBar.SECONDARY,
menuOrder = "500.10"
)
+@Singleton
public class FixtureScriptsDefault extends FixtureScripts {
// -- constructor, init
@@ -82,6 +84,9 @@ public class FixtureScriptsDefault extends FixtureScripts {
*/
public static final String PACKAGE_PREFIX = FixtureScriptsDefault.class.getPackage().getName();
+ @Inject private Event<FixturesInstallingEvent> fixturesInstallingEvent;
+ @Inject private Event<FixturesInstalledEvent> fixturesInstalledEvent;
+
public FixtureScriptsDefault() {
super(FixtureScriptsSpecification.builder(PACKAGE_PREFIX)
.build());
@@ -97,8 +102,7 @@ public class FixtureScriptsDefault extends FixtureScripts {
setSpecification(fixtureScriptsSpecificationProviders.get().getSpecification());
}
-
-
+
// -- runFixtureScript (using choices as the drop-down policy)
@Action(
restrictTo = RestrictTo.PROTOTYPING
@@ -118,10 +122,10 @@ public class FixtureScriptsDefault extends FixtureScripts {
@Parameter(optionality = Optionality.OPTIONAL)
final String parameters) {
try {
- eventBusService.post(new FixturesInstallingEvent(this));
+ fixturesInstallingEvent.fire(new FixturesInstallingEvent(this));
return super.runFixtureScript(fixtureScript, parameters);
} finally {
- eventBusService.post(new FixturesInstalledEvent(this));
+ fixturesInstalledEvent.fire(new FixturesInstalledEvent(this));
}
}
@@ -239,7 +243,6 @@ public class FixtureScriptsDefault extends FixtureScripts {
// -- injected services
@Inject @Any Instance<FixtureScriptsSpecificationProvider> fixtureScriptsSpecificationProviders;
- @Inject EventBusService eventBusService;
-
+
}
\ No newline at end of file
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationService.java b/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationService.java
index 97fdc83..d4d163d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationService.java
@@ -58,8 +58,8 @@ public interface TranslationService {
("disable".equalsIgnoreCase(configValue) ||
"disabled".equalsIgnoreCase(configValue))),
READ(configValue->configValue != null &&
- ("read".equalsIgnoreCase(configValue) ||
- "reader".equalsIgnoreCase(configValue))),
+ ("read".equalsIgnoreCase(configValue) ||
+ "reader".equalsIgnoreCase(configValue))),
// default
WRITE(configValue->!READ.matches(configValue) && !DISABLED.matches(configValue));
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java b/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java
index 176c446..ba8ffe8 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java
@@ -38,7 +38,6 @@ import org.apache.isis.applib.events.domain.PropertyDomainEvent;
import org.apache.isis.applib.services.HasUniqueId;
import org.apache.isis.applib.services.clock.ClockService;
import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.applib.services.metrics.MetricsService;
import org.apache.isis.applib.services.wrapper.WrapperFactory;
import org.apache.isis.applib.services.xactn.Transaction;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java b/core/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java
index 7a3ac57..ac099a8 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java
@@ -18,7 +18,10 @@
*/
package org.apache.isis.applib.services.metrics;
-import org.apache.isis.applib.annotation.Programmatic;
+import javax.annotation.Priority;
+import javax.enterprise.inject.Alternative;
+import javax.inject.Singleton;
+
import org.apache.isis.applib.services.iactn.InteractionContext;
import org.apache.isis.schema.ixn.v1.MemberExecutionDto;
@@ -35,7 +38,6 @@ public interface MetricsService {
* Is captured within {@link MemberExecutionDto#getMetrics()} (accessible from {@link InteractionContext#getInteraction()}).
* </p>
*/
- @Programmatic
int numberObjectsLoaded();
/**
@@ -50,10 +52,27 @@ public interface MetricsService {
* Is captured within {@link MemberExecutionDto#getMetrics()} (accessible from {@link InteractionContext#getInteraction()}).
* </p>
*/
- @Programmatic
int numberObjectsDirtied();
+ /**
+ * @since 2.0.0-M3
+ */
+ @Singleton @Alternative @Priority(-10)
+ public static class MetricsServiceNoop implements MetricsService {
+
+ @Override
+ public int numberObjectsLoaded() {
+ return 0;
+ }
+
+ @Override
+ public int numberObjectsDirtied() {
+ return 0;
+ }
+
+ }
+
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheControlInternal.java b/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheControlInternal.java
index ec6752f..450a99e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheControlInternal.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheControlInternal.java
@@ -16,11 +16,9 @@
*/
package org.apache.isis.applib.services.queryresultscache;
-import javax.annotation.PostConstruct;
+import javax.enterprise.event.Observes;
import javax.inject.Singleton;
-import org.apache.isis.applib.AbstractSubscriber;
-import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.fixturescripts.events.FixturesInstalledEvent;
import org.apache.isis.applib.fixturescripts.events.FixturesInstallingEvent;
@@ -29,27 +27,18 @@ import org.apache.isis.applib.fixturescripts.events.FixturesInstallingEvent;
* In separate class because {@link QueryResultsCache} itself is request-scoped
*/
@Singleton
-public class QueryResultsCacheControlInternal extends AbstractSubscriber implements QueryResultCacheControl {
-
- @PostConstruct
- @Override
- public void postConstruct() {
-
- super.postConstruct();
-
- eventBusService.addEventListener(FixturesInstallingEvent.class, ev->{
- fixturesInstalling = true;
- });
-
- eventBusService.addEventListener(FixturesInstalledEvent.class, ev->{
- fixturesInstalling = false;
- });
+public class QueryResultsCacheControlInternal implements QueryResultCacheControl {
+ void onFixturesInstalling(@Observes FixturesInstallingEvent event){
+ fixturesInstalling = true;
+ }
+
+ void onFixturesInstalled(@Observes FixturesInstalledEvent event){
+ fixturesInstalling = false;
}
private boolean fixturesInstalling;
- @Programmatic
@Override
public boolean isFixturesInstalling() {
return fixturesInstalling;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java b/core/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
index 3e6771a..8431393 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
@@ -33,6 +33,7 @@ import org.apache.isis.commons.internal._Constants;
import org.apache.isis.commons.internal.base._Reduction;
import org.apache.isis.commons.internal.cdi._CDI;
import org.apache.isis.commons.internal.reflection._Reflect;
+import org.apache.isis.core.commons.collections.Bin;
import lombok.Value;
import lombok.val;
@@ -59,18 +60,18 @@ public interface ServiceRegistry {
* @return an optional, empty if passed two instances of the same qualifier type, or an
* instance of an annotation that is not a qualifier type
*/
- default public <T> Instance<T> getInstance(
+ default public <T> Bin<T> select(
final Class<T> type, Annotation[] qualifiers){
- val optionalInstance = qualifiers!=null
- ? _CDI.getInstance(type, _CDI.filterQualifiers(qualifiers))
- : _CDI.getInstance(type);
+ val bin = qualifiers!=null
+ ? _CDI.select(type, _CDI.filterQualifiers(qualifiers))
+ : _CDI.select(type);
- return optionalInstance.orElse(_CDI.InstanceFactory.empty());
+ return bin;
}
- default public <T> Instance<T> getInstance(final Class<T> type){
- return getInstance(type, _Constants.emptyAnnotations);
+ default public <T> Bin<T> select(final Class<T> type){
+ return select(type, _Constants.emptyAnnotations);
}
/**
@@ -94,12 +95,12 @@ public interface ServiceRegistry {
*/
default public <T> Optional<T> lookupService(final Class<T> serviceClass) {
- val instance = getInstance(serviceClass);
- if(instance.isUnsatisfied()) {
+ val bin = select(serviceClass);
+ if(bin.isEmpty()) {
return Optional.empty();
}
- if(instance.isResolvable()) {
- return Optional.of(instance.get());
+ if(bin.isCardinalityOne()) {
+ return bin.getSingleton();
}
// dealing with ambiguity, get the one, with highest priority annotated
@@ -108,7 +109,7 @@ public interface ServiceRegistry {
//TODO [2033] not tested yet, whether the 'direction' is correct < vs >
_Reduction.<T>of((max, next)-> prioComparator.leftIsHigherThanRight(next, max) ? next : max);
- instance.forEach(toMaxPrioReduction);
+ bin.forEach(toMaxPrioReduction);
return toMaxPrioReduction.getResult();
}
@@ -169,11 +170,9 @@ public interface ServiceRegistry {
private final Bean<?> bean;
private final boolean domainService;
- public Instance<?> getInstance() {
+ public Bin<?> getInstance() {
val type = bean.getBeanClass();
- val instance = _CDI.getInstance(type, bean.getQualifiers())
- .orElse(_CDI.InstanceFactory.empty());
- return instance;
+ return _CDI.select(type, bean.getQualifiers());
}
public boolean isCandidateFor(Class<?> requiredType) {
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/cdi/_CDI.java b/core/commons/src/main/java/org/apache/isis/commons/internal/cdi/_CDI.java
index 4d22988..9d1e2cd 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/cdi/_CDI.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/cdi/_CDI.java
@@ -27,16 +27,13 @@ import java.util.Collection;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
-import java.util.Queue;
import java.util.Set;
-import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
import javax.enterprise.inject.Any;
-import javax.enterprise.inject.Instance;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.CDI;
@@ -44,14 +41,12 @@ import javax.enterprise.inject.spi.CDIProvider;
import javax.enterprise.util.AnnotationLiteral;
import javax.inject.Qualifier;
-import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.commons.internal.functions._Functions.CheckedRunnable;
+import org.apache.isis.core.commons.collections.Bin;
import org.apache.isis.core.plugins.ioc.IocPlugin;
-import lombok.val;
-
/**
* <h1>- internal use only -</h1>
* <p>
@@ -63,7 +58,7 @@ import lombok.val;
* @since 2.0.0-M2
*/
public final class _CDI {
-
+
/**
* Bootstrap CDI if not already present.
* @param onDiscover - Packages of the specified (stream of) classes will be scanned and found classes
@@ -108,54 +103,31 @@ public final class _CDI {
* Obtains a child Instance for the given required type and additional required qualifiers.
* @param subType
* @param qualifiers
- * @return an optional, empty if passed two instances of the same qualifier type, or an
- * instance of an annotation that is not a qualifier type
- */
- public static <T> Optional<T> getManagedBean(final Class<T> subType, Collection<Annotation> qualifiers) {
- return getInstance(subType, qualifiers)
- .map(instance->tryGet(instance::get));
- }
-
- /**
- * Obtains a child Instance for the given required type and additional required qualifiers.
- * @param subType
- * @param qualifiers
- * @return an optional, empty if passed two instances of the same qualifier type, or an
- * instance of an annotation that is not a qualifier type
- */
- public static <T> Optional<T> getManagedBean(final Class<T> subType) {
- return getInstance(subType)
- .map(instance->tryGet(instance::get));
- }
-
- /**
- * Obtains a child Instance for the given required type and additional required qualifiers.
- * @param subType
- * @param qualifiers
- * @return an optional, empty if passed two instances of the same qualifier type, or an
- * instance of an annotation that is not a qualifier type
+ * @return non-null {@code Bin}
*/
- public static <T> Optional<Instance<T>> getInstance(final Class<T> subType, Collection<Annotation> qualifiers) {
+ public static <T> Bin<T> select(final Class<T> subType, Collection<Annotation> qualifiers) {
if(isEmpty(qualifiers)) {
- return getInstance(subType);
+ return select(subType);
}
final Annotation[] _qualifiers = qualifiers.toArray(new Annotation[] {});
return cdi()
- .map(cdi->tryGet(()->cdi.select(subType, _qualifiers)));
+ .map(cdi->tryGet(()->cdi.select(subType, _qualifiers)))
+ .map(instance->Bin.ofInstance(instance))
+ .orElse(Bin.empty());
}
/**
* Obtains a child Instance for the given required type and additional required qualifiers.
* @param subType
- * @param qualifiers
- * @return an optional, empty if passed two instances of the same qualifier type, or an
- * instance of an annotation that is not a qualifier type
+ * @return non-null {@code Bin}
*/
- public static <T> Optional<Instance<T>> getInstance(final Class<T> subType) {
+ public static <T> Bin<T> select(final Class<T> subType) {
return cdi()
- .map(cdi->tryGet(()->cdi.select(subType)));
+ .map(cdi->tryGet(()->cdi.select(subType)))
+ .map(instance->Bin.ofInstance(instance))
+ .orElse(Bin.empty());
}
@@ -185,34 +157,23 @@ public final class _CDI {
// -- GENERIC SINGLETON RESOLVING
/**
- * @return framework's managed singleton
- * @throws NoSuchElementException - if the singleton is not resolvable
+ * @return CDI managed singleton wrapped in an Optional
*/
- public static <T> T getSingleton(Class<T> type) {
- // first lookup CDI, then lookup _Context; the latter to support unit testing
- return _CDI.getManagedBean(type)
- .orElseGet(()->getMockedSingleton(type));
+ public static <T> Optional<T> getSingleton(@Nullable Class<T> type) {
+ if(type==null) {
+ return Optional.empty();
+ }
+ return _CDI.select(type).getSingleton();
}
-
- // -- UNIT TESTING SUPPORT
-
-// public static void putMockedSingletons(Collection<?> mockedServices) {
-// stream(mockedServices)
-// .forEach(_CDI::putMockedSingleton);
-// }
-//
-// public static <T> T putMockedSingleton(T mockedService) {
-// return putMockedSingleton(_Casts.uncheckedCast(mockedService.getClass()), mockedService);
-// }
-//
-// public static <T> T putMockedSingleton(Class<T> type, T mockedService) {
-// _Context.putSingleton(type, mockedService);
-// return mockedService;
-// }
- private static <T> T getMockedSingleton(Class<T> type) {
- requires(type, "type");
- return _Context.getElseFail(type);
+ /**
+ * @return CDI managed singleton
+ * @throws NoSuchElementException - if the singleton is not resolvable
+ */
+ public static <T> T getSingletonElseFail(@Nullable Class<T> type) {
+ return getSingleton(type)
+ .orElseThrow(()->_Exceptions.noSuchElement("Cannot resolve singleton '%s'", type));
+
}
// -- ENUMERATE BEANS
@@ -226,53 +187,6 @@ public final class _CDI {
Set<Bean<?>> beans = beanManager.getBeans(Object.class, _CDI.QUALIFIER_ANY);
return beans.stream();
}
-
- // -- FACTORIES
-
- public static class InstanceFactory {
-
- public static <T> Instance<T> empty() {
- return new _CDI_EmptyInstance<>();
- }
-
- public static <T> Instance<T> singleton(@Nullable T pojo) {
- if(pojo==null) {
- return empty();
- }
- return _CDI_SingletonInstance.of(pojo);
- }
-
- public static <T> Instance<T> ambiguous(@Nullable Collection<T> collection) {
- val size = _NullSafe.size(collection);
- if(size==0) {
- return empty();
- }
- if(size==1) {
- if(collection instanceof List) {
- // just to reduce heap pollution when collection is a list
- return singleton(((List<T>)collection).get(0));
- }
- return singleton(collection.iterator().next());
- }
- return _CDI_AmbiguousInstance.of(collection);
- }
-
- public static <T, R> Instance<R> mapElements(Instance<T> instance, Function<T, R> elementMapper) {
-
- if(instance.isUnsatisfied()) {
- return empty();
- }
- if(instance.isResolvable()) {
- val element = instance.get();
- return singleton(elementMapper.apply(element));
- }
- val elements = instance.stream()
- .map(elementMapper)
- .collect(Collectors.toList());
- return _CDI_AmbiguousInstance.of(elements);
- }
-
- }
// -- HELPER
@@ -298,6 +212,8 @@ public final class _CDI {
return null;
}
}
+
+
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
index 7365047..c191db3 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
@@ -25,6 +25,7 @@ import static org.apache.isis.commons.internal.base._With.requires;
import java.io.PrintStream;
import java.util.Collections;
import java.util.List;
+import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -73,7 +74,16 @@ public final class _Exceptions {
requires(format, "format");
return new IllegalArgumentException(String.format(format, _case));
}
+
+ public static final NoSuchElementException noSuchElement(String msg) {
+ return new NoSuchElementException(msg);
+ }
+ public static final NoSuchElementException noSuchElement(String format, Object ...args) {
+ requires(format, "format");
+ return noSuchElement(String.format(format, args));
+ }
+
public static final IllegalStateException unexpectedCodeReach() {
return new IllegalStateException("internal error: code was reached, that is expected unreachable");
}
diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin.java b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin.java
index 7cd511c..2d565a0 100644
--- a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin.java
+++ b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin.java
@@ -6,11 +6,14 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
+import java.util.function.Consumer;
+import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
+import javax.enterprise.inject.Instance;
import org.apache.isis.commons.internal.base._NullSafe;
@@ -23,7 +26,7 @@ import lombok.val;
* @param <T>
* @since 2.0.0-M3
*/
-public interface Bin<T> {
+public interface Bin<T> extends Iterable<T> {
Cardinality getCardinality();
int size();
@@ -79,6 +82,21 @@ public interface Bin<T> {
return Bin_Multiple.of(nonNullElements);
}
+ public static <T> Bin<T> ofInstance(@Nullable Instance<T> instance) {
+ if(instance==null || instance.isUnsatisfied()) {
+ return empty();
+ }
+ if(instance.isResolvable()) {
+ return Bin_Singleton.of(instance.get());
+ }
+ val nonNullElements = instance.stream()
+ .collect(Collectors.toCollection(()->new ArrayList<>()));
+
+ return Bin_Multiple.of(nonNullElements);
+
+ }
+
+
// -- OPERATORS
public default Bin<T> filter(@Nullable Predicate<? super T> predicate) {
@@ -121,6 +139,29 @@ public interface Bin<T> {
return Bin_Multiple.of(union);
}
+ default <R> Bin<R> map(Function<? super T, R> mapper) {
+
+ if(isEmpty()) {
+ return empty();
+ }
+
+ requires(mapper, "mapper");
+
+ val mappedElements =
+ stream()
+ .map(mapper)
+ .filter(_NullSafe::isPresent)
+ .collect(Collectors.toCollection(ArrayList::new));
+
+ return ofCollection(mappedElements);
+ }
+
+ // -- TRAVERSAL
+
+ default void forEach(Consumer<? super T> action) {
+ requires(action, "action");
+ stream().forEach(action);
+ }
// -- SHORTCUTS FOR PREDICATES
@@ -140,11 +181,5 @@ public interface Bin<T> {
return getCardinality().isMultiple();
}
-
-
-
- // -- SHORTCUTS FOR ELEMENT ACCESS
-
-
}
diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin_Empty.java b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin_Empty.java
index c419fdb..c6b9783 100644
--- a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin_Empty.java
+++ b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin_Empty.java
@@ -1,5 +1,7 @@
package org.apache.isis.core.commons.collections;
+import java.util.Collections;
+import java.util.Iterator;
import java.util.Optional;
import java.util.stream.Stream;
@@ -35,4 +37,9 @@ final class Bin_Empty<T> implements Bin<T> {
return 0;
}
+ @Override
+ public Iterator<T> iterator() {
+ return Collections.<T>emptyList().iterator();
+ }
+
}
diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin_Multiple.java b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin_Multiple.java
index 47af06d..7d6fc5f 100644
--- a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin_Multiple.java
+++ b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin_Multiple.java
@@ -1,5 +1,7 @@
package org.apache.isis.core.commons.collections;
+import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
@@ -35,4 +37,9 @@ final class Bin_Multiple<T> implements Bin<T> {
return elements.size();
}
+ @Override
+ public Iterator<T> iterator() {
+ return Collections.unmodifiableList(elements).iterator();
+ }
+
}
diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin_Singleton.java b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin_Singleton.java
index acb92a6..11ef069 100644
--- a/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin_Singleton.java
+++ b/core/commons/src/main/java/org/apache/isis/core/commons/collections/Bin_Singleton.java
@@ -1,5 +1,7 @@
package org.apache.isis.core.commons.collections;
+import java.util.Collections;
+import java.util.Iterator;
import java.util.Optional;
import java.util.stream.Stream;
@@ -34,4 +36,9 @@ final class Bin_Singleton<T> implements Bin<T> {
return 1;
}
+ @Override
+ public Iterator<T> iterator() {
+ return Collections.singletonList(element).iterator();
+ }
+
}
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 c6789e3..e478769 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
@@ -32,15 +32,12 @@ import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.commons.internal.context._Plugin;
import org.apache.isis.commons.internal.debug._Probe;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.config.registry.BeanTypeRegistry;
import org.apache.isis.core.commons.exceptions.IsisException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import lombok.val;
import lombok.extern.slf4j.Slf4j;
-@Slf4j
+@Slf4j @Deprecated //TODO [2033] was introduced for refactoring, remove
public final class AppConfigLocator {
private AppConfigLocator() { }
@@ -118,7 +115,7 @@ public final class AppConfigLocator {
try {
val type = _Context.loadClassAndInitialize(serviceClassName);
- if(!_CDI.getManagedBean(type).isPresent()) {
+ if(_CDI.select(type).isEmpty()) {
throw new NoSuchElementException(String.format("No such bean known to CDI."));
};
@@ -157,15 +154,6 @@ public final class AppConfigLocator {
AppConfig appConfig;
- appConfig = lookupAppConfig_UsingFrameworkContext();
- if(appConfig!=null) {
- log.info(String.format("Located AppConfig on framework's context '%s'.", appConfig.getClass().getName()));
-
- // assuming, we need to bootstrap CDI ourself
- _CDI.init(()->BeanTypeRegistry.current().streamInbox());
- return appConfig;
- }
-
appConfig = lookupAppConfig_UsingCDI();
if(appConfig!=null) {
log.info(String.format("Located AppConfig '%s' via CDI.", appConfig.getClass().getName()));
@@ -201,12 +189,8 @@ public final class AppConfigLocator {
throw new IsisException("Failed to locate the AppConfig");
}
- private static AppConfig lookupAppConfig_UsingFrameworkContext() {
- return _Context.getIfAny(AppConfig.class);
- }
-
private static AppConfig lookupAppConfig_UsingCDI() {
- return _CDI.getManagedBean(AppConfig.class).orElse(null);
+ return _CDI.select(AppConfig.class).getSingleton().orElse(null);
}
private static AppConfig lookupAppConfig_UsingServiceLoader() {
diff --git a/core/config/src/main/java/org/apache/isis/config/builder/ModulePackageHelper.java b/core/config/src/main/java/org/apache/isis/config/builder/ModulePackageHelper.java
index 4ce5d67..71d423a 100644
--- a/core/config/src/main/java/org/apache/isis/config/builder/ModulePackageHelper.java
+++ b/core/config/src/main/java/org/apache/isis/config/builder/ModulePackageHelper.java
@@ -46,7 +46,7 @@ import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.commons.internal.reflection._Reflect;
-import org.apache.isis.config.registry.BeanTypeRegistry;
+import org.apache.isis.config.registry.IsisBeanTypeRegistry;
import org.apache.isis.core.plugins.classdiscovery.ClassDiscovery;
import org.apache.isis.core.plugins.classdiscovery.ClassDiscoveryPlugin;
@@ -98,7 +98,7 @@ class ModulePackageHelper {
val typesForScanning = new HashSet<Class<?>>();
- BeanTypeRegistry.FRAMEWORK_PROVIDED_TYPES_FOR_SCANNING.stream()
+ IsisBeanTypeRegistry.FRAMEWORK_PROVIDED_TYPES_FOR_SCANNING.stream()
.map(name -> {
try {
return _Context.loadClass(name);
@@ -116,10 +116,10 @@ class ModulePackageHelper {
//FIXME [2033] at this point we should have all we need, let CDI take over
// and let the CDI Bean intercepter make entries into the registry
- final BeanTypeRegistry registry = BeanTypeRegistry.current();
+ final IsisBeanTypeRegistry registry = IsisBeanTypeRegistry.current();
final Set<String> moduleAndFrameworkPackages = new HashSet<>();
- moduleAndFrameworkPackages.addAll(BeanTypeRegistry.FRAMEWORK_PROVIDED_SERVICE_PACKAGES);
+ moduleAndFrameworkPackages.addAll(IsisBeanTypeRegistry.FRAMEWORK_PROVIDED_SERVICE_PACKAGES);
modulePackageNamesFrom(appManifest)
.forEach(moduleAndFrameworkPackages::add);
moduleAndFrameworkPackages.add(appManifest.getClass().getPackage().getName());
diff --git a/core/config/src/main/java/org/apache/isis/config/registry/BeanTypeRegistry.java b/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
similarity index 77%
rename from core/config/src/main/java/org/apache/isis/config/registry/BeanTypeRegistry.java
rename to core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
index 1409b03..45f0a6e 100644
--- a/core/config/src/main/java/org/apache/isis/config/registry/BeanTypeRegistry.java
+++ b/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
@@ -10,6 +10,7 @@ import java.util.stream.Stream;
import org.apache.isis.applib.fixturescripts.FixtureScript;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.debug._Probe;
import lombok.Getter;
@@ -17,14 +18,18 @@ import lombok.Getter;
* Holds the set of domain services, persistent entities and fixture scripts.services etc.
* @since 2.0.0-M3
*/
-public final class BeanTypeRegistry implements AutoCloseable {
+public final class IsisBeanTypeRegistry implements AutoCloseable {
- public static BeanTypeRegistry current() {
- return _Context.computeIfAbsent(BeanTypeRegistry.class, BeanTypeRegistry::new);
+ private final static _Probe probe = _Probe.unlimited().label(IsisBeanTypeRegistry.class.getSimpleName());
+
+ public static IsisBeanTypeRegistry current() {
+ return _Context.computeIfAbsent(IsisBeanTypeRegistry.class, IsisBeanTypeRegistry::new);
}
private final Set<Class<?>> inbox = new HashSet<>();
-
+
+ //TODO replace this getters: don't expose the sets for modification!?
+ @Getter private final Set<Class<?>> cdiManaged = new HashSet<>();
@Getter private final Set<Class<?>> entityTypes = new HashSet<>();
@Getter private final Set<Class<?>> mixinTypes = new HashSet<>();
@Getter private final Set<Class<? extends FixtureScript>> fixtureScriptTypes = new HashSet<>();
@@ -53,7 +58,9 @@ public final class BeanTypeRegistry implements AutoCloseable {
public Stream<Class<?>> streamAllTypes() {
- return _Lists.of(entityTypes,
+ return _Lists.of(
+ cdiManaged,
+ entityTypes,
mixinTypes,
fixtureScriptTypes,
domainServiceTypes,
@@ -61,6 +68,7 @@ public final class BeanTypeRegistry implements AutoCloseable {
viewModelTypes,
xmlElementTypes)
.stream()
+ .distinct()
.flatMap(Collection::stream)
;
}
@@ -77,7 +85,7 @@ public final class BeanTypeRegistry implements AutoCloseable {
* Implemented as a one-shot, that clears the inbox afterwards.
* @return
*/
- public Stream<Class<?>> streamInbox() {
+ public Stream<Class<?>> streamAndClearInbox() {
final List<Class<?>> defensiveCopy;
@@ -86,16 +94,24 @@ public final class BeanTypeRegistry implements AutoCloseable {
inbox.clear();
}
+ defensiveCopy.forEach(cls->{
+ probe.println("stream inbox: " + cls.getName());
+ });
+
return defensiveCopy.stream();
}
+ public Stream<Class<?>> streamCdiManaged() {
+ return cdiManaged.stream();
+ }
+
// -- FILTER
//FIXME[2033] don't categorize this early, instead push candidate classes onto a queue for
// later processing when the SpecLoader initializes.
public boolean isManagedType(TypeMetaData typeMetaData) {
boolean toInbox = false;
- boolean manage = false;
+ boolean toCdi = false;
if(typeMetaData.hasDomainServiceAnnotation()) {
//domainServiceTypes.add(typeMetaData.getUnderlyingClass());
@@ -112,12 +128,19 @@ public final class BeanTypeRegistry implements AutoCloseable {
toInbox = true;
}
- if(typeMetaData.hasSingletonAnnotation()) {
- manage = true;
+ if(typeMetaData.hasSingletonAnnotation() ||
+ typeMetaData.hasRequestScopedAnnotation()) {
+ toCdi = true;
+ }
+
+ if(toCdi) {
+ cdiManaged.add(typeMetaData.getUnderlyingClass());
+ probe.println("addTo CDI: " + typeMetaData.getUnderlyingClass().getName());
}
if(toInbox) {
addToInbox(typeMetaData.getUnderlyingClass());
+ probe.println("addTo inbox: " + typeMetaData.getUnderlyingClass().getName());
}
return false;
@@ -147,7 +170,7 @@ public final class BeanTypeRegistry implements AutoCloseable {
"org.apache.isis.core.metamodel.MetamodelModule",
"org.apache.isis.core.runtime.RuntimeModule",
"org.apache.isis.core.runtime.services.RuntimeServicesModule",
- "org.apache.isis.jdo.JdoModule",
+// "org.apache.isis.jdo.JdoModule",
"org.apache.isis.viewer.restfulobjects.rendering.RendererContext"
);
diff --git a/core/config/src/main/java/org/apache/isis/config/registry/TypeMetaData.java b/core/config/src/main/java/org/apache/isis/config/registry/TypeMetaData.java
index bb0657d..5171899 100644
--- a/core/config/src/main/java/org/apache/isis/config/registry/TypeMetaData.java
+++ b/core/config/src/main/java/org/apache/isis/config/registry/TypeMetaData.java
@@ -25,6 +25,10 @@ public class TypeMetaData {
return annotationTypes.contains(singletonAnnotation);
}
+ public boolean hasRequestScopedAnnotation() {
+ return annotationTypes.contains(requestScopedAnnotation);
+ }
+
public boolean hasDomainServiceAnnotation() {
return annotationTypes.contains(domainServiceAnnotation);
}
@@ -53,7 +57,10 @@ public class TypeMetaData {
}
}
- private final static String singletonAnnotation = javax.inject.Singleton.class.getName();
+ private final static String singletonAnnotation =
+ javax.inject.Singleton.class.getName();
+ private final static String requestScopedAnnotation =
+ javax.enterprise.context.RequestScoped.class.getName();
private final static String domainServiceAnnotation =
org.apache.isis.applib.annotation.DomainService.class.getName();
private final static String domainObjectAnnotation =
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/MetaModelContexts.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/MetaModelContexts.java
index 47a8c17..681912d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/MetaModelContexts.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/MetaModelContexts.java
@@ -35,7 +35,6 @@ import org.apache.isis.commons.internal.cdi._CDI;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.config.internal._Config;
-import org.apache.isis.core.commons.ensure.Assert;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
import org.apache.isis.core.metamodel.services.ServiceUtil;
@@ -65,51 +64,51 @@ public final class MetaModelContexts {
@Getter(lazy=true)
private final ObjectAdapterProvider objectAdapterProvider =
- _CDI.getSingleton(ObjectAdapterProvider.class);
+ _CDI.getSingletonElseFail(ObjectAdapterProvider.class);
@Getter(lazy=true)
private final ServiceInjector serviceInjector =
- _CDI.getSingleton(ServiceInjector.class);
+ _CDI.getSingletonElseFail(ServiceInjector.class);
@Getter(lazy=true)
private final ServiceRegistry serviceRegistry =
- _CDI.getSingleton(ServiceRegistry.class);
+ _CDI.getSingletonElseFail(ServiceRegistry.class);
@Getter(lazy=true)
private final SpecificationLoader specificationLoader =
- _CDI.getSingleton(SpecificationLoader.class);
+ _CDI.getSingletonElseFail(SpecificationLoader.class);
@Getter(lazy=true)
private final AuthenticationSessionProvider authenticationSessionProvider =
- _CDI.getSingleton(AuthenticationSessionProvider.class);
+ _CDI.getSingletonElseFail(AuthenticationSessionProvider.class);
@Getter(lazy=true)
private final TranslationService translationService =
- _CDI.getSingleton(TranslationService.class);
+ _CDI.getSingletonElseFail(TranslationService.class);
@Getter(lazy=true)
private final AuthorizationManager authorizationManager =
- _CDI.getSingleton(AuthorizationManager.class);
+ _CDI.getSingletonElseFail(AuthorizationManager.class);
@Getter(lazy=true)
private final AuthenticationManager authenticationManager =
- _CDI.getSingleton(AuthenticationManager.class);
+ _CDI.getSingletonElseFail(AuthenticationManager.class);
@Getter(lazy=true)
private final TitleService titleService =
- _CDI.getSingleton(TitleService.class);
+ _CDI.getSingletonElseFail(TitleService.class);
@Getter(lazy=true)
private final ObjectAdapterService objectAdapterService =
- _CDI.getSingleton(ObjectAdapterService.class);
+ _CDI.getSingletonElseFail(ObjectAdapterService.class);
@Getter(lazy=true)
private final RepositoryService repositoryService =
- _CDI.getSingleton(RepositoryService.class);
+ _CDI.getSingletonElseFail(RepositoryService.class);
@Getter(lazy=true)
private final TransactionService transactionService =
- _CDI.getSingleton(TransactionService.class);
+ _CDI.getSingletonElseFail(TransactionService.class);
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelRefiner.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelRefiner.java
index 98d56c0..c30d6db 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelRefiner.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelRefiner.java
@@ -45,9 +45,10 @@ public interface MetaModelRefiner extends MetaModelValidatorRefiner {
val context = MetaModelContext.current();
val serviceRegistry = context.getServiceRegistry();
- val instance = serviceRegistry.getInstance(MetaModelRefiner.class);
- val refiners = instance.stream()
- .collect(Collectors.toList());
+
+ val refiners = serviceRegistry.select(MetaModelRefiner.class)
+ .stream()
+ .collect(Collectors.toList());
return refiners;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
index a26da48..57c8a11 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
@@ -35,22 +35,26 @@ import org.apache.isis.applib.events.domain.ActionDomainEvent;
import org.apache.isis.applib.events.domain.CollectionDomainEvent;
import org.apache.isis.applib.events.domain.PropertyDomainEvent;
import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
+import org.apache.isis.core.metamodel.services.events.MetamodelEventService;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-public class DomainEventHelper {
-
- private final ServiceRegistry serviceRegistry;
+import lombok.RequiredArgsConstructor;
+import lombok.val;
+@RequiredArgsConstructor(staticName = "ofEventService")
+public class DomainEventHelper {
- public DomainEventHelper(final ServiceRegistry serviceRegistry) {
- this.serviceRegistry = serviceRegistry;
- }
+ public static DomainEventHelper ofServiceRegistry(final ServiceRegistry serviceRegistry) {
+ val eventService = serviceRegistry.lookupServiceElseFail(MetamodelEventService.class);
+ return ofEventService(eventService);
+ }
+
+ private final MetamodelEventService metamodelEventService;
// -- postEventForAction, newActionDomainEvent
@@ -110,7 +114,7 @@ public class DomainEventHelper {
event.setReturnValue(ObjectAdapter.Util.unwrapPojo(resultAdapter));
}
- getEventBusService().post(event);
+ metamodelEventService.fireActionDomainEvent(event);
return event;
} catch (Exception e) {
throw new FatalException(e);
@@ -203,7 +207,7 @@ public class DomainEventHelper {
// just in case the actual new value held by the object is different from that applied
setEventNewValue(event, newValue);
- this.getEventBusService().post(event);
+ metamodelEventService.firePropertyDomainEvent(event);
return event;
} catch (Exception e) {
throw new FatalException(e);
@@ -293,7 +297,7 @@ public class DomainEventHelper {
event.setEventPhase(phase);
- getEventBusService().post(event);
+ metamodelEventService.fireCollectionDomainEvent(event);
return event;
} catch (Exception e) {
throw new FatalException(e);
@@ -396,14 +400,5 @@ public class DomainEventHelper {
throw new NoSuchMethodException(type.getName()+".<init>(? super " + source.getClass().getName() + ", " + Identifier.class.getName() + ", java.lang.Object)");
}
- // -- eventBusService
-
- private EventBusService getEventBusService() {
- // previously this method used to cache, however it prevents integration tests
- // from switching out the EventBusService with a mock.
- return this.serviceRegistry.lookupService(EventBusService.class).orElse(null);
- }
-
-
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
index 7a5a047..a05a3a2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
@@ -66,7 +66,7 @@ extends SingleClassValueFacetAbstract implements ActionDomainEventFacet {
// sadness: same as in TranslationFactory
this.translationContext = ((IdentifiedHolder)holder).getIdentifier().toClassAndNameIdentityString();
- domainEventHelper = new DomainEventHelper(getServiceRegistry());
+ domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry());
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index 6e6530d..595df41 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -98,7 +98,7 @@ implements ImperativeFacet {
this.onType = onType;
this.returnType = returnType;
this.serviceRegistry = getServiceRegistry();
- this.domainEventHelper = new DomainEventHelper(this.serviceRegistry);
+ this.domainEventHelper = DomainEventHelper.ofServiceRegistry(serviceRegistry);
}
/**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
index 5e3c6a5..5cce7d0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
@@ -56,10 +56,11 @@ implements CollectionAddToFacet {
final CollectionDomainEventFacetAbstract collectionDomainEventFacet,
final ServiceRegistry serviceRegistry,
final FacetHolder holder) {
+
super(type(), eventType, holder);
this.getterFacet = getterFacet;
this.collectionAddToFacet = collectionAddToFacet;
- this.domainEventHelper = new DomainEventHelper(serviceRegistry);
+ this.domainEventHelper = DomainEventHelper.ofServiceRegistry(serviceRegistry);
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java
index 0444b0a..84685e7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java
@@ -54,7 +54,7 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
// sadness: same as in TranslationFactory
this.translationContext = ((IdentifiedHolder)holder).getIdentifier().toClassAndNameIdentityString();
- domainEventHelper = new DomainEventHelper(getServiceRegistry());
+ domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry());
}
private Class<? extends CollectionDomainEvent<?, ?>> eventType;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
index 9eb87e7..de1f1db 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
@@ -58,10 +58,11 @@ implements CollectionRemoveFromFacet {
final CollectionDomainEventFacetAbstract collectionDomainEventFacet,
final ServiceRegistry serviceRegistry,
final FacetHolder holder) {
+
super(type(), eventType, holder);
this.getterFacet = getterFacet;
this.collectionRemoveFromFacet = collectionRemoveFromFacet;
- this.domainEventHelper = new DomainEventHelper(serviceRegistry);
+ this.domainEventHelper = DomainEventHelper.ofServiceRegistry(serviceRegistry);
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
index 7db0ea8..09d53e4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
@@ -62,7 +62,7 @@ public class CssClassFacetOnActionFromConfiguredRegexFactory extends FacetFactor
// if we don't do this, then any contributed properties or collections end up picking
// up the CssClass; almost certainly not what is expected/required.
final Class<?> owningType = facetHolder.getOwningType();
- if(!getServiceRegistry().getInstance(owningType).isUnsatisfied()) {
+ if(getServiceRegistry().select(owningType).isNotEmpty()) {
return;
}
CssClassFacet cssClassFacet = createFromConfiguredRegexIfPossible(name, facetHolder);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.java
index 174f6df..31db1e4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.java
@@ -25,8 +25,6 @@ import java.util.Map;
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.annotation.DomainObjectLayout;
import org.apache.isis.applib.events.ui.CssClassUiEvent;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -34,18 +32,19 @@ import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract;
+import org.apache.isis.core.metamodel.services.events.MetamodelEventService;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.util.EventUtil;
-public class CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent extends FacetAbstract implements
-CssClassFacet {
-
- //private static final Logger LOG = LoggerFactory.getLogger(CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.class);
+public class CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent
+extends FacetAbstract
+implements CssClassFacet {
public static Facet create(
final List<DomainObjectLayout> domainObjectLayouts,
- final ServiceInjector servicesInjector,
- final IsisConfiguration configuration, final FacetHolder facetHolder) {
+ final MetamodelEventService metamodelEventService,
+ final IsisConfiguration configuration,
+ final FacetHolder facetHolder) {
return domainObjectLayouts.stream()
.map(DomainObjectLayout::cssClassUiEvent)
@@ -57,24 +56,24 @@ CssClassFacet {
configuration))
.findFirst()
.map(cssClassUiEventClass -> {
- final EventBusService eventBusService = servicesInjector.lookupServiceElseFail(EventBusService.class);
return new CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent(
- cssClassUiEventClass, eventBusService, facetHolder);
+ cssClassUiEventClass, metamodelEventService, facetHolder);
})
.orElse(null);
}
private final Class<? extends CssClassUiEvent<?>> cssClassUiEventClass;
- private final EventBusService eventBusService;
+ private final MetamodelEventService metamodelEventService;
public CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent(
- final Class<? extends CssClassUiEvent<?>> cssClassUiEventClass,
- final EventBusService eventBusService,
- final FacetHolder holder) {
+ final Class<? extends CssClassUiEvent<?>> cssClassUiEventClass,
+ final MetamodelEventService metamodelEventService,
+ final FacetHolder holder) {
+
super(CssClassFacetAbstract.type(), holder, Derivation.NOT_DERIVED);
this.cssClassUiEventClass = cssClassUiEventClass;
- this.eventBusService = eventBusService;
+ this.metamodelEventService = metamodelEventService;
}
@Override
@@ -86,7 +85,7 @@ CssClassFacet {
final CssClassUiEvent<Object> cssClassUiEvent = newCssClassUiEvent(owningAdapter);
- eventBusService.post(cssClassUiEvent);
+ metamodelEventService.fireCssClassUiEvent(cssClassUiEvent);
final String cssClass = cssClassUiEvent.getCssClass();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.java
index 0fffcd0..b41b683 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.java
@@ -25,8 +25,6 @@ import java.util.Map;
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.annotation.ViewModelLayout;
import org.apache.isis.applib.events.ui.CssClassUiEvent;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -34,6 +32,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract;
+import org.apache.isis.core.metamodel.services.events.MetamodelEventService;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.util.EventUtil;
@@ -44,8 +43,9 @@ public class CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent exten
public static Facet create(
final List<ViewModelLayout> viewModelLayouts,
- final ServiceInjector serviceInjector,
- final IsisConfiguration configuration, final FacetHolder facetHolder) {
+ final MetamodelEventService metamodelEventService,
+ final IsisConfiguration configuration,
+ final FacetHolder facetHolder) {
return viewModelLayouts.stream()
.map(ViewModelLayout::cssClassUiEvent)
@@ -57,23 +57,22 @@ public class CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent exten
configuration))
.findFirst()
.map(cssClassUiEventClass -> {
- final EventBusService eventBusService = serviceInjector.lookupServiceElseFail(EventBusService.class);
return new CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent(
- cssClassUiEventClass, eventBusService, facetHolder);
+ cssClassUiEventClass, metamodelEventService, facetHolder);
})
.orElse(null);
}
private final Class<? extends CssClassUiEvent<?>> cssClassUiEventClass;
- private final EventBusService eventBusService;
+ private final MetamodelEventService metamodelEventService;
public CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent(
final Class<? extends CssClassUiEvent<?>> cssClassUiEventClass,
- final EventBusService eventBusService,
+ final MetamodelEventService metamodelEventService,
final FacetHolder holder) {
super(CssClassFacetAbstract.type(), holder, Derivation.NOT_DERIVED);
this.cssClassUiEventClass = cssClassUiEventClass;
- this.eventBusService = eventBusService;
+ this.metamodelEventService = metamodelEventService;
}
@Override
@@ -85,7 +84,7 @@ public class CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent exten
final CssClassUiEvent<Object> cssClassUiEvent = newCssClassUiEvent(owningAdapter);
- eventBusService.post(cssClassUiEvent);
+ metamodelEventService.fireCssClassUiEvent(cssClassUiEvent);
final String cssClass = cssClassUiEvent.getCssClass();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
index c769757..dea8344 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
@@ -25,6 +25,9 @@ import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.Annotations;
import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.services.events.MetamodelEventService;
+
+import lombok.val;
public class DomainObjectLayoutFacetFactory extends FacetFactoryAbstract {
@@ -41,34 +44,36 @@ public class DomainObjectLayoutFacetFactory extends FacetFactoryAbstract {
final List<DomainObjectLayout> domainObjectLayouts = Annotations.getAnnotations(cls, DomainObjectLayout.class);
final List<ViewModelLayout> viewModelLayouts = Annotations.getAnnotations(cls, ViewModelLayout.class);
+
+ val metamodelEventService = getServiceRegistry().lookupServiceElseFail(MetamodelEventService.class);
FacetUtil.addFacet(
TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.create(
- domainObjectLayouts, getServiceInjector(), getConfiguration(), facetHolder));
+ domainObjectLayouts, metamodelEventService, getConfiguration(), facetHolder));
FacetUtil.addFacet(
TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.create(
- viewModelLayouts, getServiceInjector(), getConfiguration(), facetHolder));
+ viewModelLayouts, metamodelEventService, getConfiguration(), facetHolder));
FacetUtil.addFacet(
IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.create(
- domainObjectLayouts, getServiceInjector(), getConfiguration(), facetHolder));
+ domainObjectLayouts, metamodelEventService, getConfiguration(), facetHolder));
FacetUtil.addFacet(
IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.create(
- viewModelLayouts, getServiceInjector(), getConfiguration(), facetHolder));
+ viewModelLayouts, metamodelEventService, getConfiguration(), facetHolder));
FacetUtil.addFacet(
CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.create(
- domainObjectLayouts, getServiceInjector(), getConfiguration(), facetHolder));
+ domainObjectLayouts, metamodelEventService, getConfiguration(), facetHolder));
FacetUtil.addFacet(
CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.create(
- viewModelLayouts, getServiceInjector(), getConfiguration(), facetHolder));
+ viewModelLayouts, metamodelEventService, getConfiguration(), facetHolder));
FacetUtil.addFacet(
LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent.create(
- domainObjectLayouts, getServiceInjector(), getConfiguration(), facetHolder));
+ domainObjectLayouts, metamodelEventService, getConfiguration(), facetHolder));
FacetUtil.addFacet(
LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.create(
- viewModelLayouts, getServiceInjector(), getConfiguration(), facetHolder));
+ viewModelLayouts, metamodelEventService, getConfiguration(), facetHolder));
FacetUtil.addFacet(
CssClassFacetForDomainObjectLayoutAnnotation.create(domainObjectLayouts, facetHolder));
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
index 410b8c3..09ebb4c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
@@ -25,24 +25,21 @@ import java.util.Map;
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.annotation.DomainObjectLayout;
import org.apache.isis.applib.events.ui.IconUiEvent;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
import org.apache.isis.core.metamodel.facets.object.icon.IconFacetAbstract;
+import org.apache.isis.core.metamodel.services.events.MetamodelEventService;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.util.EventUtil;
public class IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent extends IconFacetAbstract {
- //private static final Logger LOG = LoggerFactory.getLogger(IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.class);
-
public static Facet create(
final List<DomainObjectLayout> domainObjectLayouts,
- final ServiceInjector servicesInjector,
+ final MetamodelEventService metamodelEventService,
final IsisConfiguration configuration,
final FacetHolder facetHolder) {
@@ -56,25 +53,22 @@ public class IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent extends Ic
configuration))
.findFirst()
.map(iconUiEvent -> {
-
- final EventBusService eventBusService = servicesInjector.lookupServiceElseFail(EventBusService.class);
-
return new IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent(
- iconUiEvent, eventBusService, facetHolder);
+ iconUiEvent, metamodelEventService, facetHolder);
})
.orElse(null);
}
private final Class<? extends IconUiEvent<?>> iconUiEventClass;
- private final EventBusService eventBusService;
+ private final MetamodelEventService metamodelEventService;
public IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent(
final Class<? extends IconUiEvent<?>> iconUiEventClass,
- final EventBusService eventBusService,
+ final MetamodelEventService metamodelEventService,
final FacetHolder holder) {
super(holder);
this.iconUiEventClass = iconUiEventClass;
- this.eventBusService = eventBusService;
+ this.metamodelEventService = metamodelEventService;
}
@Override
@@ -86,7 +80,7 @@ public class IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent extends Ic
final IconUiEvent<Object> iconUiEvent = newIconUiEvent(owningAdapter);
- eventBusService.post(iconUiEvent);
+ metamodelEventService.fireIconUiEvent(iconUiEvent);
final String iconName = iconUiEvent.getIconName();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.java
index 4f0f647..19718ab 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.java
@@ -25,25 +25,23 @@ import java.util.Map;
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.annotation.ViewModelLayout;
import org.apache.isis.applib.events.ui.IconUiEvent;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
import org.apache.isis.core.metamodel.facets.object.icon.IconFacetAbstract;
+import org.apache.isis.core.metamodel.services.events.MetamodelEventService;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.util.EventUtil;
public class IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent extends IconFacetAbstract {
- //private static final Logger LOG = LoggerFactory.getLogger(IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.class);
-
public static Facet create(
final List<ViewModelLayout> viewModelLayouts,
- final ServiceInjector serviceInjector,
- final IsisConfiguration configuration, final FacetHolder facetHolder) {
+ final MetamodelEventService metamodelEventService,
+ final IsisConfiguration configuration,
+ final FacetHolder facetHolder) {
return viewModelLayouts.stream()
.map(ViewModelLayout::iconUiEvent)
@@ -56,24 +54,22 @@ public class IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent extends IconF
.findFirst()
.map(iconUiEvent -> {
- final EventBusService eventBusService = serviceInjector.lookupServiceElseFail(EventBusService.class);
-
return new IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent(
- iconUiEvent, eventBusService, facetHolder);
+ iconUiEvent, metamodelEventService, facetHolder);
})
.orElse(null);
}
private final Class<? extends IconUiEvent<?>> iconUiEventClass;
- private final EventBusService eventBusService;
+ private final MetamodelEventService metamodelEventService;
public IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent(
final Class<? extends IconUiEvent<?>> iconUiEventClass,
- final EventBusService eventBusService,
+ final MetamodelEventService metamodelEventService,
final FacetHolder holder) {
super(holder);
this.iconUiEventClass = iconUiEventClass;
- this.eventBusService = eventBusService;
+ this.metamodelEventService = metamodelEventService;
}
@Override
@@ -85,7 +81,7 @@ public class IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent extends IconF
final IconUiEvent<Object> iconUiEvent = newIconUiEvent(owningAdapter);
- eventBusService.post(iconUiEvent);
+ metamodelEventService.fireIconUiEvent(iconUiEvent);
final String iconName = iconUiEvent.getIconName();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent.java
index d780870..e1a84e0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent.java
@@ -25,25 +25,24 @@ import java.util.Map;
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.annotation.DomainObjectLayout;
import org.apache.isis.applib.events.ui.LayoutUiEvent;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacet;
import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacetAbstract;
+import org.apache.isis.core.metamodel.services.events.MetamodelEventService;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.util.EventUtil;
-public class LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent extends LayoutFacetAbstract implements
- LayoutFacet {
-
- //private static final Logger LOG = LoggerFactory.getLogger(LayoutFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.class);
+public class LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent
+extends LayoutFacetAbstract
+implements LayoutFacet {
public static Facet create(
final List<DomainObjectLayout> domainObjectLayouts,
- final ServiceInjector serviceInjector,
- final IsisConfiguration configuration, final FacetHolder facetHolder) {
+ final MetamodelEventService metamodelEventService,
+ final IsisConfiguration configuration,
+ final FacetHolder facetHolder) {
return domainObjectLayouts.stream()
.map(DomainObjectLayout::layoutUiEvent)
@@ -56,24 +55,22 @@ public class LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent extend
.findFirst()
.map(layoutUiEvent -> {
- final EventBusService eventBusService = serviceInjector.lookupServiceElseFail(EventBusService.class);
-
return new LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent(
- layoutUiEvent, eventBusService, facetHolder);
+ layoutUiEvent, metamodelEventService, facetHolder);
})
.orElse(null);
}
private final Class<? extends LayoutUiEvent<?>> layoutUiEventClass;
- private final EventBusService eventBusService;
+ private final MetamodelEventService metamodelEventService;
public LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent(
final Class<? extends LayoutUiEvent<?>> layoutUiEventClass,
- final EventBusService eventBusService,
+ final MetamodelEventService metamodelEventService,
final FacetHolder holder) {
super(holder);
this.layoutUiEventClass = layoutUiEventClass;
- this.eventBusService = eventBusService;
+ this.metamodelEventService = metamodelEventService;
}
@Override
@@ -85,7 +82,7 @@ public class LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent extend
final LayoutUiEvent<Object> layoutUiEvent = newLayoutUiEvent(owningAdapter);
- eventBusService.post(layoutUiEvent);
+ metamodelEventService.fireLayoutUiEvent(layoutUiEvent);
final String layout = layoutUiEvent.getLayout();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.java
index 221e7ec..772696f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.java
@@ -25,25 +25,24 @@ import java.util.Map;
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.annotation.ViewModelLayout;
import org.apache.isis.applib.events.ui.LayoutUiEvent;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacet;
import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacetAbstract;
+import org.apache.isis.core.metamodel.services.events.MetamodelEventService;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.util.EventUtil;
-public class LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent extends LayoutFacetAbstract implements
- LayoutFacet {
-
- //private static final Logger LOG = LoggerFactory.getLogger(LayoutFacetViaViewModelLayoutAnnotationUsingIconUiEvent.class);
+public class LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent
+extends LayoutFacetAbstract
+implements LayoutFacet {
public static Facet create(
final List<ViewModelLayout> viewModelLayouts,
- final ServiceInjector serviceInjector,
- final IsisConfiguration configuration, final FacetHolder facetHolder) {
+ final MetamodelEventService metamodelEventService,
+ final IsisConfiguration configuration,
+ final FacetHolder facetHolder) {
return viewModelLayouts.stream()
.map(ViewModelLayout::layoutUiEvent)
@@ -56,24 +55,22 @@ public class LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent extends L
.findFirst()
.map(layoutUiEvent -> {
- final EventBusService eventBusService = serviceInjector.lookupServiceElseFail(EventBusService.class);
-
return new LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent(
- layoutUiEvent, eventBusService, facetHolder);
+ layoutUiEvent, metamodelEventService, facetHolder);
})
.orElse(null);
}
private final Class<? extends LayoutUiEvent<?>> layoutUiEventClass;
- private final EventBusService eventBusService;
+ private final MetamodelEventService metamodelEventService;
public LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent(
final Class<? extends LayoutUiEvent<?>> layoutUiEventClass,
- final EventBusService eventBusService,
+ final MetamodelEventService metamodelEventService,
final FacetHolder holder) {
super(holder);
this.layoutUiEventClass = layoutUiEventClass;
- this.eventBusService = eventBusService;
+ this.metamodelEventService = metamodelEventService;
}
@Override
@@ -85,7 +82,7 @@ public class LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent extends L
final LayoutUiEvent<Object> layoutUiEvent = newLayoutUiEvent(owningAdapter);
- eventBusService.post(layoutUiEvent);
+ metamodelEventService.fireLayoutUiEvent(layoutUiEvent);
final String layout = layoutUiEvent.getLayout();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
index be1ed91..bce283b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
@@ -25,27 +25,24 @@ import java.util.Map;
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.annotation.DomainObjectLayout;
import org.apache.isis.applib.events.ui.TitleUiEvent;
-import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.applib.services.i18n.TranslatableString;
import org.apache.isis.applib.services.i18n.TranslationService;
-import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
import org.apache.isis.core.metamodel.facets.object.title.TitleFacetAbstract;
+import org.apache.isis.core.metamodel.services.events.MetamodelEventService;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.util.EventUtil;
public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends TitleFacetAbstract {
- //private static final Logger LOG = LoggerFactory.getLogger(TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.class);
-
public static Facet create(
final List<DomainObjectLayout> domainObjectLayouts,
- final ServiceInjector servicesInjector,
+ final MetamodelEventService metamodelEventService,
final IsisConfiguration configuration,
final FacetHolder facetHolder) {
@@ -59,8 +56,6 @@ public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends
configuration))
.findFirst()
.map(titleUiEventClass -> {
- final TranslationService translationService = servicesInjector.lookupService(TranslationService.class).orElse(null);
-
final String translationContext;
if(facetHolder instanceof ObjectSpecification) {
final ObjectSpecification facetHolderAsSpec = (ObjectSpecification) facetHolder; // bit naughty...
@@ -69,10 +64,8 @@ public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends
translationContext = null;
}
- final EventBusService eventBusService = servicesInjector.lookupServiceElseFail(EventBusService.class);
-
return new TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent(
- titleUiEventClass, translationService, translationContext, eventBusService, facetHolder);
+ titleUiEventClass, translationContext, metamodelEventService, facetHolder);
})
.orElse(null);
}
@@ -80,19 +73,18 @@ public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends
private final Class<? extends TitleUiEvent<?>> titleUiEventClass;
private final TranslationService translationService;
private final String translationContext;
- private final EventBusService eventBusService;
+ private final MetamodelEventService metamodelEventService;
public TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent(
final Class<? extends TitleUiEvent<?>> titleUiEventClass,
- final TranslationService translationService,
final String translationContext,
- final EventBusService eventBusService,
+ final MetamodelEventService metamodelEventService,
final FacetHolder holder) {
super(holder);
this.titleUiEventClass = titleUiEventClass;
- this.translationService = translationService;
+ this.translationService = super.getTranslationService();
this.translationContext = translationContext;
- this.eventBusService = eventBusService;
+ this.metamodelEventService = metamodelEventService;
}
@Override
@@ -104,7 +96,7 @@ public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends
final TitleUiEvent<Object> titleUiEvent = newTitleUiEvent(owningAdapter);
- eventBusService.post(titleUiEvent);
+ metamodelEventService.fireTitleUiEvent(titleUiEvent);
final TranslatableString translatedTitle = titleUiEvent.getTranslatableTitle();
if(translatedTitle != null) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.java
index 7bf7056..191ba6c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.java
@@ -25,28 +25,26 @@ import java.util.Map;
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.annotation.ViewModelLayout;
import org.apache.isis.applib.events.ui.TitleUiEvent;
-import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.applib.services.i18n.TranslatableString;
import org.apache.isis.applib.services.i18n.TranslationService;
-import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
import org.apache.isis.core.metamodel.facets.object.title.TitleFacetAbstract;
+import org.apache.isis.core.metamodel.services.events.MetamodelEventService;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.util.EventUtil;
public class TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent extends TitleFacetAbstract {
- //private static final Logger LOG = LoggerFactory.getLogger(TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.class);
-
public static Facet create(
final List<ViewModelLayout> viewModelLayouts,
- final ServiceInjector serviceInjector,
- final IsisConfiguration configuration, final FacetHolder facetHolder) {
+ final MetamodelEventService metamodelEventService,
+ final IsisConfiguration configuration,
+ final FacetHolder facetHolder) {
return viewModelLayouts.stream()
.map(ViewModelLayout::titleUiEvent)
@@ -58,8 +56,6 @@ public class TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent extends Tit
configuration))
.findFirst()
.map(titleUiEventClass -> {
- final TranslationService translationService = serviceInjector.lookupService(TranslationService.class).orElse(null);
-
final String translationContext;
if(facetHolder instanceof ObjectSpecification) {
final ObjectSpecification facetHolderAsSpec = (ObjectSpecification) facetHolder; // bit naughty...
@@ -68,10 +64,8 @@ public class TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent extends Tit
translationContext = null;
}
- final EventBusService eventBusService = serviceInjector.lookupServiceElseFail(EventBusService.class);
-
return new TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent(
- titleUiEventClass, translationService, translationContext, eventBusService, facetHolder);
+ titleUiEventClass, translationContext, metamodelEventService, facetHolder);
})
.orElse(null);
}
@@ -79,19 +73,18 @@ public class TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent extends Tit
private final Class<? extends TitleUiEvent<?>> titleUiEventClass;
private final TranslationService translationService;
private final String translationContext;
- private final EventBusService eventBusService;
+ private final MetamodelEventService metamodelEventService;
public TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent(
final Class<? extends TitleUiEvent<?>> titleUiEventClass,
- final TranslationService translationService,
final String translationContext,
- final EventBusService eventBusService,
+ final MetamodelEventService metamodelEventService,
final FacetHolder holder) {
super(holder);
this.titleUiEventClass = titleUiEventClass;
- this.translationService = translationService;
+ this.translationService = super.getTranslationService();
this.translationContext = translationContext;
- this.eventBusService = eventBusService;
+ this.metamodelEventService = metamodelEventService;
}
@Override
@@ -103,7 +96,7 @@ public class TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent extends Tit
final TitleUiEvent<Object> titleUiEvent = newTitleUiEvent(owningAdapter);
- eventBusService.post(titleUiEvent);
+ metamodelEventService.fireTitleUiEvent(titleUiEvent);
final TranslatableString translatedTitle = titleUiEvent.getTranslatableTitle();
if(translatedTitle != null) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
index bdb78e0..ec477da 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
@@ -67,7 +67,7 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet {
// sadness: same as in TranslationFactory
this.translationContext = ((IdentifiedHolder)holder).getIdentifier().toClassAndNameIdentityString();
- domainEventHelper = new DomainEventHelper(getServiceRegistry());
+ domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry());
}
private Class<? extends PropertyDomainEvent<?, ?>> eventType;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index bbe3028..04c1564 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@ -72,7 +72,7 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
this.getterFacet = getterFacet;
this.setterFacet = setterFacet;
this.clearFacet = clearFacet;
- this.domainEventHelper = new DomainEventHelper(getServiceRegistry());
+ this.domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry());
}
enum Style {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceInjectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceInjectorDefault.java
index c93ec20..fc8a62b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceInjectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceInjectorDefault.java
@@ -30,9 +30,6 @@ import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Singleton;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.commons.internal.base._NullSafe;
@@ -42,6 +39,8 @@ import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.core.commons.util.ToString;
import org.apache.isis.core.metamodel.exceptions.MetaModelException;
import org.apache.isis.core.metamodel.spec.InjectorMethodEvaluator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import lombok.val;
@@ -120,9 +119,9 @@ public class ServiceInjectorDefault implements ServiceInjector {
return;
}
- val instance = serviceRegistry.getInstance(typeToBeInjected, field.getAnnotations());
- if(instance.isResolvable()) {
- val bean = instance.get();
+ val beans = serviceRegistry.select(typeToBeInjected, field.getAnnotations());
+ if(beans.isCardinalityOne()) {
+ val bean = beans.getSingleton().get();
invokeInjectorField(field, targetPojo, bean);
}
@@ -137,9 +136,9 @@ public class ServiceInjectorDefault implements ServiceInjector {
final Class<? extends Collection<Object>> collectionTypeToBeInjected =
(Class<? extends Collection<Object>>) field.getType();
- val instance = serviceRegistry.getInstance(elementType, field.getAnnotations());
- if(!instance.isUnsatisfied()) {
- final Collection<Object> collectionOfServices = instance.stream()
+ val beans = serviceRegistry.select(elementType, field.getAnnotations());
+ if(!beans.isEmpty()) {
+ final Collection<Object> collectionOfServices = beans.stream()
.filter(isOfType(elementType))
.collect(_Collections.toUnmodifiableOfType(collectionTypeToBeInjected));
@@ -167,9 +166,9 @@ public class ServiceInjectorDefault implements ServiceInjector {
return;
}
- val instance = serviceRegistry.getInstance(typeToBeInjected, setter.getAnnotations());
- if(instance.isResolvable()) {
- val bean = instance.get();
+ val instance = serviceRegistry.select(typeToBeInjected, setter.getAnnotations());
+ if(instance.isCardinalityOne()) {
+ val bean = instance.getSingleton().get();
invokeInjectorMethod(setter, targetPojo, bean);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/events/MetamodelEventService.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/events/MetamodelEventService.java
new file mode 100644
index 0000000..df2ff2e
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/events/MetamodelEventService.java
@@ -0,0 +1,63 @@
+package org.apache.isis.core.metamodel.services.events;
+
+import javax.enterprise.event.Event;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.apache.isis.applib.events.domain.ActionDomainEvent;
+import org.apache.isis.applib.events.domain.CollectionDomainEvent;
+import org.apache.isis.applib.events.domain.PropertyDomainEvent;
+import org.apache.isis.applib.events.ui.CssClassUiEvent;
+import org.apache.isis.applib.events.ui.IconUiEvent;
+import org.apache.isis.applib.events.ui.LayoutUiEvent;
+import org.apache.isis.applib.events.ui.TitleUiEvent;
+
+/**
+ *
+ * @since 2.0.0-M3
+ *
+ */
+@Singleton
+public class MetamodelEventService {
+
+ @Inject Event<CssClassUiEvent<Object>> cssClassUiEvents;
+ @Inject Event<IconUiEvent<Object>> iconUiEvents;
+ @Inject Event<LayoutUiEvent<Object>> layoutUiEvents;
+ @Inject Event<TitleUiEvent<Object>> titleUiEvents;
+
+ @Inject Event<ActionDomainEvent<?>> actionDomainEvents;
+ @Inject Event<PropertyDomainEvent<?, ?>> propertyDomainEvents;
+ @Inject Event<CollectionDomainEvent<?, ?>> collectionDomainEvents;
+
+ // -- METAMODEL UI EVENTS
+
+ public void fireCssClassUiEvent(CssClassUiEvent<Object> event) {
+ cssClassUiEvents.fire(event);
+ }
+
+ public void fireIconUiEvent(IconUiEvent<Object> event) {
+ iconUiEvents.fire(event);
+ }
+
+ public void fireLayoutUiEvent(LayoutUiEvent<Object> event) {
+ layoutUiEvents.fire(event);
+ }
+
+ public void fireTitleUiEvent(TitleUiEvent<Object> event) {
+ titleUiEvents.fire(event);
+ }
+
+ public void fireActionDomainEvent(ActionDomainEvent<?> event) {
+ actionDomainEvents.fire(event);
+ }
+
+ public void firePropertyDomainEvent(PropertyDomainEvent<?, ?> event) {
+ propertyDomainEvents.fire(event);
+ }
+
+ public void fireCollectionDomainEvent(CollectionDomainEvent<?, ?> event) {
+ collectionDomainEvents.fire(event);
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
index 15218a7..87ead6a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
@@ -89,7 +89,7 @@ public class MetaModelServiceDefault implements MetaModelService {
public void rebuild(final Class<?> domainType) {
specificationLoader.invalidateCache(domainType);
- GridService gridService = _CDI.getManagedBean(GridService.class).get();
+ GridService gridService = _CDI.getSingletonElseFail(GridService.class);
gridService.remove(domainType);
specificationLoader.loadSpecification(domainType);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/registry/ServiceRegistryDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/registry/ServiceRegistryDefault.java
index b5b1c3c..7af881e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/registry/ServiceRegistryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/registry/ServiceRegistryDefault.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.metamodel.services.registry;
+import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;
@@ -31,6 +32,7 @@ import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.cdi._CDI;
import org.apache.isis.commons.internal.collections._Sets;
+import org.apache.isis.core.commons.collections.Bin;
import org.apache.isis.core.metamodel.services.ServiceUtil;
import lombok.val;
@@ -70,8 +72,9 @@ public final class ServiceRegistryDefault implements ServiceRegistry {
streamRegisteredBeans()
.filter(BeanAdapter::isDomainService)
.map(BeanAdapter::getInstance)
- .filter(Instance::isResolvable)
- .map(Instance::get)
+ .filter(Bin::isCardinalityOne)
+ .map(Bin::getSingleton)
+ .map(Optional::get)
.forEach(serviceCache::add);
}
return serviceCache.stream();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
index fd861cd..9c5a41d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
@@ -39,7 +39,7 @@ import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.config.internal._Config;
import org.apache.isis.config.property.ConfigPropertyBoolean;
import org.apache.isis.config.property.ConfigPropertyEnum;
-import org.apache.isis.config.registry.BeanTypeRegistry;
+import org.apache.isis.config.registry.IsisBeanTypeRegistry;
import org.apache.isis.core.commons.ensure.Assert;
import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.commons.lang.ClassUtil;
@@ -156,7 +156,7 @@ public class SpecificationLoader {
// need to completely load services and mixins (synchronously)
LOG.info("Loading all specs (up to state of {})", IntrospectionState.NOT_INTROSPECTED);
- val typeRegistry = BeanTypeRegistry.current();
+ val typeRegistry = IsisBeanTypeRegistry.current();
final List<ObjectSpecification> specificationsFromRegistry = _Lists.newArrayList();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 5383f10..f8ee912 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -40,7 +40,7 @@ import org.apache.isis.commons.internal.base._Strings;
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.config.registry.BeanTypeRegistry;
+import org.apache.isis.config.registry.IsisBeanTypeRegistry;
import org.apache.isis.core.commons.exceptions.UnknownTypeException;
import org.apache.isis.core.commons.lang.ClassExtensions;
import org.apache.isis.core.commons.util.ToString;
@@ -853,7 +853,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return Collections.emptyList();
}
- val mixinTypes = BeanTypeRegistry.current().getMixinTypes();
+ val mixinTypes = IsisBeanTypeRegistry.current().getMixinTypes();
if(_NullSafe.isEmpty(mixinTypes)) {
return Collections.emptyList();
}
@@ -1039,7 +1039,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return Collections.emptyList();
}
- val mixinTypes = BeanTypeRegistry.current().getMixinTypes();
+ val mixinTypes = IsisBeanTypeRegistry.current().getMixinTypes();
if(_NullSafe.isEmpty(mixinTypes)) {
return Collections.emptyList();
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
index b2847dc..7bb93e8 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
@@ -23,17 +23,9 @@ import java.lang.reflect.Method;
import java.util.List;
import java.util.Optional;
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-
import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.applib.services.i18n.TranslationService;
import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -49,6 +41,11 @@ import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.security.authentication.AuthenticationSessionProvider;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
public abstract class AbstractFacetFactoryJUnit4TestCase {
@@ -83,8 +80,8 @@ public abstract class AbstractFacetFactoryJUnit4TestCase {
protected OneToManyAssociation mockOneToManyAssociation;
@Mock
protected OneToOneActionParameter mockOneToOneActionParameter;
- @Mock
- protected EventBusService mockEventBusService;
+// @Mock
+// protected EventBusService mockEventBusService;
@Mock
protected ObjectAdapterProvider mockObjectAdapterProvider;
@@ -117,8 +114,8 @@ public abstract class AbstractFacetFactoryJUnit4TestCase {
allowing(mockServicesInjector).lookupService(AuthenticationSessionProvider.class);
will(returnValue(mockAuthenticationSessionProvider));
- allowing(mockServicesInjector).lookupServiceElseFail(EventBusService.class);
- will(returnValue(mockEventBusService));
+// allowing(mockServicesInjector).lookupServiceElseFail(EventBusService.class);
+// will(returnValue(mockEventBusService));
}});
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newActionInteractionEvent.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newActionInteractionEvent.java
index 604118d..2a5fe7b 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newActionInteractionEvent.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newActionInteractionEvent.java
@@ -43,7 +43,8 @@ public class DomainEventHelperTest_newActionInteractionEvent {
final SomeDomainObject sdo = new SomeDomainObject();
final Identifier identifier = Identifier.actionIdentifier(SomeDomainObject.class, "foo", new Class[]{int.class, String.class});
- final ActionDomainEvent<Object> ev = new DomainEventHelper(null).newActionDomainEvent(
+ Utils.domainEventHelper();
+ final ActionDomainEvent<Object> ev = DomainEventHelper.newActionDomainEvent(
ActionDomainEvent.Default.class, identifier, sdo, new Object[]{1, "bar"});
assertSame(ev.getSource(), sdo);
assertThat(ev.getIdentifier(), is(identifier));
@@ -57,7 +58,8 @@ public class DomainEventHelperTest_newActionInteractionEvent {
final SomeDomainObject sdo = new SomeDomainObject();
final Identifier identifier = Identifier.actionIdentifier(SomeDomainObject.class, "foo", new Class[]{int.class, String.class});
- final ActionDomainEvent<Object> ev = new DomainEventHelper(null).newActionDomainEvent(
+ Utils.domainEventHelper();
+ final ActionDomainEvent<Object> ev = DomainEventHelper.newActionDomainEvent(
ActionDomainEvent.Default.class, identifier, sdo, new Object[]{1, "bar"});
assertSame(ev.getSource(), sdo);
assertThat(ev.getIdentifier(), is(identifier));
@@ -71,7 +73,8 @@ public class DomainEventHelperTest_newActionInteractionEvent {
final SomeDomainObject sdo = new SomeDomainObject();
final Identifier identifier = Identifier.actionIdentifier(SomeDomainObject.class, "foo", new Class[]{int.class, String.class});
- final ActionDomainEvent<SomeDomainObject> ev = new DomainEventHelper(null).newActionDomainEvent(
+ Utils.domainEventHelper();
+ final ActionDomainEvent<SomeDomainObject> ev = DomainEventHelper.newActionDomainEvent(
SomeDomainObjectFooInvokedDomainEvent.class, identifier, sdo, new Object[]{1, "bar"});
assertSame(ev.getSource(), sdo);
assertThat(ev.getIdentifier(), is(identifier));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forAdd.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forAdd.java
index acd3dbf..1cc4229 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forAdd.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forAdd.java
@@ -45,7 +45,7 @@ public class DomainEventHelperTest_newCollectionDomainEvent_forAdd {
final SomeReferencedObject other = new SomeReferencedObject();
final Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "references");
- final CollectionDomainEvent<Object, Object> ev = new DomainEventHelper(null).newCollectionDomainEvent(
+ final CollectionDomainEvent<Object, Object> ev = Utils.domainEventHelper().newCollectionDomainEvent(
CollectionDomainEvent.Default.class, null, identifier, sdo, CollectionDomainEvent.Of.ADD_TO, other);
assertSame(ev.getSource(), sdo);
assertThat(ev.getIdentifier(), is(identifier));
@@ -59,7 +59,7 @@ public class DomainEventHelperTest_newCollectionDomainEvent_forAdd {
final SomeReferencedObject other = new SomeReferencedObject();
final Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "references");
- final CollectionDomainEvent<Object, Object> ev = new DomainEventHelper(null).newCollectionDomainEvent(
+ final CollectionDomainEvent<Object, Object> ev = Utils.domainEventHelper().newCollectionDomainEvent(
CollectionDomainEvent.Default.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo, CollectionDomainEvent.Of.ADD_TO, other);
assertSame(ev.getSource(), sdo);
assertThat(ev.getIdentifier(), is(identifier));
@@ -73,7 +73,7 @@ public class DomainEventHelperTest_newCollectionDomainEvent_forAdd {
final SomeReferencedObject other = new SomeReferencedObject();
final Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "references");
- final CollectionDomainEvent<SomeDomainObject, SomeReferencedObject> ev = new DomainEventHelper(null).newCollectionDomainEvent(
+ final CollectionDomainEvent<SomeDomainObject, SomeReferencedObject> ev = Utils.domainEventHelper().newCollectionDomainEvent(
SomeDomainObjectCollectionDomainEvent.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo, CollectionDomainEvent.Of.ADD_TO, other);
assertThat(ev.getSource(), is(sdo));
assertThat(ev.getIdentifier(), is(identifier));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forRemove.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forRemove.java
index c73b68e..6d187ea 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forRemove.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forRemove.java
@@ -45,7 +45,7 @@ public class DomainEventHelperTest_newCollectionDomainEvent_forRemove {
SomeReferencedObject other = new SomeReferencedObject();
Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "references");
- final CollectionDomainEvent<Object, Object> ev = new DomainEventHelper(null).newCollectionDomainEvent(
+ final CollectionDomainEvent<Object, Object> ev = Utils.domainEventHelper().newCollectionDomainEvent(
CollectionDomainEvent.Default.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo, CollectionDomainEvent.Of.REMOVE_FROM, other);
assertSame(ev.getSource(), sdo);
assertThat(ev.getIdentifier(), is(identifier));
@@ -59,7 +59,7 @@ public class DomainEventHelperTest_newCollectionDomainEvent_forRemove {
SomeReferencedObject other = new SomeReferencedObject();
Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "references");
- final CollectionDomainEvent<Object, Object> ev = new DomainEventHelper(null).newCollectionDomainEvent(
+ final CollectionDomainEvent<Object, Object> ev = Utils.domainEventHelper().newCollectionDomainEvent(
CollectionDomainEvent.Default.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo, CollectionDomainEvent.Of.REMOVE_FROM, other);
assertSame(ev.getSource(), sdo);
assertThat(ev.getIdentifier(), is(identifier));
@@ -73,7 +73,7 @@ public class DomainEventHelperTest_newCollectionDomainEvent_forRemove {
SomeReferencedObject other = new SomeReferencedObject();
Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "references");
- final CollectionDomainEvent<SomeDomainObject, SomeReferencedObject> ev = new DomainEventHelper(null).newCollectionDomainEvent(
+ final CollectionDomainEvent<SomeDomainObject, SomeReferencedObject> ev = Utils.domainEventHelper().newCollectionDomainEvent(
SomeDomainObjectCollectionRemovedFromDomainEvent.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo, CollectionDomainEvent.Of.REMOVE_FROM, other);
assertThat(ev.getSource(), is(sdo));
assertThat(ev.getIdentifier(), is(identifier));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forClear.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forClear.java
index 4086b62..bc2cf09 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forClear.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forClear.java
@@ -43,8 +43,9 @@ public class DomainEventHelperTest_newPropertyDomainEvent_forClear {
LocalDate oldValue = new LocalDate(2013,4,1);
LocalDate newValue = null;
- final PropertyDomainEvent<Object, Object> ev =
- new DomainEventHelper(null).newPropertyDomainEvent(PropertyDomainEvent.Default.class, identifier, sdo, oldValue, newValue);
+ Utils.domainEventHelper();
+ final PropertyDomainEvent<Object, Object> ev =
+ DomainEventHelper.newPropertyDomainEvent(PropertyDomainEvent.Default.class, identifier, sdo, oldValue, newValue);
assertSame(ev.getSource(), sdo);
assertThat(ev.getIdentifier(), is(identifier));
assertEquals(ev.getOldValue(), oldValue);
@@ -60,8 +61,9 @@ public class DomainEventHelperTest_newPropertyDomainEvent_forClear {
LocalDate oldValue = new LocalDate(2013,4,1);
LocalDate newValue = null;
- final PropertyDomainEvent<SomeDomainObject, LocalDate> ev =
- new DomainEventHelper(null).newPropertyDomainEvent(SomeDatePropertyChangedDomainEvent.class, identifier, sdo, oldValue, newValue);
+ Utils.domainEventHelper();
+ final PropertyDomainEvent<SomeDomainObject, LocalDate> ev =
+ DomainEventHelper.newPropertyDomainEvent(SomeDatePropertyChangedDomainEvent.class, identifier, sdo, oldValue, newValue);
assertSame(ev.getSource(), sdo);
assertThat(ev.getIdentifier(), is(identifier));
assertThat(ev.getOldValue(), is(oldValue));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forModify.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forModify.java
index 10b12a7..005e6ed 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forModify.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forModify.java
@@ -39,8 +39,9 @@ public class DomainEventHelperTest_newPropertyDomainEvent_forModify {
LocalDate oldValue = new LocalDate(2013,4,1);
LocalDate newValue = new LocalDate(2013,5,2);
- final PropertyDomainEvent<Object, Object> ev =
- new DomainEventHelper(null).newPropertyDomainEvent(PropertyDomainEvent.Default.class, identifier, sdo, oldValue, newValue);
+ Utils.domainEventHelper();
+ final PropertyDomainEvent<Object, Object> ev =
+ DomainEventHelper.newPropertyDomainEvent(PropertyDomainEvent.Default.class, identifier, sdo, oldValue, newValue);
assertThat(ev.getSource(), is((Object)sdo));
assertThat(ev.getIdentifier(), is(identifier));
assertThat(ev.getOldValue(), is((Object)oldValue));
@@ -56,8 +57,9 @@ public class DomainEventHelperTest_newPropertyDomainEvent_forModify {
LocalDate oldValue = new LocalDate(2013,4,1);
LocalDate newValue = new LocalDate(2013,5,2);
- final PropertyDomainEvent<SomeDomainObject, LocalDate> ev =
- new DomainEventHelper(null).newPropertyDomainEvent(SomeDatePropertyChangedDomainEvent.class, identifier, sdo, oldValue, newValue);
+ Utils.domainEventHelper();
+ final PropertyDomainEvent<SomeDomainObject, LocalDate> ev =
+ DomainEventHelper.newPropertyDomainEvent(SomeDatePropertyChangedDomainEvent.class, identifier, sdo, oldValue, newValue);
assertThat(ev.getSource(), is(sdo));
assertThat(ev.getIdentifier(), is(identifier));
assertThat(ev.getOldValue(), is(oldValue));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/Utils.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/Utils.java
index 4db96c3..6e03318 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/Utils.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/Utils.java
@@ -27,6 +27,10 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
class Utils {
+ static DomainEventHelper domainEventHelper() {
+ return DomainEventHelper.ofEventService(null);
+ }
+
protected static boolean contains(final Class<?>[] array, final Class<?> val) {
for (final Class<?> element : array) {
if (element == val) {
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 6935a5b..3963d2e 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
@@ -35,7 +35,7 @@ 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.collections._Sets;
-import org.apache.isis.config.registry.BeanTypeRegistry;
+import org.apache.isis.config.registry.IsisBeanTypeRegistry;
import org.apache.isis.core.metamodel.BeansForTesting;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
diff --git a/core/plugins/ioc-weld/src/main/java/org/apache/isis/core/plugins/ioc/weld/WeldFactory.java b/core/plugins/ioc-weld/src/main/java/org/apache/isis/core/plugins/ioc/weld/WeldFactory.java
index b859e98..bae47c9 100644
--- a/core/plugins/ioc-weld/src/main/java/org/apache/isis/core/plugins/ioc/weld/WeldFactory.java
+++ b/core/plugins/ioc-weld/src/main/java/org/apache/isis/core/plugins/ioc/weld/WeldFactory.java
@@ -61,8 +61,8 @@ public class WeldFactory {
"org.apache.isis.core.wrapper.WrapperFactoryDefault",
"org.apache.isis.viewer.wicket.viewer.IsisWicketModule",
- "org.apache.isis.applib.services.jdosupport.IsisJdoSupportDN5",
- "org.apache.isis.jdo.datanucleus.persistence.IsisLegacyJdoContextHandler",
+// "org.apache.isis.applib.services.jdosupport.IsisJdoSupportDN5",
+// "org.apache.isis.jdo.datanucleus.persistence.IsisLegacyJdoContextHandler",
"org.apache.wicket.cdi.AutoConversation",
"org.apache.isis.viewer.restfulobjects.rendering.RendererContext"
diff --git a/core/plugins/ioc-weld/src/main/java/org/apache/isis/core/plugins/ioc/weld/scopes/conversation/SeamConversationContextSupport.java b/core/plugins/ioc-weld/src/main/java/org/apache/isis/core/plugins/ioc/weld/scopes/conversation/SeamConversationContextSupport.java
index 7495541..fc17ee8 100644
--- a/core/plugins/ioc-weld/src/main/java/org/apache/isis/core/plugins/ioc/weld/scopes/conversation/SeamConversationContextSupport.java
+++ b/core/plugins/ioc-weld/src/main/java/org/apache/isis/core/plugins/ioc/weld/scopes/conversation/SeamConversationContextSupport.java
@@ -73,7 +73,7 @@ public class SeamConversationContextSupport implements SeamConversationContext<H
// -- HELPER
private HttpConversationContext httpConversationContext() {
- return _CDI.getManagedBean(HttpConversationContext.class).get();
+ return _CDI.select(HttpConversationContext.class).getSingleton().orElse(null);
}
diff --git a/core/plugins/legacy/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceDefault.java b/core/plugins/legacy/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceDefault.java
index 9117374..b5797c2 100644
--- a/core/plugins/legacy/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceDefault.java
+++ b/core/plugins/legacy/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceDefault.java
@@ -27,7 +27,7 @@ import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.fixturescripts.FixtureScript;
import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.config.registry.BeanTypeRegistry;
+import org.apache.isis.config.registry.IsisBeanTypeRegistry;
import org.apache.isis.core.plugins.classdiscovery.ClassDiscoveryPlugin;
/**
@@ -63,7 +63,7 @@ implements ClassDiscoveryService {
// -- HELPER
private static <T> Set<Class<? extends T>> getFixtureScriptTypes() {
- Set<?> fixtureScriptTypes = BeanTypeRegistry.current().getFixtureScriptTypes();
+ Set<?> fixtureScriptTypes = IsisBeanTypeRegistry.current().getFixtureScriptTypes();
if (fixtureScriptTypes != null) {
return _Casts.uncheckedCast(fixtureScriptTypes);
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java b/core/plugins/legacy/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
similarity index 100%
rename from core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
rename to core/plugins/legacy/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/package-info.java b/core/plugins/legacy/src/main/java/org/apache/isis/applib/services/eventbus/package-info.java
similarity index 100%
rename from core/applib/src/main/java/org/apache/isis/applib/services/eventbus/package-info.java
rename to core/plugins/legacy/src/main/java/org/apache/isis/applib/services/eventbus/package-info.java
diff --git a/core/runtime-extensions/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java b/core/runtime-extensions/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java
index f6a4722..d4ee65d 100644
--- a/core/runtime-extensions/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java
+++ b/core/runtime-extensions/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java
@@ -129,7 +129,7 @@ public final class IsisSystem {
_Blackhole.consume(AppConfigLocator.getAppConfig());
- isisSessionFactory = _CDI.getSingleton(IsisSessionFactory.class);
+ isisSessionFactory = _CDI.getSingletonElseFail(IsisSessionFactory.class);
// REVIEW: does no harm, but is this required?
closeSession();
diff --git a/core/runtime-extensions/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java b/core/runtime-extensions/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
index 4ef3885..f3a24e4 100644
--- a/core/runtime-extensions/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
+++ b/core/runtime-extensions/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
@@ -19,7 +19,6 @@
package org.apache.isis.core.webapp;
import static org.apache.isis.commons.internal.base._With.acceptIfPresent;
-import static org.apache.isis.commons.internal.resources._Resources.putContextPathIfPresent;
import java.util.ArrayList;
import java.util.List;
@@ -29,15 +28,20 @@ import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
+import javax.servlet.annotation.WebListener;
import org.apache.isis.commons.internal.base._Blackhole;
+import org.apache.isis.commons.internal.cdi._CDI;
import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.resources._Resources;
import org.apache.isis.config.AppConfigLocator;
+import org.apache.isis.config.registry.IsisBeanTypeRegistry;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.webapp.modules.WebModule;
import org.apache.isis.core.webapp.modules.WebModuleContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import lombok.val;
+import lombok.extern.slf4j.Slf4j;
/**
*
@@ -52,12 +56,13 @@ import org.slf4j.LoggerFactory;
* @since 2.0.0-M2
*
*/
-//@WebListener //[ahuber] to support Servlet 3.0 annotations @WebFilter, @WebListener or others
+@WebListener //[ahuber] to support Servlet 3.0 annotations @WebFilter, @WebListener or others
//with skinny war deployment requires additional configuration, so for now we disable this annotation
+// ... but enabled for now, because we are running into this issue
+// https://stackoverflow.com/questions/44389716/spring-boot-embedded-tomcat-weblistener-scanned-by-servletcomponentscan
+@Slf4j
public class IsisWebAppContextListener implements ServletContextListener {
- private static final Logger LOG = LoggerFactory.getLogger(IsisWebAppContextListener.class);
-
private final List<ServletContextListener> activeListeners = new ArrayList<>();
// -- INTERFACE IMPLEMENTATION
@@ -65,30 +70,33 @@ public class IsisWebAppContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
- final ServletContext servletContext = event.getServletContext();
+ val servletContext = event.getServletContext();
// set the ServletContext initializing thread as preliminary default until overridden by
// IsisWicketApplication#init() or others that better know what ClassLoader to use as application default.
_Context.setDefaultClassLoader(Thread.currentThread().getContextClassLoader(), false);
_Context.putSingleton(ServletContext.class, servletContext);
- putContextPathIfPresent(servletContext.getContextPath());
+ _Resources.putContextPathIfPresent(servletContext.getContextPath());
- LOG.info("=== PHASE 1 === Setting up IoC from AppManifest");
+ log.info("=== PHASE 1/3 === Setting up embedded CDI");
// finalize the config (build and regard immutable)
// as a side-effect bootstrap CDI, if the environment we are running on does not already have its own
_Blackhole.consume(AppConfigLocator.getAppConfig());
- LOG.info("=== PHASE 2 === Preparing the ServletContext");
+ // expected post-condition: a BeanManager should be available
+ _Blackhole.consume(_CDI.getBeanManager());
+
+ log.info("=== PHASE 2/3 === Preparing the ServletContext");
- final WebModuleContext webModuleContext = new WebModuleContext(servletContext);
+ val webModuleContext = new WebModuleContext(servletContext);
final List<WebModule> webModules =
WebModule.discoverWebModules()
.peek(module->module.prepare(webModuleContext)) // prepare context
.collect(Collectors.toList());
- LOG.info("=== PHASE 3 === Initializing the ServletContext");
+ log.info("=== PHASE 3/3 === Initializing the ServletContext");
webModules.stream()
.filter(module->module.isApplicable(webModuleContext)) // filter those WebModules that are applicable
@@ -96,26 +104,26 @@ public class IsisWebAppContextListener implements ServletContextListener {
activeListeners.forEach(listener->listener.contextInitialized(event));
- LOG.info("=== DONE === ServletContext initialized.");
+ log.info("=== DONE === ServletContext initialized.");
}
@Override
public void contextDestroyed(ServletContextEvent event) {
- LOG.info("=== SHUTDOWN === Shutting down ServletContext");
+ log.info("=== SHUTDOWN === Shutting down ServletContext");
activeListeners.forEach(listener->shutdownListener(event, listener));
activeListeners.clear();
IsisContext.clear();
- LOG.info("=== DESTROYED === ServletContext destroyed");
+ log.info("=== DESTROYED === ServletContext destroyed");
}
// -- HELPER
private void addListener(ServletContext context, WebModule module) {
- LOG.info(String.format("Setup ServletContext, adding WebModule '%s'", module.getName()));
+ log.info(String.format("Setup ServletContext, adding WebModule '%s'", module.getName()));
try {
acceptIfPresent(module.init(context), activeListeners::add);
} catch (ServletException e) {
- LOG.error(String.format("Failed to add WebModule '%s' to the ServletContext.", module.getName()), e);
+ log.error(String.format("Failed to add WebModule '%s' to the ServletContext.", module.getName()), e);
}
}
@@ -123,7 +131,7 @@ public class IsisWebAppContextListener implements ServletContextListener {
try {
listener.contextDestroyed(event);
} catch (Exception e) {
- LOG.error(String.format("Failed to shutdown WebListener '%s'.", listener.getClass().getName()), e);
+ log.error(String.format("Failed to shutdown WebListener '%s'.", listener.getClass().getName()), e);
}
}
diff --git a/core/config/src/main/java/org/apache/isis/config/services/view/ConfigurationViewServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/confmenu/ConfigurationViewServiceDefault.java
similarity index 97%
rename from core/config/src/main/java/org/apache/isis/config/services/view/ConfigurationViewServiceDefault.java
rename to core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/confmenu/ConfigurationViewServiceDefault.java
index eb2f484..895bf06 100644
--- a/core/config/src/main/java/org/apache/isis/config/services/view/ConfigurationViewServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/confmenu/ConfigurationViewServiceDefault.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.config.services.view;
+package org.apache.isis.core.runtime.services.confmenu;
import java.util.HashMap;
import java.util.Map;
diff --git a/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePo.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePo.java
index 3017ae8..eade1ca 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePo.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/i18n/po/TranslationServicePo.java
@@ -28,17 +28,14 @@ import org.apache.isis.applib.services.i18n.LocaleProvider;
import org.apache.isis.applib.services.i18n.TranslationService;
import org.apache.isis.applib.services.i18n.TranslationsResolver;
import org.apache.isis.commons.internal.context._Context;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import lombok.AccessLevel;
import lombok.Getter;
@ApplicationScoped //FIXME [2033] cannot provision with @Singleton
+//@Slf4j
public class TranslationServicePo implements TranslationService {
- public static Logger LOG = LoggerFactory.getLogger(TranslationServicePo.class);
-
public static final String KEY_PO_MODE = "isis.services.translation.po.mode";
/**
diff --git a/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java
index 91aabd1..097d092 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java
@@ -30,7 +30,6 @@ import javax.enterprise.inject.Any;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
-import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.annotation.PublishingChangeKind;
import org.apache.isis.applib.services.clock.ClockService;
import org.apache.isis.applib.services.command.Command;
@@ -55,7 +54,6 @@ public class PublishingServiceInternalDefault implements PublishingServiceIntern
@Override
- @Programmatic
public void publishObjects() {
if(suppress) {
@@ -109,7 +107,6 @@ public class PublishingServiceInternalDefault implements PublishingServiceIntern
@Override
- @Programmatic
public void publishAction(final Interaction.Execution<?,?> execution) {
if(suppress) {
@@ -145,7 +142,6 @@ public class PublishingServiceInternalDefault implements PublishingServiceIntern
boolean suppress;
- @Programmatic
@Override
public <T> T withPublishingSuppressed(final Block<T> block) {
try {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java
index 5b218d3..08b600e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java
@@ -26,22 +26,21 @@ import org.apache.isis.applib.fixtures.FixtureType;
import org.apache.isis.applib.fixtures.InstallableFixture;
import org.apache.isis.applib.fixturescripts.events.FixturesInstalledEvent;
import org.apache.isis.applib.fixturescripts.events.FixturesInstallingEvent;
-import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.config.internal._Config;
import org.apache.isis.core.commons.lang.ObjectExtensions;
import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.core.runtime.system.context.session.RuntimeEventService;
import org.apache.isis.core.runtime.system.session.IsisSession;
import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-public class FixturesInstallerDelegate {
+import lombok.val;
+import lombok.extern.slf4j.Slf4j;
- private static final Logger LOG = LoggerFactory.getLogger(FixturesInstallerDelegate.class);
+@Slf4j
+public class FixturesInstallerDelegate {
// -- Constructor, fields
@@ -86,17 +85,17 @@ public class FixturesInstallerDelegate {
* reused across multiple tests (REVIEW: does that make sense?)
*/
public void installFixtures() {
- final IsisConfiguration configuration = getConfiguration();
- final boolean fireEvents = configuration.getBoolean("isis.fixtures.fireEvents", true);
- final EventBusService eventBusService = getEventBusService();
+ val configuration = getConfiguration();
+ val fireEvents = configuration.getBoolean("isis.fixtures.fireEvents", true);
+ val eventService = getRuntimeEventService();
try {
if(fireEvents) {
- eventBusService.post(new FixturesInstallingEvent(this));
+ eventService.fireFixturesInstalling(new FixturesInstallingEvent(this));
}
installFixtures(getFixtures());
} finally {
if(fireEvents) {
- eventBusService.post(new FixturesInstalledEvent(this));
+ eventService.fireFixturesInstalled(new FixturesInstalledEvent(this));
}
}
}
@@ -116,17 +115,17 @@ public class FixturesInstallerDelegate {
// now, install the fixture itself
try {
- LOG.info("installing fixture: {}", fixture);
+ log.info("installing fixture: {}", fixture);
getTransactionManager().startTransaction();
installFixture(fixture);
getTransactionManager().endTransaction();
- LOG.info("fixture installed");
+ log.info("fixture installed");
} catch (final RuntimeException e) {
- LOG.error("installing fixture {} failed; aborting ", fixture.getClass().getName() , e);
+ log.error("installing fixture {} failed; aborting ", fixture.getClass().getName() , e);
try {
getTransactionManager().abortTransaction();
} catch (final Exception e2) {
- LOG.error("failure during abort", e2);
+ log.error("failure during abort", e2);
}
throw e;
}
@@ -162,8 +161,8 @@ public class FixturesInstallerDelegate {
return IsisContext.getServiceInjector();
}
- private EventBusService getEventBusService() {
- return IsisContext.getServiceRegistry().lookupServiceElseFail(EventBusService.class);
+ private RuntimeEventService getRuntimeEventService() {
+ return IsisContext.getServiceRegistry().lookupServiceElseFail(RuntimeEventService.class);
}
private IsisTransactionManager getTransactionManager() {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
index 3b251c3..de1e873 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
@@ -152,7 +152,7 @@ public interface IsisContext {
* @throws NoSuchElementException - if SpecificationLoader not managed
*/
public static SpecificationLoader getSpecificationLoader() {
- return _CDI.getSingleton(SpecificationLoader.class);
+ return _CDI.getSingletonElseFail(SpecificationLoader.class);
}
/**
@@ -160,7 +160,7 @@ public interface IsisContext {
* @throws NoSuchElementException - if ServicesInjector not managed
*/
public static ServiceInjector getServiceInjector() {
- return _CDI.getSingleton(ServiceInjector.class);
+ return _CDI.getSingletonElseFail(ServiceInjector.class);
}
/**
@@ -168,7 +168,7 @@ public interface IsisContext {
* @throws NoSuchElementException - if ServiceRegistry not managed
*/
public static ServiceRegistry getServiceRegistry() {
- return _CDI.getSingleton(ServiceRegistry.class);
+ return _CDI.getSingletonElseFail(ServiceRegistry.class);
}
/**
@@ -176,7 +176,7 @@ public interface IsisContext {
* @throws NoSuchElementException - if IsisSessionFactory not resolvable
*/
public static IsisSessionFactory getSessionFactory() {
- return _CDI.getSingleton(IsisSessionFactory.class);
+ return _CDI.getSingletonElseFail(IsisSessionFactory.class);
}
/**
@@ -211,7 +211,7 @@ public interface IsisContext {
* @throws NoSuchElementException - if ServiceRegistry not managed
*/
public static ObjectAdapterProvider getObjectAdapterProvider() {
- return _CDI.getSingleton(ObjectAdapterService.class);
+ return _CDI.getSingletonElseFail(ObjectAdapterService.class);
}
public static Function<Object, ObjectAdapter> pojoToAdapter() {
@@ -232,11 +232,11 @@ public interface IsisContext {
}
public static AuthenticationManager getAuthenticationManager() {
- return _CDI.getSingleton(AuthenticationManager.class);
+ return _CDI.getSingletonElseFail(AuthenticationManager.class);
}
public static AuthorizationManager getAuthorizationManager() {
- return _CDI.getSingleton(AuthorizationManager.class);
+ return _CDI.getSingletonElseFail(AuthorizationManager.class);
}
// --
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/ManagedObjectResolver.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/ManagedObjectResolver.java
index 02a4f84..23312af 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/ManagedObjectResolver.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/ManagedObjectResolver.java
@@ -3,8 +3,7 @@ package org.apache.isis.core.runtime.system.context.managers;
import java.net.URI;
import java.util.Optional;
-import javax.enterprise.inject.Instance;
-
+import org.apache.isis.core.commons.collections.Bin;
import org.apache.isis.core.metamodel.adapter.oid.UniversalOid;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ManagedObjectState;
@@ -41,7 +40,7 @@ public interface ManagedObjectResolver {
* @param uri
* @return
*/
- Instance<ManagedObject> resolve(ObjectSpecId specId, URI uri);
+ Bin<ManagedObject> resolve(ObjectSpecId specId, URI uri);
/**
@@ -50,7 +49,7 @@ public interface ManagedObjectResolver {
* @param universalOid
* @return reference to the ManagedObject as identified by the universalOid
*/
- default Instance<ManagedObject> resolve(UniversalOid universalOid) {
+ default Bin<ManagedObject> resolve(UniversalOid universalOid) {
val spec = universalOid.getObjectSpecId();
return resolve(spec, universalOid.getObjectUri());
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalContextManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalContextManager.java
index 588d23e..a961c6f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalContextManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalContextManager.java
@@ -10,6 +10,7 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.commons.collections.Bin;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ManagedObjectState;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -41,7 +42,7 @@ public class UniversalContextManager implements ContextManager {
}
@Override
- public Instance<ManagedObject> resolve(ObjectSpecId specId, URI identifier) {
+ public Bin<ManagedObject> resolve(ObjectSpecId specId, URI identifier) {
requires(identifier, "identifier");
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalObjectManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalObjectManager.java
index 7c214f5..f51d413 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalObjectManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalObjectManager.java
@@ -112,15 +112,15 @@ public interface UniversalObjectManager {
@Override
public ObjectAdapter resolve(URI objectUri) {
val contextManager = this.contextManager.get();
- val instance = contextManager.resolve(UniversalOid.of(objectUri));
+ val bin = contextManager.resolve(UniversalOid.of(objectUri));
- if(instance.isResolvable()) {
- val managedObject = instance.get();
+ if(bin.isCardinalityOne()) {
+ val managedObject = bin.getSingleton().get();
val isisSession = IsisSession.currentIfAny();
return ResolveResult.of(objectUri, managedObject).toObjectAdapter(isisSession);
- } else if(instance.isAmbiguous()) {
+ } else if(bin.isCardinalityMultiple()) {
//FIXME [2033] handle ambiguity
throw _Exceptions.notImplemented();
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/builtin/MixinContextManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/builtin/MixinContextManager.java
index 181b85b..264cea4 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/builtin/MixinContextManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/builtin/MixinContextManager.java
@@ -4,19 +4,17 @@ import java.lang.reflect.Array;
import java.lang.reflect.Modifier;
import java.net.URI;
import java.util.Optional;
-import java.util.UUID;
import javax.annotation.PostConstruct;
-import javax.enterprise.inject.Instance;
import javax.enterprise.inject.Vetoed;
import javax.inject.Inject;
-import javax.inject.Singleton;
import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.commons.internal.debug._Probe;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.commons.internal.uri._URI.ContainerType;
import org.apache.isis.commons.internal.uri._URI.ContextType;
+import org.apache.isis.core.commons.collections.Bin;
import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.metamodel.facets.actions.action.invocation.PersistableTypeGuard;
import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -70,7 +68,7 @@ public class MixinContextManager implements ContextHandler {
}
@Override
- public Instance<ManagedObject> resolve(ObjectSpecId specId, URI objectUri) {
+ public Bin<ManagedObject> resolve(ObjectSpecId specId, URI objectUri) {
throw _Exceptions.notImplemented();
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/builtin/ValueContextManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/builtin/ValueContextManager.java
index ef14cdf..aef7417 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/builtin/ValueContextManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/builtin/ValueContextManager.java
@@ -5,20 +5,19 @@ import java.net.URI;
import java.util.Optional;
import javax.annotation.PostConstruct;
-import javax.enterprise.inject.Instance;
import javax.enterprise.inject.Vetoed;
import javax.inject.Inject;
import org.apache.isis.applib.services.urlencoding.UrlEncodingService;
import org.apache.isis.applib.services.urlencoding.UrlEncodingServiceWithCompression;
import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.commons.internal.cdi._CDI;
import org.apache.isis.commons.internal.debug._Probe;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.commons.internal.memento._Mementos;
import org.apache.isis.commons.internal.memento._Mementos.SerializingAdapter;
import org.apache.isis.commons.internal.uri._URI.ContainerType;
import org.apache.isis.commons.internal.uri._URI.ContextType;
+import org.apache.isis.core.commons.collections.Bin;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ManagedObject.SimpleManagedObject;
import org.apache.isis.core.metamodel.spec.ManagedObjectState;
@@ -74,7 +73,7 @@ public class ValueContextManager implements ContextHandler {
}
@Override
- public Instance<ManagedObject> resolve(ObjectSpecId specId, URI objectUri) {
+ public Bin<ManagedObject> resolve(ObjectSpecId specId, URI objectUri) {
val serialized = objectUri.getQuery();
val spec = specLoader.lookupBySpecId(specId);
@@ -98,7 +97,7 @@ public class ValueContextManager implements ContextHandler {
val value = parseMemento(serialized).get("val", expectedType);
val managedObject = SimpleManagedObject.of(spec, value);
- return _CDI.InstanceFactory.singleton(managedObject);
+ return Bin.ofSingleton(managedObject);
} catch (Exception cause) {
val errMsg = String.format("Failed to deserialize memento (container) holding expected type '%s' <- '%s'.",
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/builtin/ViewModelContextManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/builtin/ViewModelContextManager.java
index 0d133d6..d6ccc8d 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/builtin/ViewModelContextManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/builtin/ViewModelContextManager.java
@@ -14,6 +14,7 @@ import org.apache.isis.commons.internal.debug._Probe;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.commons.internal.uri._URI.ContainerType;
import org.apache.isis.commons.internal.uri._URI.ContextType;
+import org.apache.isis.core.commons.collections.Bin;
import org.apache.isis.core.metamodel.facets.actions.action.invocation.PersistableTypeGuard;
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -72,7 +73,7 @@ public class ViewModelContextManager implements ContextHandler {
}
@Override
- public Instance<ManagedObject> resolve(ObjectSpecId specId, URI objectUri) {
+ public Bin<ManagedObject> resolve(ObjectSpecId specId, URI objectUri) {
val serialized = objectUri.getQuery();
val spec = specLoader.lookupBySpecId(specId);
@@ -89,7 +90,7 @@ public class ViewModelContextManager implements ContextHandler {
val managedObject = SimpleManagedObject.of(spec, viewModelPojo);
- return _CDI.InstanceFactory.singleton(managedObject);
+ return Bin.ofSingleton(managedObject);
}
@Override
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/cdi/CDIContextManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/cdi/CDIContextManager.java
index 3957b18..79bb4a9 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/cdi/CDIContextManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/cdi/CDIContextManager.java
@@ -4,16 +4,15 @@ import java.net.URI;
import java.util.Optional;
import javax.annotation.PostConstruct;
-import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.commons.internal._Constants;
-import org.apache.isis.commons.internal.cdi._CDI;
import org.apache.isis.commons.internal.debug._Probe;
import org.apache.isis.commons.internal.uri._URI.ContainerType;
import org.apache.isis.commons.internal.uri._URI.ContextType;
+import org.apache.isis.core.commons.collections.Bin;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ManagedObject.SimpleManagedObject;
import org.apache.isis.core.metamodel.spec.ManagedObjectState;
@@ -63,21 +62,20 @@ public class CDIContextManager implements ContextHandler {
}
@Override
- public Instance<ManagedObject> resolve(ObjectSpecId specId, URI objectUri) {
+ public Bin<ManagedObject> resolve(ObjectSpecId specId, URI objectUri) {
val spec = specLoader.lookupBySpecId(specId);
val id = objectUri.getQuery();
//TODO [2033] future extension ... to refine, convert id to qualifiers
val qualifiers = _Constants.emptyAnnotations;
- val instance = serviceRegistry.getInstance(spec.getCorrespondingClass(), qualifiers);
+ val bin = serviceRegistry.select(spec.getCorrespondingClass(), qualifiers);
probe.println("resolve spec='%s' -> '%s'",
spec.getSpecId().asString(),
- instance);
+ bin);
- return _CDI.InstanceFactory.mapElements(instance,
- beanPojo->SimpleManagedObject.of(spec, beanPojo));
+ return bin.map(beanPojo->SimpleManagedObject.of(spec, beanPojo));
}
@Override
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/session/RuntimeEventService.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/session/RuntimeEventService.java
index 149c89d..6089a8a 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/session/RuntimeEventService.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/session/RuntimeEventService.java
@@ -4,6 +4,9 @@ import javax.enterprise.event.Event;
import javax.inject.Inject;
import javax.inject.Singleton;
+import org.apache.isis.applib.events.ui.CssClassUiEvent;
+import org.apache.isis.applib.fixturescripts.events.FixturesInstalledEvent;
+import org.apache.isis.applib.fixturescripts.events.FixturesInstallingEvent;
import org.apache.isis.core.runtime.system.session.IsisSession;
import lombok.Getter;
@@ -17,39 +20,57 @@ import lombok.Value;
@Singleton
public class RuntimeEventService {
- @Inject Event<AppLifecycleEvent> appLifecycleEvent;
- @Inject Event<SessionLifecycleEvent> sessionLifecycleEvent;
+ @Inject Event<AppLifecycleEvent> appLifecycleEvents;
+ @Inject Event<SessionLifecycleEvent> sessionLifecycleEvents;
+ @Inject Event<FixturesInstallingEvent> fixturesInstallingEvents;
+ @Inject Event<FixturesInstalledEvent> fixturesInstalledEvents;
// -- APP
public void fireAppPreMetamodel() {
- appLifecycleEvent.fire(AppLifecycleEvent.of(AppLifecycleEvent.EventType.appPreMetamodel));
+ appLifecycleEvents.fire(AppLifecycleEvent.of(AppLifecycleEvent.EventType.appPreMetamodel));
}
public void fireAppPostMetamodel() {
- appLifecycleEvent.fire(AppLifecycleEvent.of(AppLifecycleEvent.EventType.appPostMetamodel));
+ appLifecycleEvents.fire(AppLifecycleEvent.of(AppLifecycleEvent.EventType.appPostMetamodel));
}
public void fireAppPreDestroy() {
- appLifecycleEvent.fire(AppLifecycleEvent.of(AppLifecycleEvent.EventType.appPreDestroy));
+ appLifecycleEvents.fire(AppLifecycleEvent.of(AppLifecycleEvent.EventType.appPreDestroy));
}
// -- SESSION
public void fireSessionOpened(IsisSession session) {
- sessionLifecycleEvent.fire(SessionLifecycleEvent.of(session, SessionLifecycleEvent.EventType.sessionOpened));
+ sessionLifecycleEvents.fire(SessionLifecycleEvent.of(session, SessionLifecycleEvent.EventType.sessionOpened));
}
public void fireSessionClosing(IsisSession session) {
- sessionLifecycleEvent.fire(SessionLifecycleEvent.of(session, SessionLifecycleEvent.EventType.sessionClosing));
+ sessionLifecycleEvents.fire(SessionLifecycleEvent.of(session, SessionLifecycleEvent.EventType.sessionClosing));
}
// public void fireSessionFlushing(IsisSession session) {
// sessionLifecycleEvent.fire(SessionLifecycleEvent.of(session, SessionLifecycleEvent.EventType.sessionClosing));
// }
+ // -- FIXTURES
- // -- EVENT CLASSES
+ public void fireFixturesInstalling(FixturesInstallingEvent fixturesInstallingEvent) {
+ fixturesInstallingEvents.fire(fixturesInstallingEvent);
+ }
+
+ public void fireFixturesInstalled(FixturesInstalledEvent fixturesInstalledEvent) {
+ fixturesInstalledEvents.fire(fixturesInstalledEvent);
+ }
+
+ // -- METAMODEL EVENTS
+
+ public void fireCssClassUiEvent(CssClassUiEvent<Object> cssClassUiEvent) {
+ // TODO Auto-generated method stub
+
+ }
+
+ // -- APP EVENT CLASSES
@Value(staticConstructor="of")
public static class AppLifecycleEvent {
@@ -65,6 +86,10 @@ public class RuntimeEventService {
}
+
+
+
+
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
index 8ef6652..15c58bd 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
@@ -21,11 +21,11 @@ package org.apache.isis.core.runtime.system.session;
import java.util.Collections;
import java.util.List;
+import java.util.Optional;
import java.util.concurrent.Callable;
import java.util.stream.Stream;
import javax.annotation.PreDestroy;
-import javax.enterprise.inject.Instance;
import javax.enterprise.inject.Vetoed;
import javax.inject.Inject;
@@ -37,6 +37,7 @@ import org.apache.isis.applib.services.title.TitleService;
import org.apache.isis.commons.internal.base._Blackhole;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.core.commons.collections.Bin;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.specloader.ServiceInitializer;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
@@ -154,8 +155,9 @@ public class IsisSessionFactoryDefault implements IsisSessionFactory {
final Stream<Object> domainServices = serviceRegistry.streamRegisteredBeans()
.filter(BeanAdapter::isDomainService)
.map(BeanAdapter::getInstance)
- .filter(Instance::isResolvable)
- .map(Instance::get)
+ .filter(Bin::isCardinalityOne)
+ .map(Bin::getSingleton)
+ .map(Optional::get)
;
domainServices.forEach(domainService->{
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
index b635eaa..596e63d 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
@@ -23,14 +23,13 @@ import java.util.List;
import java.util.UUID;
import java.util.concurrent.CountDownLatch;
-import javax.enterprise.inject.Instance;
-
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.services.WithTransactionScope;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.applib.services.xactn.Transaction;
import org.apache.isis.applib.services.xactn.TransactionState;
import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.core.commons.collections.Bin;
import org.apache.isis.core.commons.components.TransactionScopedComponent;
import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.commons.util.ToString;
@@ -156,7 +155,7 @@ public class IsisTransaction implements TransactionScopedComponent, Transaction
private final PublishingServiceInternal publishingServiceInternal;
private final AuditingServiceInternal auditingServiceInternal;
- private final Instance<WithTransactionScope> withTransactionScopes;
+ private final Bin<WithTransactionScope> withTransactionScopes;
private IsisException abortCause;
@@ -178,7 +177,7 @@ public class IsisTransaction implements TransactionScopedComponent, Transaction
this.auditingServiceInternal = serviceRegistry.lookupServiceElseFail(AuditingServiceInternal.class);
withTransactionScopes = serviceRegistry
- .getInstance(WithTransactionScope.class);
+ .select(WithTransactionScope.class);
this.state = State.IN_PROGRESS;
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 dd00cae..f08ad91 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
@@ -41,10 +41,8 @@ import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.commons.internal.resources._Resources;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.config.internal._Config;
-import org.apache.isis.core.commons.ensure.Ensure;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
import org.apache.isis.core.runtime.threadpool.ThreadPoolSupport;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettingsAccessor;
@@ -176,7 +174,7 @@ implements ComponentFactoryRegistryAccessor, PageClassRegistryAccessor, WicketVi
// @Inject private ImageResourceCache imageCache;
// @Inject private WicketViewerSettings wicketViewerSettings;
@Inject private PageClassRegistry pageClassRegistry;
- @Inject private IsisSessionFactory isisSessionFactory;
+// @Inject private IsisSessionFactory isisSessionFactory;
@Inject private WicketViewerSettings settings;
private final IsisWicketApplication_Experimental experimental;
@@ -261,7 +259,7 @@ implements ComponentFactoryRegistryAccessor, PageClassRegistryAccessor, WicketVi
// initWicketComponentInjection(injector);
//
// injector.injectMembers(this); // populates this.isisSessionFactory
- Ensure.ensure("IsisSessionFactory should have been injected.", this.isisSessionFactory != null);
+// Ensure.ensure("IsisSessionFactory should have been injected.", this.isisSessionFactory != null);
if (requestCycleListenerForIsis instanceof WebRequestCycleForIsis) {
WebRequestCycleForIsis webRequestCycleForIsis = (WebRequestCycleForIsis) requestCycleListenerForIsis;
@@ -628,9 +626,9 @@ implements ComponentFactoryRegistryAccessor, PageClassRegistryAccessor, WicketVi
@Override
protected void onDestroy() {
try {
- if (isisSessionFactory != null) {
- isisSessionFactory.destroyServicesAndShutdown();
- }
+// if (isisSessionFactory != null) {
+// isisSessionFactory.destroyServicesAndShutdown();
+// }
super.onDestroy();
IsisContext.clear();
} catch(final RuntimeException ex) {
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
index 6d984b2..a383516 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
@@ -91,7 +91,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
private final static _Probe probe = _Probe.unlimited().label("WebRequestCycleForIsis");
private _Lazy<RequestContextService> requestContextService = _Lazy.of(()->
- _CDI.getSingleton(RequestContextService.class));
+ _CDI.getSingletonElseFail(RequestContextService.class));
public final static MetaDataKey<RequestContextHandle> REQUEST_CONTEXT_HANDLE_KEY
= new MetaDataKey<RequestContextHandle>() {
@@ -242,7 +242,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
// handle recognized exceptions gracefully also
final Stream<ExceptionRecognizer> exceptionRecognizers = getServiceRegistry()
- .getInstance(ExceptionRecognizer.class)
+ .select(ExceptionRecognizer.class)
.stream();
String recognizedMessageIfAny = new ExceptionRecognizerComposite(exceptionRecognizers).recognize(ex);
@@ -324,8 +324,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
if(inIsisSession()) {
getServiceRegistry()
- .getInstance(ExceptionRecognizer.class)
- .stream()
+ .select(ExceptionRecognizer.class)
.forEach(exceptionRecognizers::add);
} else {
val metaModelDeficiencies = IsisContext.getMetaModelDeficienciesIfAny();
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 9e2ae6f..d2baeeb 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -471,7 +471,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
PersistableTypeGuard2.instate(resultAdapter);
final Stream<RoutingService> routingServices = getServiceRegistry()
- .getInstance(RoutingService.class)
+ .select(RoutingService.class)
.stream();
final Object resultPojo = resultAdapter != null ? resultAdapter.getPojo() : null;
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
index d669b2d..287382c 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
@@ -28,19 +28,12 @@ import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Stream;
-import javax.enterprise.inject.Instance;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
-import org.apache.wicket.model.Model;
-
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.layout.grid.Grid;
import org.apache.isis.applib.services.tablecol.TableColumnOrderService;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.core.commons.collections.Bin;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -63,6 +56,11 @@ import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.
import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ObjectAdapterTitleColumn;
import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ObjectAdapterToggleboxColumn;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.model.Model;
/**
* {@link PanelAbstract Panel} that represents a {@link EntityCollectionModel
@@ -244,8 +242,8 @@ extends PanelAbstract<EntityCollectionModel> implements CollectionCountProvider
}
// optional SPI to reorder
- final Instance<TableColumnOrderService> tableColumnOrderServices =
- getServiceRegistry().getInstance(TableColumnOrderService.class);
+ final Bin<TableColumnOrderService> tableColumnOrderServices =
+ getServiceRegistry().select(TableColumnOrderService.class);
for (final TableColumnOrderService tableColumnOrderService : tableColumnOrderServices) {
final List<String> propertyReorderedIds = reordered(tableColumnOrderService, propertyIds);
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index 5f4a5ed..b309e63 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
@@ -209,7 +209,7 @@ public abstract class PageAbstract extends WebPage implements ActionPromptProvid
// REVIEW: similar code in WebRequestCycleForIsis
final Stream<ExceptionRecognizer> exceptionRecognizers = getServiceRegistry()
- .getInstance(ExceptionRecognizer.class)
+ .select(ExceptionRecognizer.class)
.stream();
final String recognizedMessageIfAny = new ExceptionRecognizerComposite(exceptionRecognizers).recognize(ex);
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
index 6434a6b..90c2473 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
@@ -486,7 +486,7 @@ implements FormExecutor {
// see if the exception is recognized as being a non-serious error
// (nb: similar code in WebRequestCycleForIsis, as a fallback)
final Stream<ExceptionRecognizer> exceptionRecognizers = getServiceRegistry()
- .getInstance(ExceptionRecognizer.class)
+ .select(ExceptionRecognizer.class)
.stream();
String recognizedErrorIfAny = new ExceptionRecognizerComposite(exceptionRecognizers).recognize(ex);
if (recognizedErrorIfAny != null) {
diff --git a/example/application/springapp/pom.xml b/example/application/springapp/pom.xml
index 26ce268..1bbccae 100644
--- a/example/application/springapp/pom.xml
+++ b/example/application/springapp/pom.xml
@@ -140,6 +140,12 @@
<!-- OTHER DEPENDENCIES -->
+ <dependency> <!-- TODO [2033] as long as isis depends on it we need to package it -->
+ <groupId>javax.jdo</groupId>
+ <artifactId>jdo-api</artifactId>
+ <version>3.1</version>
+ </dependency>
+
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
diff --git a/example/application/springapp/src/main/java/isis/incubator/BeanScanInterceptorForSpring.java b/example/application/springapp/src/main/java/isis/incubator/BeanScanInterceptorForSpring.java
index ac1fba3..6168617 100644
--- a/example/application/springapp/src/main/java/isis/incubator/BeanScanInterceptorForSpring.java
+++ b/example/application/springapp/src/main/java/isis/incubator/BeanScanInterceptorForSpring.java
@@ -2,13 +2,12 @@ package isis.incubator;
import java.io.IOException;
+import org.apache.isis.config.registry.IsisBeanTypeRegistry;
+import org.apache.isis.config.registry.TypeMetaData;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.TypeFilter;
-import org.apache.isis.config.registry.BeanTypeRegistry;
-import org.apache.isis.config.registry.TypeMetaData;
-
import lombok.Getter;
import lombok.val;
import lombok.extern.slf4j.Slf4j;
@@ -16,7 +15,7 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public class BeanScanInterceptorForSpring implements TypeFilter {
- @Getter(lazy=true) private final BeanTypeRegistry typeRegistry = BeanTypeRegistry.current();
+ @Getter(lazy=true) private final IsisBeanTypeRegistry typeRegistry = IsisBeanTypeRegistry.current();
@Override
public boolean match(
@@ -29,7 +28,7 @@ public class BeanScanInterceptorForSpring implements TypeFilter {
return false;
}
- if(log.isInfoEnabled()) log.info("scanning concrete type {}", classMetadata.getClassName());
+ if(log.isDebugEnabled()) log.debug("scanning concrete type {}", classMetadata.getClassName());
val annotationMetadata = metadataReader.getAnnotationMetadata();
val annotationTypes = annotationMetadata.getAnnotationTypes();
diff --git a/example/application/springapp/src/main/java/isis/incubator/IsisBoot.java b/example/application/springapp/src/main/java/isis/incubator/IsisBoot.java
index 30d1e95..ccab27f 100644
--- a/example/application/springapp/src/main/java/isis/incubator/IsisBoot.java
+++ b/example/application/springapp/src/main/java/isis/incubator/IsisBoot.java
@@ -1,5 +1,19 @@
package isis.incubator;
+import java.util.List;
+import java.util.stream.Stream;
+
+import org.apache.isis.applib.IsisApplibModule;
+import org.apache.isis.commons.internal.cdi._CDI;
+import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.config.AppConfig;
+import org.apache.isis.config.registry.IsisBeanTypeRegistry;
+import org.apache.isis.core.metamodel.MetamodelModule;
+import org.apache.isis.core.runtime.RuntimeModule;
+import org.apache.isis.core.runtime.services.RuntimeServicesModule;
+import org.apache.isis.core.runtime.services.i18n.po.TranslationServicePo;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
@@ -8,33 +22,47 @@ import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
-import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.config.AppConfig;
-import org.apache.isis.core.runtime.RuntimeModule;
-
import lombok.val;
import springapp.boot.web.SpringAppManifest;
@Configuration
-@ComponentScan(basePackageClasses={RuntimeModule.class}, includeFilters= {
- @Filter(type = FilterType.CUSTOM, classes= {BeanScanInterceptorForSpring.class})
+@ComponentScan(
+ basePackageClasses= {
+ IsisApplibModule.class,
+ MetamodelModule.class,
+ RuntimeModule.class,
+ RuntimeServicesModule.class},
+ includeFilters= {
+ @Filter(type = FilterType.CUSTOM, classes= {BeanScanInterceptorForSpring.class})
})
public class IsisBoot implements ApplicationContextAware {
+
+ //TODO @Autowired AppConfig appConfig;
@Override
public void setApplicationContext(ApplicationContext springContext) throws BeansException {
- // TODO put AppConfig onto the _Context
-
val appConfig = new SpringAppManifest();
System.out.println("!!!!!!!!!!!!!!!!!!! finalizing config");
appConfig.isisConfiguration();
System.out.println("!!!!!!!!!!!!!!!!!!! finalized config");
-
_Context.putSingleton(AppConfig.class, appConfig);
+ // init CDI
+ _CDI.init(()->
+ Stream.concat(
+ Stream.of(
+ appConfig.getClass(),
+ TranslationServicePo.class //FIXME [2033] cannot provision with @Singleton
+ ),
+ IsisBeanTypeRegistry.current().streamCdiManaged())
+ );
+
+ System.out.println("!!!!!!!!!!!!!!!!!!! verify core services");
+ verifyCoreServices();
+
// TODO Auto-generated method stub
System.out.println("!!!!!!!!!!!!!!!!!!! TODO bootstrap isis from context");
@@ -52,10 +80,53 @@ public class IsisBoot implements ApplicationContextAware {
}
-// @Bean
-// public AppConfig appConfig() {
-// return AppConfig.empty();
-// }
+ private final List<Class<?>> coreServices = _Lists.of(
+
+ org.apache.isis.config.IsisConfiguration.class,
+ org.apache.isis.applib.services.registry.ServiceRegistry.class,
+ org.apache.isis.core.runtime.system.session.IsisSessionFactory.class,
+
+ org.apache.isis.core.security.authentication.manager.AuthenticationManager.class,
+ org.apache.isis.core.security.authorization.manager.AuthorizationManager.class,
+ org.apache.isis.core.security.authentication.AuthenticationSessionProvider.class,
+
+ org.apache.isis.core.metamodel.specloader.SpecificationLoader.class,
+
+ //org.apache.isis.applib.services.eventbus.EventBusService.class,
+ org.apache.isis.applib.services.factory.FactoryService.class,
+
+ org.apache.isis.applib.services.i18n.LocaleProvider.class,
+ org.apache.isis.applib.services.i18n.TranslationsResolver.class,
+ org.apache.isis.applib.services.i18n.TranslationService.class,
+ org.apache.isis.applib.services.message.MessageService.class,
+
+ org.apache.isis.applib.services.repository.RepositoryService.class,
+ org.apache.isis.applib.services.title.TitleService.class,
+ org.apache.isis.applib.services.user.UserService.class,
+ org.apache.isis.applib.services.xactn.TransactionService.class,
+
+ org.apache.isis.core.metamodel.services.persistsession.ObjectAdapterService.class,
+
+ org.apache.isis.applib.services.wrapper.WrapperFactory.class,
+ org.apache.isis.core.runtime.services.bookmarks.BookmarkServiceInternalDefault.class,
+
+ org.apache.isis.applib.services.homepage.HomePageProviderService.class
+
+ );
+
+ private void verifyCoreServices() {
+
+ coreServices.stream()
+ .forEach(type->{
+ val beans = _CDI.select(type);
+ if(!beans.isCardinalityOne()) {
+ throw _Exceptions.unrecoverable("Core Service not known to CDI: " + type );
+ }
+ });
+
+ }
+
+
// @Bean
// public SpecificationLoader specificationLoader(IsisSessionProducerBean isisSessionProducerBean) {
diff --git a/example/application/springapp/src/main/java/springapp/boot/web/SpringBootTomcatApplication.java b/example/application/springapp/src/main/java/springapp/boot/web/SpringBootTomcatApplication.java
index 2700c3f..07aef56 100644
--- a/example/application/springapp/src/main/java/springapp/boot/web/SpringBootTomcatApplication.java
+++ b/example/application/springapp/src/main/java/springapp/boot/web/SpringBootTomcatApplication.java
@@ -2,11 +2,6 @@ package springapp.boot.web;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-import org.springframework.context.annotation.Bean;
-
-import org.apache.isis.core.runtime.threadpool.ThreadPoolExecutionMode;
-import org.apache.isis.core.runtime.threadpool.ThreadPoolSupport;
-import org.apache.isis.core.webapp.IsisWebAppContextListener;
import isis.incubator.IsisBoot;
import springapp.dom.DomainModule;
@@ -14,14 +9,10 @@ import springapp.dom.DomainModule;
@SpringBootApplication(scanBasePackageClasses= {DomainModule.class, IsisBoot.class})
public class SpringBootTomcatApplication extends SpringBootServletInitializer {
- @Bean
- public IsisWebAppContextListener isisWebAppContextListener() {
-
- ThreadPoolSupport.HIGHEST_CONCURRENCY_EXECUTION_MODE_ALLOWED =
- ThreadPoolExecutionMode.SEQUENTIAL_WITHIN_CALLING_THREAD;
-
- return new IsisWebAppContextListener();
- }
+// @Bean
+// public IsisWebAppContextListener isisWebAppContextListener() {
+// return new IsisWebAppContextListener();
+// }
}
diff --git a/example/application/springapp/src/main/webapp/WEB-INF/shiro.ini b/example/application/springapp/src/main/webapp/WEB-INF/shiro.ini
new file mode 100644
index 0000000..bc52895
--- /dev/null
+++ b/example/application/springapp/src/main/webapp/WEB-INF/shiro.ini
@@ -0,0 +1,58 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+[main]
+
+
+# to use .ini file
+securityManager.realms = $iniRealm
+
+
+# -----------------------------------------------------------------------------
+# Users and their assigned roles
+#
+# Each line conforms to the format defined in the
+# org.apache.shiro.realm.text.TextConfigurationRealm#setUserDefinitions JavaDoc
+# -----------------------------------------------------------------------------
+
+[users]
+# user = password, role1, role2, role3, ...
+
+
+sven = pass, admin_role
+dick = pass, user_role
+bob = pass, user_role
+joe = pass, user_role
+
+
+
+# -----------------------------------------------------------------------------
+# Roles with assigned permissions
+#
+# Each line conforms to the format defined in the
+# org.apache.shiro.realm.text.TextConfigurationRealm#setRoleDefinitions JavaDoc
+# -----------------------------------------------------------------------------
+
+[roles]
+# role = perm1, perm2, perm3, ...
+# perm in format: packageName:className:memberName:r,w
+
+user_role = *:HelloWorldObjects:*:*,\
+ *:HelloWorldObject:*:*
+admin_role = *