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/09/27 18:42:34 UTC
[isis] branch v2 updated: ISIS-2158: class discovery: removes the
need for a custom scan-filter
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/v2 by this push:
new c4d0233 ISIS-2158: class discovery: removes the need for a custom scan-filter
c4d0233 is described below
commit c4d023316ae4e145cf68b06ffa88afc15665b386
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 27 20:42:24 2019 +0200
ISIS-2158: class discovery: removes the need for a custom scan-filter
- @Singleton is no longer discovered!
- use @Service or @DomainService instead
- the IsisBeanScanInterceptorForSpring is now a NoOp, waiting to be
removed
- IsisBoot installs the IsisBeanFactoryPostProcessorForSpring which is
the replacement for the filter above
---
.../isis/applib/annotation/DomainObject.java | 7 +
.../isis/applib/annotation/DomainService.java | 8 ++
.../org/apache/isis/applib/annotation/Mixin.java | 7 +
.../apache/isis/applib/annotation/ViewModel.java | 7 +
.../services/audit/AuditerServiceLogging.java | 5 +-
.../isis/applib/services/clock/ClockService.java | 5 +-
.../applib/services/jaxb/JaxbServiceDefault.java | 5 +-
.../services/publish/PublisherServiceLogging.java | 4 +-
.../IsisBeanFactoryPostProcessorForSpring.java | 106 +++++++++++++++
.../beans/IsisBeanScanInterceptorForSpring.java | 32 ++---
.../resources/presets/DebugDiscovery.properties | 1 +
.../metamodel/services/ServiceInjectorDefault.java | 3 +-
.../appfeat/ApplicationFeatureFactory.java | 5 +-
.../ApplicationFeatureRepositoryDefault.java | 4 +-
.../services/events/MetamodelEventService.java | 4 +-
.../exceprecog/ExceptionRecognizerDocDefault.java | 4 +-
.../services/grid/GridLoaderServiceDefault.java | 4 +-
.../services/grid/GridServiceDefault.java | 4 +-
.../grid/bootstrap3/GridSystemServiceBS3.java | 4 +-
.../services/layout/LayoutServiceDefault.java | 4 +-
.../metamodel/MetaModelServiceDefault.java | 4 +-
.../services/registry/ServiceRegistryDefault.java | 3 +-
.../services/repository/RepositoryServiceJdo.java | 5 +-
.../services/swagger/SwaggerServiceDefault.java | 4 +-
.../services/title/TitleServiceDefault.java | 4 +-
.../services/user/UserServiceDefault.java | 5 +-
.../specloader/InjectorMethodEvaluatorDefault.java | 4 +-
.../MetaModelValidatorServiceDefault.java | 5 +-
.../specloader/ProgrammingModelServiceDefault.java | 5 +-
.../specloader/SpecificationLoaderDefault.java | 5 +-
.../IsisPlatformTransactionManagerForJdo.java | 4 +-
.../isis/jdo/jdosupport/IsisJdoSupportDN5.java | 5 +-
.../org/apache/isis/runtime/spring/IsisBoot.java | 3 +
.../apache/isis/wrapper/WrapperFactoryDefault.java | 5 +-
.../AuthenticationSessionProviderDefault.java | 5 +-
.../background/CommandExecutorServiceDefault.java | 5 +-
.../bookmarks/BookmarkServiceInternalDefault.java | 5 +-
.../services/command/CommandServiceDefault.java | 4 +-
.../services/eventbus/EventBusServiceSpring.java | 4 +-
.../factory/FactoryServiceInternalDefault.java | 5 +-
.../homepage/HomePageResolverServiceDefault.java | 5 +-
.../services/i18n/po/TranslationServicePo.java | 5 +-
.../menubars/MenuBarsLoaderServiceDefault.java | 4 +-
.../menubars/bootstrap3/MenuBarsServiceBS3.java | 5 +-
.../services/message/MessageServiceDefault.java | 4 +-
.../persist/ObjectAdapterServiceDefault.java | 4 +-
.../services/routing/RoutingServiceDefault.java | 5 +-
.../sessmgmt/SessionManagementServiceDefault.java | 5 +-
.../services/sse/EventStreamServiceDefault.java | 5 +-
.../services/xactn/TransactionServiceSpring.java | 4 +-
.../xmlsnapshot/XmlSnapshotServiceDefault.java | 7 +-
.../modules/h2console/WebModuleH2Console.java | 4 +-
.../logonlog/WebModuleLogOnExceptionLogger.java | 4 +-
.../resources/WebModuleStaticResources.java | 4 +-
.../modules/sse/WebModuleServerSentEvents.java | 4 +-
.../context/session/RuntimeEventService.java | 5 +-
.../JdoPersistenceLifecycleService.java | 3 +-
.../events/PersistenceEventService.java | 5 +-
.../system/session/IsisSessionFactoryDefault.java | 7 +-
.../transaction/AuditingServiceInternal.java | 5 +-
.../PersistenceSessionServiceInternalDefault.java | 5 +-
.../manager/AuthorizationManagerStandard.java | 4 +-
.../apache/isis/security/shiro/WebModuleShiro.java | 3 +-
.../RepresentationServiceContentNegotiator.java | 5 +-
.../restfulobjects/WebModuleRestfulObjects.java | 4 +-
.../isis/viewer/wicket/viewer/WebModuleWicket.java | 4 +-
.../imagecache/ImageResourceCacheClassPath.java | 5 +-
.../ComponentFactoryRegistrarDefault.java | 4 +-
.../ComponentFactoryRegistryDefault.java | 4 +-
.../registries/pages/PageClassListDefault.java | 5 +-
.../registries/pages/PageClassRegistryDefault.java | 4 +-
.../pages/PageNavigationServiceDefault.java | 4 +-
.../viewer/services/DeepLinkServiceWicket.java | 4 +-
.../viewer/services/LocaleProviderWicket.java | 5 +-
.../services/TranslationsResolverWicket.java | 5 +-
.../settings/WicketViewerSettingsDefault.java | 4 +-
.../java/domainapp/dom/jee/JeeDemoService.java | 4 +-
.../domainapp/dom/types/blob/DemoBlobStore.java | 5 +-
.../domainapp/utils/LibraryPreloadingService.java | 5 +-
.../conf/Configuration_usingStereotypes.java | 15 +++
.../testdomain/model/stereotypes/MyObject.java} | 13 +-
.../model/stereotypes/MyObject_mixin.java} | 18 ++-
.../testdomain/model/stereotypes/MyService.java} | 12 +-
.../isis/testdomain/model/stereotypes/MyView.java} | 12 +-
.../testdomain/auditing/AuditerServiceTest.java | 4 +-
.../bootstrapping/AutoConfigurationTest.java | 150 +++++++++++++++++++++
.../JdoBootstrappingTest_usingFixtures.java | 2 +
.../SpringServiceProvisioningTest.java | 7 +-
.../eventhandling/GenericEventPublishingTest.java | 6 +-
.../eventhandling/SpringEventPublishingTest.java | 6 +-
.../publishing/PublisherServiceTest.java | 3 +-
...ransactionRollbackTest_usingTransactional.java} | 2 +-
.../extensions/fixtures/FixturesEventService.java | 4 +-
.../fixtures/FixturesLifecyleService.java | 5 +-
.../fixturescripts/ExecutionParametersService.java | 4 +-
.../QueryResultsCacheControlInternal.java | 5 +-
.../secman/jdo/seed/SeedSecurityModuleService.java | 4 +-
97 files changed, 558 insertions(+), 203 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObject.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObject.java
index 5388086..34e4134 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObject.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObject.java
@@ -24,6 +24,8 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import org.springframework.stereotype.Component;
+
import org.apache.isis.applib.events.domain.ActionDomainEvent;
import org.apache.isis.applib.events.domain.CollectionDomainEvent;
import org.apache.isis.applib.events.domain.PropertyDomainEvent;
@@ -37,10 +39,15 @@ import org.apache.isis.applib.events.lifecycle.ObjectUpdatingEvent;
/**
* Domain semantics for domain objects (entities and view models; for services see {@link org.apache.isis.applib.annotation.DomainService}).
+ *
+ * @apiNote Meta annotation {@link Component} allows for the Spring framework to pick up (discover) the
+ * annotated type.
+ * For more details see {@link org.apache.isis.config.beans.IsisBeanFactoryPostProcessorForSpring}.
*/
@Inherited
@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
+@Component
public @interface DomainObject {
/**
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java
index 4023001..85a9728 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java
@@ -25,16 +25,24 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import org.springframework.stereotype.Service;
+
/**
* Indicates that the class should be automatically recognized as a domain service.
*
* <p>
* Also indicates whether the domain service acts as a repository for an entity, and menu ordering UI hints.
* </p>
+ *
+ * @apiNote Meta annotation {@link Service} allows for the Spring framework to pick up (discover) the
+ * annotated type.
+ * For more details see {@link org.apache.isis.config.beans.IsisBeanFactoryPostProcessorForSpring}.
+ *
*/
@Inherited
@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
+@Service
public @interface DomainService {
/**
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Mixin.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Mixin.java
index 6ea021d..7568045 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Mixin.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Mixin.java
@@ -25,13 +25,20 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import org.springframework.stereotype.Component;
+
/**
* An object that acts as a mix-in to some other object, contributing behaviour and/or derived state based on the
* domain object.
+ *
+ * @apiNote Meta annotation {@link Component} allows for the Spring framework to pick up (discover) the
+ * annotated type.
+ * For more details see {@link org.apache.isis.config.beans.IsisBeanFactoryPostProcessorForSpring}.
*/
@Inherited
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
+@Component
public @interface Mixin {
/**
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java
index 0912744..3c61bbc 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java
@@ -27,6 +27,8 @@ import java.lang.annotation.Target;
import javax.xml.bind.annotation.XmlRootElement;
+import org.springframework.stereotype.Component;
+
/**
* An object that is conceptually part of the application layer, and which surfaces behaviour and/or state that
* is aggregate of one or more domain entity.
@@ -46,10 +48,15 @@ import javax.xml.bind.annotation.XmlRootElement;
* </p>
*
* @see ViewModel
+ *
+ * @apiNote Meta annotation {@link Component} allows for the Spring framework to pick up (discover) the
+ * annotated type.
+ * For more details see {@link org.apache.isis.config.beans.IsisBeanFactoryPostProcessorForSpring}.
*/
@Inherited
@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
+@Component
public @interface ViewModel {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/audit/AuditerServiceLogging.java b/core/applib/src/main/java/org/apache/isis/applib/services/audit/AuditerServiceLogging.java
index 8729e30..31f1810 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/audit/AuditerServiceLogging.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/audit/AuditerServiceLogging.java
@@ -22,13 +22,14 @@ import java.sql.Timestamp;
import java.util.UUID;
import javax.annotation.PostConstruct;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.bookmark.Bookmark;
import lombok.extern.log4j.Log4j2;
-@Singleton
+@Service
@Log4j2
public class AuditerServiceLogging implements AuditerService {
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 0561ebc..723fb23 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
@@ -20,11 +20,10 @@ package org.apache.isis.applib.services.clock;
import java.sql.Timestamp;
-import javax.inject.Singleton;
-
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.clock.Clock;
@@ -34,7 +33,7 @@ import org.apache.isis.applib.clock.Clock;
* co-ordinated time management through a centralized time service.
*
*/
-@Singleton
+@Service
public class ClockService {
public LocalDate now() {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbServiceDefault.java b/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbServiceDefault.java
index 47c5a64..eb94b52 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbServiceDefault.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbServiceDefault.java
@@ -21,13 +21,14 @@ package org.apache.isis.applib.services.jaxb;
import java.util.Map;
import javax.inject.Inject;
-import javax.inject.Singleton;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.domain.DomainObjectList;
import org.apache.isis.applib.services.inject.ServiceInjector;
@@ -36,7 +37,7 @@ import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.schema.utils.jaxbadapters.PersistentEntitiesAdapter;
import org.apache.isis.schema.utils.jaxbadapters.PersistentEntityAdapter;
-@Singleton
+@Service
public class JaxbServiceDefault extends JaxbService.Simple {
@Override
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/publish/PublisherServiceLogging.java b/core/applib/src/main/java/org/apache/isis/applib/services/publish/PublisherServiceLogging.java
index 854ae0e..91bedd0 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/publish/PublisherServiceLogging.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/publish/PublisherServiceLogging.java
@@ -18,7 +18,7 @@
*/
package org.apache.isis.applib.services.publish;
-import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.iactn.Interaction;
import org.apache.isis.schema.chg.v1.ChangesDto;
@@ -28,7 +28,7 @@ import org.apache.isis.schema.utils.InteractionDtoUtils;
import lombok.extern.log4j.Log4j2;
-@Singleton @Log4j2
+@Service @Log4j2
public class PublisherServiceLogging implements PublisherService {
@Override
diff --git a/core/config/src/main/java/org/apache/isis/config/beans/IsisBeanFactoryPostProcessorForSpring.java b/core/config/src/main/java/org/apache/isis/config/beans/IsisBeanFactoryPostProcessorForSpring.java
new file mode 100644
index 0000000..aa89561
--- /dev/null
+++ b/core/config/src/main/java/org/apache/isis/config/beans/IsisBeanFactoryPostProcessorForSpring.java
@@ -0,0 +1,106 @@
+/*
+ * 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.config.beans;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.stereotype.Component;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.Mixin;
+import org.apache.isis.applib.annotation.ViewModel;
+import org.apache.isis.config.registry.IsisBeanTypeRegistry;
+import org.apache.isis.config.registry.TypeMetaData;
+
+import lombok.Getter;
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
+
+/**
+ * The framework's stereotypes {@link DomainService}, {@link DomainObject}, {@link ViewModel}, etc.
+ * are meta annotated with eg. {@link Component}, which allows for the Spring framework to pick up the
+ * annotated type as candidate to become a managed bean.
+ * <p>
+ * By plugging into Spring's bootstrapping via a {@link BeanFactoryPostProcessor}, intercepting those
+ * types is possible. Eg. {@link ViewModel} should not be managed by Spring, only discovered.
+ *
+ * @since 2.0
+ *
+ */
+@Log4j2 @Component
+public class IsisBeanFactoryPostProcessorForSpring implements BeanFactoryPostProcessor {
+
+ @Getter(lazy=true)
+ private final IsisBeanTypeRegistry typeRegistry = IsisBeanTypeRegistry.current();
+
+ @Override
+ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
+
+ val registry = (BeanDefinitionRegistry) beanFactory;
+ for (String beanDefinitionName : registry.getBeanDefinitionNames()) {
+
+ log.debug(()->"processing: " + beanDefinitionName);
+
+ val beanDefinition = registry.containsBeanDefinition(beanDefinitionName)
+ ? registry.getBeanDefinition(beanDefinitionName)
+ : null;
+
+ if(beanDefinition==null || beanDefinition.getBeanClassName() == null) {
+ continue; // check next beanDefinition
+ }
+
+ val typeMetaData = TypeMetaData.of(beanDefinition.getBeanClassName());
+
+ //TODO should re-implement/rename this method
+ getTypeRegistry().isIoCManagedType(typeMetaData);
+
+ if(hasMetamodelAnnotation_otherThanDomainService(typeMetaData)) {
+ registry.removeBeanDefinition(beanDefinitionName);
+ log.debug(()->"removing: " + beanDefinitionName);
+ }
+
+ }
+
+ }
+
+ //TODO this should be a functionality of the IsisBeanTypeRegistry
+ private boolean hasMetamodelAnnotation_otherThanDomainService(TypeMetaData typeMetaData) {
+
+ val type = typeMetaData.getUnderlyingClass();
+
+ if(type.isAnnotationPresent(DomainObject.class)) {
+ return true;
+ }
+
+ if(type.isAnnotationPresent(ViewModel.class)) {
+ return true;
+ }
+
+ if(type.isAnnotationPresent(Mixin.class)) {
+ return true;
+ }
+
+ return false;
+
+ }
+
+}
diff --git a/core/config/src/main/java/org/apache/isis/config/beans/IsisBeanScanInterceptorForSpring.java b/core/config/src/main/java/org/apache/isis/config/beans/IsisBeanScanInterceptorForSpring.java
index 71182db..0b3482b 100644
--- a/core/config/src/main/java/org/apache/isis/config/beans/IsisBeanScanInterceptorForSpring.java
+++ b/core/config/src/main/java/org/apache/isis/config/beans/IsisBeanScanInterceptorForSpring.java
@@ -31,7 +31,7 @@ import lombok.Getter;
import lombok.val;
import lombok.extern.log4j.Log4j2;
-@Log4j2
+@Log4j2 @Deprecated
public class IsisBeanScanInterceptorForSpring implements TypeFilter {
@Getter(lazy=true)
@@ -42,21 +42,23 @@ public class IsisBeanScanInterceptorForSpring implements TypeFilter {
MetadataReader metadataReader,
MetadataReaderFactory metadataReaderFactory)
throws IOException {
+
+ return false; //NOOP
- val classMetadata = metadataReader.getClassMetadata();
- if(!classMetadata.isConcrete()) {
- return false;
- }
-
- //val annotationMetadata = metadataReader.getAnnotationMetadata();
- //val annotationTypes = annotationMetadata.getAnnotationTypes();
- val typeMetaData = TypeMetaData.of(classMetadata.getClassName()/*, annotationTypes*/);
-
- if(log.isDebugEnabled()) {
- log.debug("scanning concrete type {} -> {}", classMetadata.getClassName(), typeMetaData);
- }
-
- return getTypeRegistry().isIoCManagedType(typeMetaData);
+// val classMetadata = metadataReader.getClassMetadata();
+// if(!classMetadata.isConcrete()) {
+// return false;
+// }
+//
+// //val annotationMetadata = metadataReader.getAnnotationMetadata();
+// //val annotationTypes = annotationMetadata.getAnnotationTypes();
+// val typeMetaData = TypeMetaData.of(classMetadata.getClassName()/*, annotationTypes*/);
+//
+// if(log.isDebugEnabled()) {
+// log.debug("scanning concrete type {} -> {}", classMetadata.getClassName(), typeMetaData);
+// }
+//
+// return getTypeRegistry().isIoCManagedType(typeMetaData);
}
}
diff --git a/core/config/src/main/resources/presets/DebugDiscovery.properties b/core/config/src/main/resources/presets/DebugDiscovery.properties
index 45a70de..4141dbf 100644
--- a/core/config/src/main/resources/presets/DebugDiscovery.properties
+++ b/core/config/src/main/resources/presets/DebugDiscovery.properties
@@ -16,3 +16,4 @@
# under the License.
logging.level.org.apache.isis.config.registry.IsisBeanTypeRegistry = DEBUG
+logging.level.org.apache.isis.config.beans.IsisBeanFactoryPostProcessorForSpring = DEBUG
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorDefault.java
index 50883bf..0a72e7f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorDefault.java
@@ -32,6 +32,7 @@ import javax.inject.Singleton;
import org.springframework.beans.factory.InjectionPoint;
import org.springframework.core.MethodParameter;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.applib.services.registry.ServiceRegistry;
@@ -46,7 +47,7 @@ import org.apache.isis.metamodel.spec.InjectorMethodEvaluator;
import lombok.val;
import lombok.extern.log4j.Log4j2;
-@Singleton @Log4j2
+@Service @Log4j2
public class ServiceInjectorDefault implements ServiceInjector {
private static final String KEY_SET_PREFIX = "isis.services.injector.setPrefix";
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/appfeat/ApplicationFeatureFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/appfeat/ApplicationFeatureFactory.java
index 10652f7..0315f79 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/appfeat/ApplicationFeatureFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/appfeat/ApplicationFeatureFactory.java
@@ -19,11 +19,12 @@
package org.apache.isis.metamodel.services.appfeat;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.factory.FactoryService;
-@Singleton
+@Service
public class ApplicationFeatureFactory {
public ApplicationFeature newApplicationFeature() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
index 1f0f313..aebe97e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
@@ -30,6 +30,8 @@ import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
@@ -61,7 +63,7 @@ import static org.apache.isis.config.internal._Config.getConfiguration;
import lombok.val;
-@Singleton
+@Service
public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRepository {
// -- caches
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/events/MetamodelEventService.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/events/MetamodelEventService.java
index f248dfa..17cd605 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/events/MetamodelEventService.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/events/MetamodelEventService.java
@@ -22,6 +22,8 @@ import javax.enterprise.event.Event;
import javax.inject.Inject;
import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.events.domain.ActionDomainEvent;
import org.apache.isis.applib.events.domain.CollectionDomainEvent;
import org.apache.isis.applib.events.domain.PropertyDomainEvent;
@@ -37,7 +39,7 @@ import lombok.Builder;
* @since 2.0
*
*/
-@Singleton
+@Service
@Builder //for JUnit Test support
public class MetamodelEventService {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/exceprecog/ExceptionRecognizerDocDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/exceprecog/ExceptionRecognizerDocDefault.java
index 2cea7e8..4399def 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/exceprecog/ExceptionRecognizerDocDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/exceprecog/ExceptionRecognizerDocDefault.java
@@ -24,6 +24,8 @@ import javax.annotation.PreDestroy;
import javax.inject.Inject;
import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.RecoverableException;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
@@ -32,7 +34,7 @@ import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerForType;
import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.metamodel.adapter.version.ConcurrencyException;
-@Singleton
+@Service
public class ExceptionRecognizerDocDefault
implements ExceptionRecognizer {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridLoaderServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridLoaderServiceDefault.java
index 56225ed..6933a9a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridLoaderServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridLoaderServiceDefault.java
@@ -27,6 +27,8 @@ import java.util.Objects;
import javax.inject.Inject;
import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.layout.grid.Grid;
import org.apache.isis.applib.services.grid.GridLoaderService;
import org.apache.isis.applib.services.message.MessageService;
@@ -37,7 +39,7 @@ import org.apache.isis.commons.internal.resources._Resources;
import lombok.extern.log4j.Log4j2;
-@Singleton @Log4j2
+@Service @Log4j2
public class GridLoaderServiceDefault implements GridLoaderService {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridServiceDefault.java
index 0d4852d..3cfaee6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridServiceDefault.java
@@ -24,6 +24,8 @@ import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.layout.grid.Grid;
import org.apache.isis.applib.services.grid.GridLoaderService;
import org.apache.isis.applib.services.grid.GridService;
@@ -32,7 +34,7 @@ import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.collections._Lists;
-@Singleton
+@Service
public class GridServiceDefault implements GridService {
public static final String COMPONENT_TNS = "http://isis.apache.org/applib/layout/component";
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
index 3c2a025..cd9281d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
@@ -29,6 +29,8 @@ import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.layout.component.ActionLayoutData;
import org.apache.isis.applib.layout.component.ActionLayoutDataOwner;
@@ -67,7 +69,7 @@ import static org.apache.isis.commons.internal.base._NullSafe.stream;
import lombok.val;
-@Singleton
+@Service
public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
public static final String TNS = "http://isis.apache.org/applib/layout/grid/bootstrap3";
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/layout/LayoutServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/layout/LayoutServiceDefault.java
index 6854211..29a60ec 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/layout/LayoutServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/layout/LayoutServiceDefault.java
@@ -26,6 +26,8 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import javax.xml.bind.Marshaller;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.layout.grid.Grid;
import org.apache.isis.applib.layout.menubars.MenuBars;
import org.apache.isis.applib.services.grid.GridService;
@@ -41,7 +43,7 @@ import org.apache.isis.metamodel.specloader.SpecificationLoader;
import lombok.val;
-@Singleton
+@Service
public class LayoutServiceDefault implements LayoutService {
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/metamodel/MetaModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/metamodel/MetaModelServiceDefault.java
index 7d08c74..681c4a9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/metamodel/MetaModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/metamodel/MetaModelServiceDefault.java
@@ -27,6 +27,8 @@ import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.command.CommandDtoProcessor;
import org.apache.isis.applib.services.grid.GridService;
@@ -51,7 +53,7 @@ import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.metamodel.specloader.SpecificationLoader;
import org.apache.isis.schema.metamodel.v1.MetamodelDto;
-@Singleton
+@Service
public class MetaModelServiceDefault implements MetaModelService {
private MetaModelExporter metaModelExporter;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/registry/ServiceRegistryDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/registry/ServiceRegistryDefault.java
index 6bf509b..c9626b8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/registry/ServiceRegistryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/registry/ServiceRegistryDefault.java
@@ -31,6 +31,7 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.ConfigurableEnvironment;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.DomainObject;
import org.apache.isis.applib.annotation.DomainService;
@@ -53,7 +54,7 @@ import lombok.extern.log4j.Log4j2;
/**
* @since 2.0
*/
-@Singleton @Log4j2
+@Service @Log4j2
public final class ServiceRegistryDefault implements ServiceRegistry, ApplicationContextAware {
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/repository/RepositoryServiceJdo.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/repository/RepositoryServiceJdo.java
index 8d4351e..5c22da9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/repository/RepositoryServiceJdo.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/repository/RepositoryServiceJdo.java
@@ -26,7 +26,8 @@ import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.PersistFailedException;
import org.apache.isis.applib.RepositoryException;
@@ -44,7 +45,7 @@ import org.apache.isis.metamodel.services.persistsession.PersistenceSessionServi
import lombok.val;
-@Singleton
+@Service
public class RepositoryServiceJdo implements RepositoryService {
private boolean autoFlush;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/swagger/SwaggerServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/swagger/SwaggerServiceDefault.java
index 8846e3b..0efcf68 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/swagger/SwaggerServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/swagger/SwaggerServiceDefault.java
@@ -21,6 +21,8 @@ package org.apache.isis.metamodel.services.swagger;
import javax.inject.Inject;
import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.services.swagger.SwaggerService;
import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.metamodel.services.swagger.internal.SwaggerSpecGenerator;
@@ -31,7 +33,7 @@ import static org.apache.isis.commons.internal.base._With.ifPresentElse;
import static org.apache.isis.commons.internal.resources._Resources.getRestfulPathIfAny;
import static org.apache.isis.commons.internal.resources._Resources.prependContextPathIfPresent;
-@Singleton
+@Service
public class SwaggerServiceDefault implements SwaggerService {
@Inject SpecificationLoader specificationLoader;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/title/TitleServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/title/TitleServiceDefault.java
index 3b7953b..a169593 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/title/TitleServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/title/TitleServiceDefault.java
@@ -22,6 +22,8 @@ package org.apache.isis.metamodel.services.title;
import javax.inject.Inject;
import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.services.title.TitleService;
import org.apache.isis.applib.services.wrapper.WrapperFactory;
import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
@@ -29,7 +31,7 @@ import org.apache.isis.metamodel.services.persistsession.ObjectAdapterService;
import lombok.val;
-@Singleton
+@Service
public class TitleServiceDefault implements TitleService {
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/user/UserServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/user/UserServiceDefault.java
index 990fa32..604ede0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/user/UserServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/user/UserServiceDefault.java
@@ -24,7 +24,8 @@ import java.util.List;
import java.util.Stack;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.DomainService;
import org.apache.isis.applib.annotation.NatureOfService;
@@ -35,7 +36,7 @@ import org.apache.isis.applib.services.user.UserService;
import org.apache.isis.security.authentication.AuthenticationSession;
import org.apache.isis.security.authentication.AuthenticationSessionProvider;
-@Singleton
+@Service
public class UserServiceDefault implements UserService {
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/InjectorMethodEvaluatorDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/InjectorMethodEvaluatorDefault.java
index 8f16938..bdd8195 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/InjectorMethodEvaluatorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/InjectorMethodEvaluatorDefault.java
@@ -21,11 +21,11 @@ package org.apache.isis.metamodel.specloader;
import java.lang.reflect.Method;
-import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
import org.apache.isis.metamodel.spec.InjectorMethodEvaluator;
-@Singleton
+@Service
public final class InjectorMethodEvaluatorDefault implements InjectorMethodEvaluator {
//TODO[2112] cleanup comment
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/MetaModelValidatorServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/MetaModelValidatorServiceDefault.java
index 5727c43..eea4385 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/MetaModelValidatorServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/MetaModelValidatorServiceDefault.java
@@ -19,7 +19,8 @@
package org.apache.isis.metamodel.specloader;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.commons.internal.base._Lazy;
@@ -37,7 +38,7 @@ import lombok.extern.log4j.Log4j2;
/**
* @since 2.0
*/
-@Singleton @Log4j2
+@Service @Log4j2
public class MetaModelValidatorServiceDefault implements MetaModelValidatorService {
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/ProgrammingModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/ProgrammingModelServiceDefault.java
index 73620ea..34153b4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/ProgrammingModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/ProgrammingModelServiceDefault.java
@@ -19,7 +19,8 @@
package org.apache.isis.metamodel.specloader;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.config.IsisConfigurationLegacy;
@@ -31,7 +32,7 @@ import org.apache.isis.metamodel.progmodels.dflt.ProgrammingModelFacetsJava8;
import lombok.val;
import lombok.extern.log4j.Log4j2;
-@Singleton @Log4j2
+@Service @Log4j2
public class ProgrammingModelServiceDefault implements ProgrammingModelService {
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
index 9ab2e70..afb2bb4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
@@ -25,7 +25,8 @@ import java.util.stream.Collectors;
import javax.annotation.Nullable;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.context._Context;
@@ -73,7 +74,7 @@ import lombok.extern.log4j.Log4j2;
* </ul>
* </p>
*/
-@Singleton
+@Service
@Log4j2
public class SpecificationLoaderDefault implements SpecificationLoader {
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/persistence/IsisPlatformTransactionManagerForJdo.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/persistence/IsisPlatformTransactionManagerForJdo.java
index b75c76a..e5b18e4 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/persistence/IsisPlatformTransactionManagerForJdo.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/persistence/IsisPlatformTransactionManagerForJdo.java
@@ -19,8 +19,8 @@
package org.apache.isis.jdo.persistence;
import javax.inject.Inject;
-import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionException;
import org.springframework.transaction.support.AbstractPlatformTransactionManager;
@@ -38,7 +38,7 @@ import org.apache.isis.security.authentication.AuthenticationSession;
import lombok.val;
import lombok.extern.log4j.Log4j2;
-@Singleton @Log4j2
+@Service @Log4j2
public class IsisPlatformTransactionManagerForJdo extends AbstractPlatformTransactionManager {
private static final long serialVersionUID = 1L;
diff --git a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/jdosupport/IsisJdoSupportDN5.java b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/jdosupport/IsisJdoSupportDN5.java
index eb2a8e5..78f5190 100644
--- a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/jdosupport/IsisJdoSupportDN5.java
+++ b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/jdosupport/IsisJdoSupportDN5.java
@@ -29,13 +29,14 @@ import java.util.Map;
import java.util.stream.Collectors;
import javax.inject.Inject;
-import javax.inject.Singleton;
import javax.jdo.Extent;
import javax.jdo.JDOQLTypedQuery;
import javax.jdo.PersistenceManager;
import javax.jdo.datastore.JDOConnection;
import javax.jdo.query.BooleanExpression;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.FatalException;
import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.commons.internal.collections._Lists;
@@ -53,7 +54,7 @@ import static org.apache.isis.commons.internal.base._NullSafe.stream;
* This service provides a number of utility methods to supplement/support the capabilities of the JDO Objectstore.
*
*/
-@Singleton
+@Service
public class IsisJdoSupportDN5 implements IsisJdoSupport_v3_2 {
diff --git a/core/runtime-extensions/src/main/java/org/apache/isis/runtime/spring/IsisBoot.java b/core/runtime-extensions/src/main/java/org/apache/isis/runtime/spring/IsisBoot.java
index 5090489..e4307ba 100644
--- a/core/runtime-extensions/src/main/java/org/apache/isis/runtime/spring/IsisBoot.java
+++ b/core/runtime-extensions/src/main/java/org/apache/isis/runtime/spring/IsisBoot.java
@@ -29,14 +29,17 @@ import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.Import;
import org.apache.isis.applib.IsisApplibModule;
+import org.apache.isis.config.beans.IsisBeanFactoryPostProcessorForSpring;
import org.apache.isis.config.beans.IsisBeanScanInterceptorForSpring;
import org.apache.isis.metamodel.IsisMetamodelModule;
+import org.apache.isis.metamodel.services.repository.RepositoryServiceJdo;
import org.apache.isis.runtime.IsisRuntimeModule;
import org.apache.isis.runtime.services.IsisRuntimeServicesModule;
import org.apache.isis.wrapper.IsisWrapperModule;
@Configuration
@Import({
+ IsisBeanFactoryPostProcessorForSpring.class,
IsisConfigModule.class,
})
@ComponentScan(
diff --git a/core/runtime-extensions/src/main/java/org/apache/isis/wrapper/WrapperFactoryDefault.java b/core/runtime-extensions/src/main/java/org/apache/isis/wrapper/WrapperFactoryDefault.java
index a03958e..666af89 100644
--- a/core/runtime-extensions/src/main/java/org/apache/isis/wrapper/WrapperFactoryDefault.java
+++ b/core/runtime-extensions/src/main/java/org/apache/isis/wrapper/WrapperFactoryDefault.java
@@ -29,7 +29,8 @@ import java.util.Map;
import java.util.function.BiConsumer;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.factory.FactoryService;
import org.apache.isis.applib.services.wrapper.WrapperFactory;
@@ -68,7 +69,7 @@ import lombok.val;
* be interacted with, while enforcing the hide/disable/validate rules as implied by
* the Isis programming model.
*/
-@Singleton
+@Service
public class WrapperFactoryDefault implements WrapperFactory {
private final List<InteractionListener> listeners = new ArrayList<InteractionListener>();
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/authsess/AuthenticationSessionProviderDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/authsess/AuthenticationSessionProviderDefault.java
index 0e76433..f9b0940 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/authsess/AuthenticationSessionProviderDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/authsess/AuthenticationSessionProviderDefault.java
@@ -21,7 +21,8 @@ package org.apache.isis.runtime.services.authsess;
import java.util.List;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.metamodel.services.user.UserServiceDefault;
import org.apache.isis.runtime.system.session.IsisSessionFactory;
@@ -29,7 +30,7 @@ import org.apache.isis.security.authentication.AuthenticationSession;
import org.apache.isis.security.authentication.AuthenticationSessionProvider;
import org.apache.isis.security.authentication.standard.SimpleSession;
-@Singleton
+@Service
public class AuthenticationSessionProviderDefault implements AuthenticationSessionProvider {
/**
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/background/CommandExecutorServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/background/CommandExecutorServiceDefault.java
index e3d0514..a1da625 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/background/CommandExecutorServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/background/CommandExecutorServiceDefault.java
@@ -25,7 +25,8 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.bookmark.BookmarkService;
@@ -70,7 +71,7 @@ import org.apache.isis.schema.utils.CommonDtoUtils;
import lombok.val;
import lombok.extern.log4j.Log4j2;
-@Singleton @Log4j2
+@Service @Log4j2
public class CommandExecutorServiceDefault implements CommandExecutorService {
@Override
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/bookmarks/BookmarkServiceInternalDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/bookmarks/BookmarkServiceInternalDefault.java
index 96f9b92..8c97e4e 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/bookmarks/BookmarkServiceInternalDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/bookmarks/BookmarkServiceInternalDefault.java
@@ -25,7 +25,8 @@ import java.util.List;
import java.util.Set;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.services.bookmark.Bookmark;
@@ -45,7 +46,7 @@ import org.apache.isis.metamodel.services.persistsession.PersistenceSessionServi
* This service enables a serializable 'bookmark' to be created for an entity.
*
*/
-@Singleton
+@Service
public class BookmarkServiceInternalDefault implements BookmarkService, SerializingAdapter {
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandServiceDefault.java
index 652cd87..3e5e06c 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandServiceDefault.java
@@ -18,13 +18,13 @@
*/
package org.apache.isis.runtime.services.command;
-import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.command.Command;
import org.apache.isis.applib.services.command.CommandDefault;
import org.apache.isis.applib.services.command.spi.CommandService;
-@Singleton
+@Service
public class CommandServiceDefault implements CommandService {
@Override
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/eventbus/EventBusServiceSpring.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/eventbus/EventBusServiceSpring.java
index d645713..3abfe55 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/eventbus/EventBusServiceSpring.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/eventbus/EventBusServiceSpring.java
@@ -19,13 +19,13 @@
package org.apache.isis.runtime.services.eventbus;
import javax.inject.Inject;
-import javax.inject.Singleton;
import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.eventbus.EventBusService;
-@Singleton
+@Service
public class EventBusServiceSpring implements EventBusService {
@Inject private ApplicationEventPublisher applicationEventPublisher;
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/factory/FactoryServiceInternalDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/factory/FactoryServiceInternalDefault.java
index 34ecce7..cb02a13 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/factory/FactoryServiceInternalDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/factory/FactoryServiceInternalDefault.java
@@ -23,7 +23,8 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.ViewModel;
@@ -43,7 +44,7 @@ import static org.apache.isis.commons.internal.base._With.requires;
import lombok.val;
-@Singleton
+@Service
public class FactoryServiceInternalDefault implements FactoryService {
@Override
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/homepage/HomePageResolverServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/homepage/HomePageResolverServiceDefault.java
index 6839d1e..71418d0 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/homepage/HomePageResolverServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/homepage/HomePageResolverServiceDefault.java
@@ -20,7 +20,8 @@ package org.apache.isis.runtime.services.homepage;
import javax.enterprise.inject.Vetoed;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.HomePage;
@@ -46,7 +47,7 @@ import org.apache.isis.metamodel.spec.feature.ObjectAction;
import lombok.val;
-@Singleton
+@Service
public class HomePageResolverServiceDefault implements HomePageResolverService {
@Inject FactoryService factoryService;
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/TranslationServicePo.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/TranslationServicePo.java
index dfa38e4..708ad0b 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/TranslationServicePo.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/TranslationServicePo.java
@@ -20,7 +20,8 @@ package org.apache.isis.runtime.services.i18n.po;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.i18n.LocaleProvider;
import org.apache.isis.applib.services.i18n.TranslationService;
@@ -32,7 +33,7 @@ import org.apache.isis.runtime.system.context.IsisContext;
import static org.apache.isis.config.internal._Config.getConfiguration;
-@Singleton
+@Service
public class TranslationServicePo implements TranslationService {
public static final String KEY_PO_MODE = "isis.services.translation.po.mode";
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/MenuBarsLoaderServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/MenuBarsLoaderServiceDefault.java
index 07da33c..e7be9b7 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/MenuBarsLoaderServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/MenuBarsLoaderServiceDefault.java
@@ -22,10 +22,10 @@ import java.nio.charset.StandardCharsets;
import java.util.Optional;
import javax.inject.Inject;
-import javax.inject.Singleton;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.AbstractResource;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.layout.menubars.bootstrap3.BS3MenuBars;
import org.apache.isis.applib.services.jaxb.JaxbService;
@@ -37,7 +37,7 @@ import org.apache.isis.config.beans.WebAppConfigBean;
import lombok.val;
import lombok.extern.log4j.Log4j2;
-@Singleton @Log4j2
+@Service @Log4j2
public class MenuBarsLoaderServiceDefault implements MenuBarsLoaderService {
@Override
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/bootstrap3/MenuBarsServiceBS3.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/bootstrap3/MenuBarsServiceBS3.java
index 0065192..47b8e14 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/bootstrap3/MenuBarsServiceBS3.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/menubars/bootstrap3/MenuBarsServiceBS3.java
@@ -26,7 +26,8 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.DomainServiceLayout;
import org.apache.isis.applib.annotation.NatureOfService;
@@ -61,7 +62,7 @@ import org.apache.isis.metamodel.spec.feature.ObjectAction;
import lombok.val;
import lombok.extern.log4j.Log4j2;
-@Singleton @Log4j2
+@Service @Log4j2
public class MenuBarsServiceBS3 implements MenuBarsService {
public static final String MB3_TNS = "http://isis.apache.org/applib/layout/menubars/bootstrap3";
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/message/MessageServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/message/MessageServiceDefault.java
index 611f04a..4b78e62 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/message/MessageServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/message/MessageServiceDefault.java
@@ -19,9 +19,9 @@
package org.apache.isis.runtime.services.message;
import javax.inject.Inject;
-import javax.inject.Singleton;
import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.RecoverableException;
import org.apache.isis.applib.services.i18n.TranslatableString;
@@ -30,7 +30,7 @@ import org.apache.isis.applib.services.message.MessageService;
import org.apache.isis.runtime.system.session.IsisSessionFactory;
import org.apache.isis.security.authentication.MessageBroker;
-@Singleton @Primary
+@Service @Primary
public class MessageServiceDefault implements MessageService {
@Override
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/persist/ObjectAdapterServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/persist/ObjectAdapterServiceDefault.java
index 373ac94..b03be5a 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/persist/ObjectAdapterServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/persist/ObjectAdapterServiceDefault.java
@@ -22,9 +22,9 @@ import java.io.Serializable;
import java.util.stream.Stream;
import javax.inject.Inject;
-import javax.inject.Singleton;
import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.services.inject.ServiceInjector;
@@ -46,7 +46,7 @@ import static org.apache.isis.commons.internal.base._With.requires;
import lombok.val;
-@Singleton @Primary
+@Service @Primary
public class ObjectAdapterServiceDefault implements ObjectAdapterService {
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/routing/RoutingServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/routing/RoutingServiceDefault.java
index e29108e..630f48b 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/routing/RoutingServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/routing/RoutingServiceDefault.java
@@ -19,14 +19,15 @@
package org.apache.isis.runtime.services.routing;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.routing.RoutingService;
import org.apache.isis.metamodel.services.homepage.HomePageResolverService;
import lombok.val;
-@Singleton
+@Service
public class RoutingServiceDefault implements RoutingService {
@Override
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/sessmgmt/SessionManagementServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/sessmgmt/SessionManagementServiceDefault.java
index 4c9071f..65fbbeb 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/sessmgmt/SessionManagementServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/sessmgmt/SessionManagementServiceDefault.java
@@ -20,7 +20,8 @@
package org.apache.isis.runtime.services.sessmgmt;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.sessmgmt.SessionManagementService;
import org.apache.isis.runtime.system.session.IsisSession;
@@ -28,7 +29,7 @@ import org.apache.isis.runtime.system.session.IsisSessionFactory;
import lombok.val;
-@Singleton
+@Service
public class SessionManagementServiceDefault implements SessionManagementService {
@Override
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/sse/EventStreamServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/sse/EventStreamServiceDefault.java
index 7bfbbdf..a9a6483 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/sse/EventStreamServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/sse/EventStreamServiceDefault.java
@@ -32,7 +32,8 @@ import java.util.concurrent.ForkJoinPool;
import java.util.function.Predicate;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.events.sse.EventStream;
import org.apache.isis.applib.events.sse.EventStreamService;
@@ -56,7 +57,7 @@ import lombok.extern.log4j.Log4j2;
* @since 2.0
*
*/
-@Singleton @Log4j2
+@Service @Log4j2
public class EventStreamServiceDefault implements EventStreamService {
@Inject TransactionService transactionService;
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/xactn/TransactionServiceSpring.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/xactn/TransactionServiceSpring.java
index 15bd24f..10ea5eb 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/xactn/TransactionServiceSpring.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/xactn/TransactionServiceSpring.java
@@ -22,8 +22,8 @@ package org.apache.isis.runtime.services.xactn;
import java.util.function.Supplier;
import javax.annotation.Nonnull;
-import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
@@ -40,7 +40,7 @@ import org.apache.isis.runtime.system.transaction.IsisTransactionObject;
import lombok.val;
import lombok.extern.log4j.Log4j2;
-@Singleton
+@Service
@Log4j2
public class TransactionServiceSpring implements TransactionService {
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/xmlsnapshot/XmlSnapshotServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/xmlsnapshot/XmlSnapshotServiceDefault.java
index d91210c..dc086fc 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/xmlsnapshot/XmlSnapshotServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/xmlsnapshot/XmlSnapshotServiceDefault.java
@@ -18,9 +18,8 @@
*/
package org.apache.isis.runtime.services.xmlsnapshot;
-import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
-import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.services.xmlsnapshot.XmlSnapshotService;
import org.apache.isis.applib.services.xmlsnapshot.XmlSnapshotServiceAbstract;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
@@ -36,7 +35,7 @@ import org.apache.isis.runtime.system.context.IsisContext;
* with {@link org.apache.isis.applib.annotation.DomainService}. Because this class is implemented in core, this means
* that it is automatically registered and available for use; no further configuration is required.
*/
-@Singleton
+@Service
public class XmlSnapshotServiceDefault extends XmlSnapshotServiceAbstract {
static class XmlSnapshotServiceDefaultBuilder implements XmlSnapshotService.Builder{
@@ -66,7 +65,6 @@ public class XmlSnapshotServiceDefault extends XmlSnapshotServiceAbstract {
/**
* Creates a simple snapshot of the domain object.
*/
- @Programmatic
@Override
public XmlSnapshotService.Snapshot snapshotFor(final Object domainObject) {
final ObjectAdapter adapter = IsisContext.pojoToAdapter().apply(domainObject);
@@ -78,7 +76,6 @@ public class XmlSnapshotServiceDefault extends XmlSnapshotServiceAbstract {
* properties or collections (using {@link Builder#includePath(String)} and
* {@link Builder#includePathAndAnnotation(String, String)}) - to be created.
*/
- @Programmatic
@Override
public Builder builderFor(final Object domainObject) {
return new XmlSnapshotServiceDefaultBuilder(domainObject);
diff --git a/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/h2console/WebModuleH2Console.java b/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/h2console/WebModuleH2Console.java
index 79b021a..9608a93 100644
--- a/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/h2console/WebModuleH2Console.java
+++ b/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/h2console/WebModuleH2Console.java
@@ -19,12 +19,12 @@
package org.apache.isis.webapp.modules.h2console;
import javax.inject.Inject;
-import javax.inject.Singleton;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.value.LocalResourcePath;
import org.apache.isis.commons.internal.base._Strings;
@@ -36,7 +36,7 @@ import org.apache.isis.webapp.modules.WebModuleContext;
import lombok.Getter;
import lombok.val;
-@Singleton @Order(0)
+@Service @Order(0)
public class WebModuleH2Console implements WebModule {
@Inject private IsisConfigurationLegacy isisConfiguration;
diff --git a/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/logonlog/WebModuleLogOnExceptionLogger.java b/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/logonlog/WebModuleLogOnExceptionLogger.java
index 58c0d05..ef757bb 100644
--- a/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/logonlog/WebModuleLogOnExceptionLogger.java
+++ b/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/logonlog/WebModuleLogOnExceptionLogger.java
@@ -18,7 +18,6 @@
*/
package org.apache.isis.webapp.modules.logonlog;
-import javax.inject.Singleton;
import javax.servlet.Filter;
import javax.servlet.FilterRegistration.Dynamic;
import javax.servlet.ServletContext;
@@ -27,6 +26,7 @@ import javax.servlet.ServletException;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.collections._Arrays;
import org.apache.isis.webapp.modules.WebModule;
@@ -41,7 +41,7 @@ import static org.apache.isis.commons.internal.exceptions._Exceptions.unexpected
*
* @since 2.0
*/
-@Singleton @Order(Ordered.LOWEST_PRECEDENCE)
+@Service @Order(Ordered.LOWEST_PRECEDENCE)
public final class WebModuleLogOnExceptionLogger implements WebModule {
private final static String LOGONLOGGER_FILTER_CLASS_NAME =
diff --git a/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/resources/WebModuleStaticResources.java b/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/resources/WebModuleStaticResources.java
index 692b33a..2980095 100644
--- a/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/resources/WebModuleStaticResources.java
+++ b/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/resources/WebModuleStaticResources.java
@@ -18,13 +18,13 @@
*/
package org.apache.isis.webapp.modules.resources;
-import javax.inject.Singleton;
import javax.servlet.FilterRegistration.Dynamic;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
import org.apache.isis.webapp.modules.WebModule;
import org.apache.isis.webapp.modules.WebModuleContext;
@@ -34,7 +34,7 @@ import org.apache.isis.webapp.modules.WebModuleContext;
*
* @since 2.0
*/
-@Singleton @Order(-100)
+@Service @Order(-100)
public final class WebModuleStaticResources implements WebModule {
private final static String[] urlPatterns = {
diff --git a/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/sse/WebModuleServerSentEvents.java b/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/sse/WebModuleServerSentEvents.java
index f791fc0..036bcdd 100644
--- a/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/sse/WebModuleServerSentEvents.java
+++ b/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/sse/WebModuleServerSentEvents.java
@@ -18,12 +18,12 @@
*/
package org.apache.isis.webapp.modules.sse;
-import javax.inject.Singleton;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
import org.apache.isis.webapp.modules.WebModule;
import org.apache.isis.webapp.modules.WebModuleContext;
@@ -35,7 +35,7 @@ import lombok.val;
*
* @since 2.0
*/
-@Singleton @Order(-99)
+@Service @Order(-99)
public final class WebModuleServerSentEvents implements WebModule {
private final static String SERVLET_NAME = "ServerSentEventsServlet";
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/session/RuntimeEventService.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/session/RuntimeEventService.java
index 193ccfa..feb80f6 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/session/RuntimeEventService.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/session/RuntimeEventService.java
@@ -20,7 +20,8 @@ package org.apache.isis.runtime.system.context.session;
import javax.enterprise.event.Event;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.runtime.system.persistence.JdoPersistenceLifecycleService;
import org.apache.isis.runtime.system.session.IsisSession;
@@ -31,7 +32,7 @@ import org.apache.isis.runtime.system.session.IsisSession;
* @implNote listeners to runtime events are hard-wired, because these events are already fired
* during bootstrapping, when event handling might not work properly yet.
*/
-@Singleton
+@Service
public class RuntimeEventService {
@Inject JdoPersistenceLifecycleService listener; // dependsOn
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/JdoPersistenceLifecycleService.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/JdoPersistenceLifecycleService.java
index 8ab54ed..0f246f0 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/JdoPersistenceLifecycleService.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/JdoPersistenceLifecycleService.java
@@ -23,6 +23,7 @@ import javax.inject.Singleton;
import org.springframework.context.annotation.Bean;
import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.commons.internal.exceptions._Exceptions;
@@ -38,7 +39,7 @@ import static org.apache.isis.commons.internal.base._With.requires;
import lombok.val;
import lombok.extern.log4j.Log4j2;
-@Singleton @Log4j2
+@Service @Log4j2
public class JdoPersistenceLifecycleService {
private PersistenceSessionFactory persistenceSessionFactory;
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/events/PersistenceEventService.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/events/PersistenceEventService.java
index 3869e26..b74e9c8 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/events/PersistenceEventService.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/events/PersistenceEventService.java
@@ -20,14 +20,15 @@ package org.apache.isis.runtime.system.persistence.events;
import javax.enterprise.event.Event;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
/**
*
* @since 2.0
*
*/
-@Singleton
+@Service
public class PersistenceEventService {
// -- MANAGED EVENTS
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/session/IsisSessionFactoryDefault.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/session/IsisSessionFactoryDefault.java
index eeac91d..737b46e 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/session/IsisSessionFactoryDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/session/IsisSessionFactoryDefault.java
@@ -29,13 +29,10 @@ import java.util.stream.Stream;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
-import javax.inject.Singleton;
-import org.springframework.context.annotation.DependsOn;
+import org.springframework.stereotype.Service;
-import org.apache.isis.applib.services.grid.GridService;
import org.apache.isis.applib.services.i18n.TranslationService;
-import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.applib.services.title.TitleService;
import org.apache.isis.commons.collections.Bin;
@@ -75,7 +72,7 @@ import lombok.extern.log4j.Log4j2;
* </p>
*
*/
-@Singleton @Log4j2
+@Service @Log4j2
public class IsisSessionFactoryDefault implements IsisSessionFactory {
@Inject private ServiceRegistry serviceRegistry;
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/transaction/AuditingServiceInternal.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/transaction/AuditingServiceInternal.java
index f15774d..e89b2db 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/transaction/AuditingServiceInternal.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/transaction/AuditingServiceInternal.java
@@ -24,7 +24,8 @@ import java.util.Set;
import java.util.UUID;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.audit.AuditerService;
import org.apache.isis.applib.services.bookmark.Bookmark;
@@ -41,7 +42,7 @@ import lombok.val;
/**
* Wrapper around {@link org.apache.isis.applib.services.audit.AuditerService}.
*/
-@Singleton
+@Service
public class AuditingServiceInternal {
Boolean whetherCanAudit;
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/transaction/PersistenceSessionServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/transaction/PersistenceSessionServiceInternalDefault.java
index ff42acb..07dfa1f 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/transaction/PersistenceSessionServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/transaction/PersistenceSessionServiceInternalDefault.java
@@ -21,7 +21,8 @@ package org.apache.isis.runtime.system.transaction;
import java.util.List;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.query.Query;
@@ -42,7 +43,7 @@ import org.apache.isis.runtime.system.session.IsisSessionFactory;
import static org.apache.isis.commons.internal.base._With.acceptIfPresent;
import static org.apache.isis.commons.internal.base._With.mapIfPresentElse;
-@Singleton
+@Service
public class PersistenceSessionServiceInternalDefault
implements PersistenceSessionServiceInternal {
diff --git a/core/security/api/src/main/java/org/apache/isis/security/authentication/manager/AuthorizationManagerStandard.java b/core/security/api/src/main/java/org/apache/isis/security/authentication/manager/AuthorizationManagerStandard.java
index 937ea6b..b48c5fc 100644
--- a/core/security/api/src/main/java/org/apache/isis/security/authentication/manager/AuthorizationManagerStandard.java
+++ b/core/security/api/src/main/java/org/apache/isis/security/authentication/manager/AuthorizationManagerStandard.java
@@ -24,13 +24,15 @@ import javax.annotation.PreDestroy;
import javax.inject.Inject;
import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.services.sudo.SudoService;
import org.apache.isis.security.authentication.AuthenticationSession;
import org.apache.isis.security.authorization.manager.AuthorizationManager;
import org.apache.isis.security.authorization.standard.Authorizor;
-@Singleton
+@Service
public class AuthorizationManagerStandard implements AuthorizationManager {
diff --git a/core/security/shiro/src/main/java/org/apache/isis/security/shiro/WebModuleShiro.java b/core/security/shiro/src/main/java/org/apache/isis/security/shiro/WebModuleShiro.java
index 4a5012a..7af096c 100644
--- a/core/security/shiro/src/main/java/org/apache/isis/security/shiro/WebModuleShiro.java
+++ b/core/security/shiro/src/main/java/org/apache/isis/security/shiro/WebModuleShiro.java
@@ -33,6 +33,7 @@ import org.apache.shiro.web.env.WebEnvironment;
import org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.webapp.modules.WebModule;
@@ -50,7 +51,7 @@ import lombok.val;
* Can be customized via static {@link WebModuleShiro#setShiroEnvironmentClass(Class)}
* @since 2.0
*/
-@Singleton @Order(Ordered.HIGHEST_PRECEDENCE)
+@Service @Order(Ordered.HIGHEST_PRECEDENCE)
public final class WebModuleShiro implements WebModule {
private final static String SHIRO_LISTENER_CLASS_NAME =
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.java
index 2eab6c8..7072aa7 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.java
@@ -23,10 +23,11 @@ import java.util.function.Function;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
-import javax.inject.Singleton;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ActionResultReprRenderer.SelfLink;
@@ -38,7 +39,7 @@ import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndPr
import org.apache.isis.viewer.restfulobjects.rendering.service.conneg.ContentNegotiationService;
import org.apache.isis.viewer.restfulobjects.rendering.service.conneg.ContentNegotiationServiceForRestfulObjectsV1_0;
-@Singleton
+@Service
public class RepresentationServiceContentNegotiator implements RepresentationService {
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/WebModuleRestfulObjects.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/WebModuleRestfulObjects.java
index e3b33e9..1533bf0 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/WebModuleRestfulObjects.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/WebModuleRestfulObjects.java
@@ -18,13 +18,13 @@
*/
package org.apache.isis.viewer.restfulobjects;
-import javax.inject.Singleton;
import javax.servlet.FilterRegistration.Dynamic;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
import org.apache.isis.webapp.modules.WebModule;
import org.apache.isis.webapp.modules.WebModuleContext;
@@ -42,7 +42,7 @@ import static org.apache.isis.commons.internal.resources._Resources.putRestfulPa
*
* @since 2.0
*/
-@Singleton @Order(-80)
+@Service @Order(-80)
public final class WebModuleRestfulObjects implements WebModule {
public static final String KEY_RESTFUL_BASE_PATH = "isis.viewer.restfulobjects.basePath";
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/WebModuleWicket.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/WebModuleWicket.java
index 2a33036..2d01fb6 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/WebModuleWicket.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/WebModuleWicket.java
@@ -18,7 +18,6 @@
*/
package org.apache.isis.viewer.wicket.viewer;
-import javax.inject.Singleton;
import javax.servlet.Filter;
import javax.servlet.FilterRegistration.Dynamic;
import javax.servlet.ServletContext;
@@ -26,6 +25,7 @@ import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.webapp.modules.WebModule;
@@ -42,7 +42,7 @@ import static org.apache.isis.commons.internal.exceptions._Exceptions.unexpected
* WebModule that provides the Wicket Viewer.
* @since 2.0
*/
-@Singleton @Order(-80)
+@Service @Order(-80)
public final class WebModuleWicket implements WebModule {
private final static String WICKET_FILTER_CLASS_NAME =
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/imagecache/ImageResourceCacheClassPath.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/imagecache/ImageResourceCacheClassPath.java
index c8e1e5e..7b3266c 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/imagecache/ImageResourceCacheClassPath.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/imagecache/ImageResourceCacheClassPath.java
@@ -24,12 +24,11 @@ import java.util.Arrays;
import java.util.List;
import java.util.Map;
-import javax.inject.Singleton;
-
import com.google.common.collect.Maps;
import org.apache.wicket.request.resource.PackageResourceReference;
import org.apache.wicket.request.resource.ResourceReference;
+import org.springframework.stereotype.Service;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.ObjectSpecification;
@@ -45,7 +44,7 @@ import images.Images;
* <p>
* Searches for a fixed set of suffixes: <code>png, gif, jpeg, jpg, svg</code>.
*/
-@Singleton
+@Service
public class ImageResourceCacheClassPath implements ImageResourceCache {
private static final long serialVersionUID = 1L;
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
index 7280c0c..1c8ed50 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
@@ -21,7 +21,7 @@ package org.apache.isis.viewer.wicket.viewer.registries.components;
import java.util.ServiceLoader;
-import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.context._Plugin;
import org.apache.isis.viewer.wicket.ui.ComponentFactory;
@@ -94,7 +94,7 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.entitysimplelink.Enti
* implementations loaded using {@link ServiceLoader} (ie from
* <tt>META-INF/services</tt>).
*/
-@Singleton
+@Service
public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistrar {
@Override
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistryDefault.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistryDefault.java
index fc2b221..c6d4e12 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistryDefault.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistryDefault.java
@@ -25,7 +25,6 @@ import java.util.Iterator;
import java.util.List;
import javax.inject.Inject;
-import javax.inject.Singleton;
import com.google.common.base.Supplier;
import com.google.common.collect.Multimap;
@@ -34,6 +33,7 @@ import com.google.common.collect.Multimaps;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.model.IModel;
+import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.viewer.wicket.ui.ComponentFactory;
@@ -47,7 +47,7 @@ import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
* Implementation of {@link ComponentFactoryRegistry} that delegates to a
* provided {@link ComponentFactoryRegistrar}.
*/
-@Singleton
+@Service
public class ComponentFactoryRegistryDefault implements ComponentFactoryRegistry {
private final Multimap<ComponentType, ComponentFactory> componentFactoriesByType;
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
index 083b7e7..d96289e 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
@@ -19,9 +19,8 @@
package org.apache.isis.viewer.wicket.viewer.registries.pages;
-import javax.inject.Singleton;
-
import org.apache.wicket.Page;
+import org.springframework.stereotype.Service;
import org.apache.isis.viewer.wicket.model.models.PageType;
import org.apache.isis.viewer.wicket.ui.pages.PageClassList;
@@ -42,7 +41,7 @@ import org.apache.isis.viewer.wicket.ui.pages.voidreturn.VoidReturnPage;
* Default implementation of {@link PageClassList}, specifying the default pages
* for each of the {@link PageType}s.
*/
-@Singleton
+@Service
public class PageClassListDefault implements PageClassList {
private static final long serialVersionUID = 1L;
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassRegistryDefault.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassRegistryDefault.java
index b564503..a209c19 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassRegistryDefault.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassRegistryDefault.java
@@ -23,11 +23,11 @@ import java.util.Map;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
-import javax.inject.Singleton;
import com.google.common.collect.Maps;
import org.apache.wicket.Page;
+import org.springframework.stereotype.Service;
import org.apache.isis.viewer.wicket.model.models.PageType;
import org.apache.isis.viewer.wicket.ui.pages.PageClassList;
@@ -38,7 +38,7 @@ import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistrySpi;
* Default implementation of {@link PageClassRegistry}; just delegates to an
* underlying {@link PageClassList}.
*/
-@Singleton
+@Service
public class PageClassRegistryDefault implements PageClassRegistry, PageClassRegistrySpi {
private static final long serialVersionUID = 1L;
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageNavigationServiceDefault.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageNavigationServiceDefault.java
index 9f07f14..9016edf 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageNavigationServiceDefault.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageNavigationServiceDefault.java
@@ -20,13 +20,13 @@
package org.apache.isis.viewer.wicket.viewer.registries.pages;
import javax.inject.Inject;
-import javax.inject.Singleton;
import org.apache.wicket.Page;
import org.apache.wicket.RestartResponseAtInterceptPageException;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.springframework.stereotype.Service;
import org.apache.isis.viewer.wicket.model.models.PageType;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
@@ -35,7 +35,7 @@ import org.apache.isis.viewer.wicket.ui.pages.PageNavigationService;
/**
* Default implementation of {@link org.apache.isis.viewer.wicket.ui.pages.PageNavigationService}
*/
-@Singleton
+@Service
public class PageNavigationServiceDefault implements PageNavigationService {
private static final long serialVersionUID = 1L;
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/DeepLinkServiceWicket.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/DeepLinkServiceWicket.java
index aa8ddf1..6083915 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/DeepLinkServiceWicket.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/DeepLinkServiceWicket.java
@@ -22,12 +22,12 @@ import java.net.URI;
import java.net.URISyntaxException;
import javax.inject.Inject;
-import javax.inject.Singleton;
import org.apache.wicket.Page;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.linking.DeepLinkService;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
@@ -40,7 +40,7 @@ import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
* An implementation of {@link org.apache.isis.applib.services.linking.DeepLinkService}
* for Wicket Viewer
*/
-@Singleton
+@Service
public class DeepLinkServiceWicket implements DeepLinkService {
@Inject private PageClassRegistry pageClassRegistry;
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/LocaleProviderWicket.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/LocaleProviderWicket.java
index 99afa47..e71ef81 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/LocaleProviderWicket.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/LocaleProviderWicket.java
@@ -20,11 +20,10 @@ package org.apache.isis.viewer.wicket.viewer.services;
import java.util.Locale;
-import javax.inject.Singleton;
-
import org.apache.wicket.Application;
import org.apache.wicket.Session;
import org.apache.wicket.request.cycle.RequestCycle;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.i18n.LocaleProvider;
@@ -32,7 +31,7 @@ import org.apache.isis.applib.services.i18n.LocaleProvider;
/**
* An implementation that provides the locale of the current session.
*/
-@Singleton
+@Service
public class LocaleProviderWicket implements LocaleProvider {
@Override
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java
index 6de7d43..43bafa6 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java
@@ -26,7 +26,6 @@ import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;
-import javax.inject.Singleton;
import javax.servlet.ServletContext;
import com.google.common.base.Charsets;
@@ -37,6 +36,8 @@ import com.google.common.io.CharSource;
import com.google.common.io.Files;
import com.google.common.io.Resources;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.services.i18n.TranslationsResolver;
import org.apache.isis.commons.internal.collections._Lists;
@@ -49,7 +50,7 @@ import lombok.extern.log4j.Log4j2;
/**
* An implementation that reads from /WEB-INF/...
*/
-@Singleton @Log4j2
+@Service @Log4j2
public class TranslationsResolverWicket implements TranslationsResolver {
@Override
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/settings/WicketViewerSettingsDefault.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/settings/WicketViewerSettingsDefault.java
index 58781ab..c304af7 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/settings/WicketViewerSettingsDefault.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/settings/WicketViewerSettingsDefault.java
@@ -19,7 +19,7 @@
package org.apache.isis.viewer.wicket.viewer.settings;
-import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.PromptStyle;
import org.apache.isis.config.IsisConfigurationLegacy;
@@ -27,7 +27,7 @@ import org.apache.isis.metamodel.facets.object.promptStyle.PromptStyleConfigurat
import org.apache.isis.runtime.system.context.IsisContext;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
-@Singleton
+@Service
public class WicketViewerSettingsDefault implements WicketViewerSettings {
private static final long serialVersionUID = 1L;
diff --git a/examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java b/examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java
index 8dbcece..b11191e 100644
--- a/examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java
+++ b/examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java
@@ -18,9 +18,9 @@
*/
package domainapp.dom.jee;
-import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
-@Singleton
+@Service
public class JeeDemoService {
public String getMessage() {
diff --git a/examples/apps/demo/src/main/java/domainapp/dom/types/blob/DemoBlobStore.java b/examples/apps/demo/src/main/java/domainapp/dom/types/blob/DemoBlobStore.java
index 4d7466f..776fa1b 100644
--- a/examples/apps/demo/src/main/java/domainapp/dom/types/blob/DemoBlobStore.java
+++ b/examples/apps/demo/src/main/java/domainapp/dom/types/blob/DemoBlobStore.java
@@ -21,16 +21,17 @@ package domainapp.dom.types.blob;
import java.util.UUID;
import javax.inject.Inject;
-import javax.inject.Singleton;
import javax.servlet.http.HttpSession;
import javax.xml.bind.annotation.adapters.XmlAdapter;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.applib.value.Blob;
import org.apache.isis.runtime.system.context.IsisContext;
import lombok.val;
-@Singleton
+@Service
public class DemoBlobStore {
@Inject HttpSession session;
diff --git a/examples/apps/demo/src/main/java/domainapp/utils/LibraryPreloadingService.java b/examples/apps/demo/src/main/java/domainapp/utils/LibraryPreloadingService.java
index 859e62d..daee95f 100644
--- a/examples/apps/demo/src/main/java/domainapp/utils/LibraryPreloadingService.java
+++ b/examples/apps/demo/src/main/java/domainapp/utils/LibraryPreloadingService.java
@@ -19,7 +19,8 @@
package domainapp.utils;
import javax.annotation.PostConstruct;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.concurrent._ConcurrentContext;
import org.apache.isis.commons.internal.concurrent._ConcurrentTaskList;
@@ -27,7 +28,7 @@ import org.apache.isis.extensions.asciidoc.AsciiDoc;
import lombok.val;
-@Singleton
+@Service
public class LibraryPreloadingService {
@PostConstruct
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingStereotypes.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingStereotypes.java
new file mode 100644
index 0000000..b1cd8bd
--- /dev/null
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingStereotypes.java
@@ -0,0 +1,15 @@
+package org.apache.isis.testdomain.conf;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+import org.apache.isis.testdomain.model.stereotypes.MyService;
+
+@Configuration
+@ComponentScan(
+ basePackageClasses= {
+ MyService.class
+ })
+public class Configuration_usingStereotypes {
+
+}
diff --git a/examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/stereotypes/MyObject.java
similarity index 78%
copy from examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java
copy to examples/smoketests/src/main/java/org/apache/isis/testdomain/model/stereotypes/MyObject.java
index 8dbcece..18e1cf9 100644
--- a/examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/stereotypes/MyObject.java
@@ -16,15 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package domainapp.dom.jee;
+package org.apache.isis.testdomain.model.stereotypes;
-import javax.inject.Singleton;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Nature;
-@Singleton
-public class JeeDemoService {
-
- public String getMessage() {
- return "Hello World from JEE";
- }
+@DomainObject(nature = Nature.INMEMORY_ENTITY)
+public class MyObject {
}
diff --git a/examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/stereotypes/MyObject_mixin.java
similarity index 70%
copy from examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java
copy to examples/smoketests/src/main/java/org/apache/isis/testdomain/model/stereotypes/MyObject_mixin.java
index 8dbcece..74a6682 100644
--- a/examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/stereotypes/MyObject_mixin.java
@@ -16,15 +16,21 @@
* specific language governing permissions and limitations
* under the License.
*/
-package domainapp.dom.jee;
+package org.apache.isis.testdomain.model.stereotypes;
-import javax.inject.Singleton;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Mixin;
-@Singleton
-public class JeeDemoService {
+import lombok.RequiredArgsConstructor;
- public String getMessage() {
- return "Hello World from JEE";
+@Mixin @RequiredArgsConstructor
+public class MyObject_mixin {
+
+ private final MyObject holder;
+
+ @Action
+ public MyObject $$() {
+ return holder;
}
}
diff --git a/examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/stereotypes/MyService.java
similarity index 82%
copy from examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java
copy to examples/smoketests/src/main/java/org/apache/isis/testdomain/model/stereotypes/MyService.java
index 8dbcece..4998fcf 100644
--- a/examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/stereotypes/MyService.java
@@ -16,15 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-package domainapp.dom.jee;
+package org.apache.isis.testdomain.model.stereotypes;
-import javax.inject.Singleton;
+import org.apache.isis.applib.annotation.DomainService;
-@Singleton
-public class JeeDemoService {
-
- public String getMessage() {
- return "Hello World from JEE";
- }
+@DomainService
+public class MyService {
}
diff --git a/examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/stereotypes/MyView.java
similarity index 82%
copy from examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java
copy to examples/smoketests/src/main/java/org/apache/isis/testdomain/model/stereotypes/MyView.java
index 8dbcece..6f191b1 100644
--- a/examples/apps/demo/src/main/java/domainapp/dom/jee/JeeDemoService.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/stereotypes/MyView.java
@@ -16,15 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-package domainapp.dom.jee;
+package org.apache.isis.testdomain.model.stereotypes;
-import javax.inject.Singleton;
+import org.apache.isis.applib.annotation.ViewModel;
-@Singleton
-public class JeeDemoService {
-
- public String getMessage() {
- return "Hello World from JEE";
- }
+@ViewModel
+public class MyView {
}
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/auditing/AuditerServiceTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/auditing/AuditerServiceTest.java
index a478f24..665215e 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/auditing/AuditerServiceTest.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/auditing/AuditerServiceTest.java
@@ -22,11 +22,11 @@ import java.sql.Timestamp;
import java.util.UUID;
import javax.inject.Inject;
-import javax.inject.Singleton;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.stereotype.Service;
import org.springframework.test.context.TestPropertySource;
import org.apache.isis.applib.services.audit.AuditerService;
@@ -126,7 +126,7 @@ class AuditerServiceTest {
// -- HELPER
- @Singleton @Log4j2
+ @Service @Log4j2
public static class AuditerServiceProbe implements AuditerService {
private StringBuilder history = new StringBuilder();
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/AutoConfigurationTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/AutoConfigurationTest.java
new file mode 100644
index 0000000..18682ee
--- /dev/null
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/AutoConfigurationTest.java
@@ -0,0 +1,150 @@
+/*
+ * 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.testdomain.bootstrapping;
+
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+import org.springframework.test.context.TestPropertySource;
+
+import org.apache.isis.commons.internal.ioc.spring._Spring;
+import org.apache.isis.config.IsisPresets;
+import org.apache.isis.config.beans.IsisBeanFactoryPostProcessorForSpring;
+import org.apache.isis.config.registry.IsisBeanTypeRegistry;
+import org.apache.isis.testdomain.Incubating;
+//import org.apache.isis.testdomain.Incubating;
+import org.apache.isis.testdomain.Smoketest;
+import org.apache.isis.testdomain.conf.Configuration_usingStereotypes;
+import org.apache.isis.testdomain.model.stereotypes.MyObject;
+import org.apache.isis.testdomain.model.stereotypes.MyObject_mixin;
+import org.apache.isis.testdomain.model.stereotypes.MyService;
+import org.apache.isis.testdomain.model.stereotypes.MyView;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import lombok.val;
+
+@Smoketest
+@SpringBootTest(
+ classes = {
+ //AutoConfigurationTest.BeanPostProcessor_forTesting.class,
+ IsisBeanFactoryPostProcessorForSpring.class,
+ Configuration_usingStereotypes.class
+ },
+ properties = {
+ "logging.config=log4j2-test.xml",
+ // "isis.reflector.introspector.parallelize=false",
+ // "logging.level.org.apache.isis.metamodel.specloader.specimpl.ObjectSpecificationAbstract=TRACE"
+ })
+@TestPropertySource({
+ IsisPresets.DebugDiscovery
+})
+@Incubating("under construction, not tested with surefire yet")
+class AutoConfigurationTest {
+
+ @Inject private ApplicationContext applicationContext;
+
+ //XXX for debugging and experimenting
+ @Component
+ static class BeanPostProcessor_forTesting implements BeanPostProcessor {
+
+ // simply return the instantiated bean as-is
+ @Override
+ public Object postProcessBeforeInitialization(Object bean, String beanName) {
+ return bean; // we could potentially return any object reference here...
+ }
+
+ @Override
+ public Object postProcessAfterInitialization(Object bean, String beanName) {
+ System.out.println("Bean '" + beanName + "' created : " + bean.toString());
+ return bean;
+ }
+ }
+
+ @BeforeEach
+ void beforeEach() {
+ assertNotNull(applicationContext);
+ if(!_Spring.isContextAvailable()) {
+ _Spring.init(applicationContext);
+ }
+ }
+
+ @Test
+ void domainObjects_shouldBeDiscovered() {
+
+ //TODO bad test, relying on implementation details
+ // clearly IsisBeanTypeRegistry needs refactoring!
+ val registry = IsisBeanTypeRegistry.current();
+
+ val discoveredTypes = registry.streamAndClearInbox()
+ .map(Map.Entry::getKey)
+ .collect(Collectors.toSet());
+ discoveredTypes.addAll(registry.getEntityTypes());
+ discoveredTypes.addAll(registry.getBeanTypes());
+
+ for(val cls : nonManaged()) {
+ assertTrue(discoveredTypes.contains(cls));
+ }
+
+ //TODO @DomainObject with NATURE_NOT_SPECIFIED is getting ignored, is this correct behavior?
+
+ }
+
+ @Test
+ void domainObjects_shouldNotBeManaged() {
+
+ for(val cls : nonManaged()) {
+ assertThrows(NoSuchBeanDefinitionException.class, ()->{
+ applicationContext.getBean(cls);
+ });
+ }
+
+ }
+
+ @Test
+ void domainServices_shouldBeManaged() {
+
+ val myService = applicationContext.getBean(MyService.class);
+ assertNotNull(myService);
+ assertNotNull(_Spring.getSingletonElseFail(MyService.class));
+
+ }
+
+
+ // we don't want those managed by Spring
+ private static Class<?>[] nonManaged() {
+ val nonManaged = new Class<?>[] {MyObject.class, MyObject_mixin.class, MyView.class};
+ return nonManaged;
+ }
+
+}
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/JdoBootstrappingTest_usingFixtures.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/JdoBootstrappingTest_usingFixtures.java
index bbb5451..517d0c2 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/JdoBootstrappingTest_usingFixtures.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/JdoBootstrappingTest_usingFixtures.java
@@ -27,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.apache.isis.applib.services.repository.RepositoryService;
import org.apache.isis.config.IsisPresets;
+import org.apache.isis.config.beans.IsisBeanFactoryPostProcessorForSpring;
import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts;
import org.apache.isis.testdomain.Smoketest;
import org.apache.isis.testdomain.conf.Configuration_usingJdo;
@@ -41,6 +42,7 @@ import lombok.val;
@Smoketest
@SpringBootTest(
classes = {
+ IsisBeanFactoryPostProcessorForSpring.class,
Configuration_usingJdo.class,
},
properties = {
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/SpringServiceProvisioningTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/SpringServiceProvisioningTest.java
index b618d3f..2709ac9 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/SpringServiceProvisioningTest.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/SpringServiceProvisioningTest.java
@@ -25,10 +25,12 @@ import java.util.stream.Collectors;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.ioc.BeanAdapter;
import org.apache.isis.commons.internal.resources._Resources;
+import org.apache.isis.config.IsisPresets;
import org.apache.isis.runtime.system.context.IsisContext;
//import org.apache.isis.testdomain.Incubating;
import org.apache.isis.testdomain.Smoketest;
@@ -51,6 +53,9 @@ import lombok.val;
// "isis.reflector.introspector.parallelize=false",
// "logging.level.org.apache.isis.metamodel.specloader.specimpl.ObjectSpecificationAbstract=TRACE"
})
+@TestPropertySource({
+ IsisPresets.DebugDiscovery
+})
//@Incubating("with development work on 'v2' the reference list of services constantly changes")
class SpringServiceProvisioningTest {
@@ -60,7 +65,7 @@ class SpringServiceProvisioningTest {
}
@Test
- void builtInServicesShouldBeSetUp() throws IOException {
+ void builtInServices_shouldBeSetUp() throws IOException {
val serviceRegistry = IsisContext.getServiceRegistry();
val managedServices = serviceRegistry.streamRegisteredBeans()
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/eventhandling/GenericEventPublishingTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/eventhandling/GenericEventPublishingTest.java
index 55b70ab..8f2c777 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/eventhandling/GenericEventPublishingTest.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/eventhandling/GenericEventPublishingTest.java
@@ -20,12 +20,12 @@ package org.apache.isis.testdomain.eventhandling;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
-import javax.inject.Singleton;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.runtime.services.eventbus.EventBusServiceSpring;
@@ -65,7 +65,7 @@ class GenericEventPublishingTest {
// no specific config required
}
- @Singleton
+ @Service
public static class TestPublisher {
@Inject EventBusService eventBusService;
@@ -76,7 +76,7 @@ class GenericEventPublishingTest {
}
- @Singleton
+ @Service
public static class TestListener {
@Getter
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/eventhandling/SpringEventPublishingTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/eventhandling/SpringEventPublishingTest.java
index 1ce2eba..53e3ee4 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/eventhandling/SpringEventPublishingTest.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/eventhandling/SpringEventPublishingTest.java
@@ -20,7 +20,6 @@ package org.apache.isis.testdomain.eventhandling;
import javax.enterprise.event.Event;
import javax.inject.Inject;
-import javax.inject.Singleton;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@@ -28,6 +27,7 @@ import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.ioc.spring._Spring;
@@ -70,7 +70,7 @@ class SpringEventPublishingTest {
}
- @Singleton
+ @Service
public static class TestPublisher {
@Inject
@@ -82,7 +82,7 @@ class SpringEventPublishingTest {
}
- @Singleton
+ @Service
public static class TestListener {
@Getter
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/publishing/PublisherServiceTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/publishing/PublisherServiceTest.java
index 6f13596..81a3c37 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/publishing/PublisherServiceTest.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/publishing/PublisherServiceTest.java
@@ -27,6 +27,7 @@ import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.background.BackgroundService;
import org.apache.isis.applib.services.iactn.Interaction.Execution;
@@ -121,7 +122,7 @@ class PublisherServiceTest {
// -- HELPER
- @Singleton
+ @Service
public static class PublisherServiceProbe implements PublisherService {
private StringBuilder history = new StringBuilder();
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/transactions/TransactionRollbackTest_withTransactional.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/transactions/TransactionRollbackTest_usingTransactional.java
similarity index 98%
rename from examples/smoketests/src/test/java/org/apache/isis/testdomain/transactions/TransactionRollbackTest_withTransactional.java
rename to examples/smoketests/src/test/java/org/apache/isis/testdomain/transactions/TransactionRollbackTest_usingTransactional.java
index 2145dd5..06608fb 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/transactions/TransactionRollbackTest_withTransactional.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/transactions/TransactionRollbackTest_usingTransactional.java
@@ -54,7 +54,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
})
@Transactional
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
-class TransactionRollbackTest_withTransactional {
+class TransactionRollbackTest_usingTransactional {
@Inject private FixtureScripts fixtureScripts;
@Inject private RepositoryService repository;
diff --git a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesEventService.java b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesEventService.java
index 4ab1068..422cc56 100644
--- a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesEventService.java
+++ b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesEventService.java
@@ -20,10 +20,10 @@ package org.apache.isis.extensions.fixtures;
import javax.enterprise.event.Event;
import javax.inject.Inject;
-import javax.inject.Singleton;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.ioc.spring._Spring;
import org.apache.isis.extensions.fixtures.events.FixturesInstalledEvent;
@@ -32,7 +32,7 @@ import org.apache.isis.extensions.fixtures.events.FixturesInstallingEvent;
/**
* @since 2.0
*/
-@Singleton
+@Service
public class FixturesEventService {
@Inject Event<FixturesInstallingEvent> fixturesInstallingEvents;
diff --git a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesLifecyleService.java b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesLifecyleService.java
index 2351327..63b02bd 100644
--- a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesLifecyleService.java
+++ b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/FixturesLifecyleService.java
@@ -21,14 +21,15 @@ package org.apache.isis.extensions.fixtures;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
-import javax.inject.Singleton;
+
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.clock.Clock;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.extensions.fixtures.legacy.FixtureClock;
import org.apache.isis.runtime.system.session.IsisSessionFactory;
-@Singleton
+@Service
public class FixturesLifecyleService {
@Inject IsisSessionFactory isisSessionFactory; // depends on
diff --git a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/ExecutionParametersService.java b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/ExecutionParametersService.java
index fce4eb2..a6d65b2 100644
--- a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/ExecutionParametersService.java
+++ b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/ExecutionParametersService.java
@@ -18,7 +18,7 @@
*/
package org.apache.isis.extensions.fixtures.fixturescripts;
-import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
/**
@@ -31,7 +31,7 @@ import javax.inject.Singleton;
* need refinement in the future).
* </p>
*/
-@Singleton
+@Service
public class ExecutionParametersService {
public ExecutionParameters newExecutionParameters(final String parameters) {
diff --git a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/queryresultscache/QueryResultsCacheControlInternal.java b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/queryresultscache/QueryResultsCacheControlInternal.java
index d5f1114..f62fde9 100644
--- a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/queryresultscache/QueryResultsCacheControlInternal.java
+++ b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/queryresultscache/QueryResultsCacheControlInternal.java
@@ -18,9 +18,8 @@
*/
package org.apache.isis.extensions.fixtures.legacy.queryresultscache;
-import javax.inject.Singleton;
-
import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.queryresultscache.QueryResultCacheControl;
import org.apache.isis.applib.services.queryresultscache.QueryResultsCache;
@@ -31,7 +30,7 @@ import org.apache.isis.extensions.fixtures.events.FixturesInstallingEvent;
/**
* In separate class because {@link QueryResultsCache} itself is request-scoped
*/
-@Singleton
+@Service
public class QueryResultsCacheControlInternal implements QueryResultCacheControl {
@EventListener(FixturesInstallingEvent.class)
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java
index 0db45e7..adc590d 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java
@@ -22,11 +22,13 @@ import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Singleton;
+import org.springframework.stereotype.Service;
+
import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts;
import lombok.extern.log4j.Log4j2;
-@Singleton @Log4j2
+@Service @Log4j2
public class SeedSecurityModuleService {
@Inject FixtureScripts fixtureScripts;