You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2019/03/16 13:29:32 UTC

[isis] branch ISIS-2033-IoC_spring updated: ISIS-2033: prepare for spec-loading to be initialized by spring

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-2033-IoC_spring
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-2033-IoC_spring by this push:
     new de99e94  ISIS-2033: prepare for spec-loading to be initialized by spring
de99e94 is described below

commit de99e945a144da34e2f930ab69d5a3e2efac4c10
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Mar 16 14:29:28 2019 +0100

    ISIS-2033: prepare for spec-loading to be initialized by spring
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2033
---
 .../org/apache/isis/applib/AppTypeRegistry.java    | 155 ---------------------
 .../isis/applib/fixturescripts/FixtureScripts.java |   8 +-
 .../apache/isis/config/beans/BeanTypeRegistry.java | 155 +++++++++++++++++++++
 .../isis/config/builder/ModulePackageHelper.java   |   8 +-
 core/log4j/pom.xml                                 |   4 +-
 .../metamodel/specloader/SpecificationLoader.java  |  20 +--
 .../specimpl/ObjectSpecificationAbstract.java      |   6 +-
 .../SpecificationLoaderTestAbstract.java           |  16 +--
 core/{log4j => plugins/legacy}/pom.xml             | 104 +++++++++-----
 .../classdiscovery/ClassDiscoveryService.java      |   0
 .../ClassDiscoveryServiceDefault.java              |   4 +-
 .../services/classdiscovery/package-info.java      |   0
 example/application/springapp/pom.xml              |   8 +-
 13 files changed, 265 insertions(+), 223 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/AppTypeRegistry.java b/core/applib/src/main/java/org/apache/isis/applib/AppTypeRegistry.java
deleted file mode 100644
index 45af56d..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/AppTypeRegistry.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package org.apache.isis.applib;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Stream;
-
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-import org.apache.isis.commons.internal.collections._Lists;
-
-/**
-     * Holds the set of domain services, persistent entities and fixture scripts.services
-     */
-    public final class AppTypeRegistry {
-
-        public final static List<String> FRAMEWORK_PROVIDED_SERVICE_PACKAGES = _Lists.of(
-                "org.apache.isis.applib",
-                "org.apache.isis.core.wrapper" ,
-                "org.apache.isis.core.metamodel.services" ,
-                "org.apache.isis.core.runtime.services" ,
-                "org.apache.isis.schema.services" ,
-                "org.apache.isis.objectstore.jdo.applib.service" ,
-                "org.apache.isis.viewer.restfulobjects.rendering.service" ,
-                "org.apache.isis.objectstore.jdo.datanucleus.service.support" ,
-                "org.apache.isis.objectstore.jdo.datanucleus.service.eventbus" ,
-                "org.apache.isis.viewer.wicket.viewer.services", 
-                "org.apache.isis.core.integtestsupport.components");
-
-        public final static List<String> FRAMEWORK_PROVIDED_TYPES_FOR_SCANNING = _Lists.of(
-        		"org.apache.isis.config.AppConfig",
-                "org.apache.isis.applib.IsisApplibModule",
-                "org.apache.isis.core.wrapper.WrapperFactoryDefault",
-                "org.apache.isis.core.metamodel.MetamodelModule",
-                "org.apache.isis.core.runtime.RuntimeModule",
-                "org.apache.isis.core.runtime.services.RuntimeServicesModule",
-                "org.apache.isis.jdo.JdoModule",
-                "org.apache.isis.viewer.restfulobjects.rendering.RendererContext"
-                
-                
-//                "org.apache.isis.objectstore.jdo.applib.service" ,
-//                "org.apache.isis.objectstore.jdo.datanucleus.service.support" ,
-//                "org.apache.isis.objectstore.jdo.datanucleus.service.eventbus" ,
-//                "org.apache.isis.viewer.wicket.viewer.services", 
-//                "org.apache.isis.core.integtestsupport.components"
-                
-        		
-        		);
-
-        private static AppTypeRegistry instance = new AppTypeRegistry();
-        public static AppTypeRegistry instance() {
-            return instance;
-        }
-
-        // -- persistenceCapableTypes
-        private Set<Class<?>> persistenceCapableTypes;
-        /**
-         * @return <tt>null</tt> if no appManifest is defined
-         */
-        public Set<Class<?>> getPersistenceCapableTypes() {
-            return persistenceCapableTypes;
-        }
-        public void setPersistenceCapableTypes(final Set<Class<?>> persistenceCapableTypes) {
-            this.persistenceCapableTypes = persistenceCapableTypes;
-        }
-
-
-        // -- mixinTypes
-        private Set<Class<?>> mixinTypes;
-
-        /**
-         * Along with {@link #getDomainServiceTypes()}, these are introspected eagerly.
-         *
-         * @return <tt>null</tt> if no appManifest is defined
-         */
-        public Set<Class<?>> getMixinTypes() {
-            return mixinTypes;
-        }
-        public void setMixinTypes(final Set<Class<?>> mixinTypes) {
-            this.mixinTypes = mixinTypes;
-        }
-
-
-        // -- fixtureScriptTypes
-        private Set<Class<? extends FixtureScript>> fixtureScriptTypes;
-
-        /**
-         * @return <tt>null</tt> if no appManifest is defined
-         */
-        public Set<Class<? extends FixtureScript>> getFixtureScriptTypes() {
-            return fixtureScriptTypes;
-        }
-        public void setFixtureScriptTypes(final Set<Class<? extends FixtureScript>> fixtureScriptTypes) {
-            this.fixtureScriptTypes = fixtureScriptTypes;
-        }
-
-
-
-        // -- domainServiceTypes
-        private Set<Class<?>> domainServiceTypes;
-        /**
-         * @return <tt>null</tt> if no appManifest is defined
-         */
-        public Set<Class<?>> getDomainServiceTypes() {
-            return domainServiceTypes;
-        }
-        public void setDomainServiceTypes(final Set<Class<?>> domainServiceTypes) {
-            this.domainServiceTypes = domainServiceTypes;
-        }
-
-
-        private Set<Class<?>> domainObjectTypes;
-        private Set<Class<?>> viewModelTypes;
-        private Set<Class<?>> xmlElementTypes;
-
-        public Set<Class<?>> getDomainObjectTypes() {
-            return domainObjectTypes;
-        }
-        public void setDomainObjectTypes(final Set<Class<?>> domainObjectTypes) {
-            this.domainObjectTypes = domainObjectTypes;
-        }
-
-        public Set<Class<?>> getViewModelTypes() {
-            return viewModelTypes;
-        }
-        public void setViewModelTypes(final Set<Class<?>> viewModelTypes) {
-            this.viewModelTypes = viewModelTypes;
-        }
-
-        public Set<Class<?>> getXmlElementTypes() {
-            return xmlElementTypes;
-        }
-        public void setXmlElementTypes(final Set<Class<?>> xmlElementTypes) {
-            this.xmlElementTypes = xmlElementTypes;
-        }
-       
-        // -- STREAM ALL
-        
-        /**
-         * @since 2.0.0-M2
-         */
-        public Stream<Class<?>> streamAllTypes() {
-
-            return _Lists.of(persistenceCapableTypes,
-                    mixinTypes,
-                    fixtureScriptTypes,
-                    domainServiceTypes,
-                    domainObjectTypes,
-                    viewModelTypes,
-                    xmlElementTypes)
-            .stream()
-            .flatMap(Collection::stream)
-            ;
-        }
-
-    }
\ No newline at end of file
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
index 5095d59..c0e4758 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
@@ -42,7 +42,7 @@ import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
-import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryService;
+//import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryService;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.fixturespec.FixtureScriptsDefault;
 import org.apache.isis.applib.services.fixturespec.FixtureScriptsSpecification;
@@ -243,7 +243,9 @@ public abstract class FixtureScripts extends AbstractService {
     }
 
     private <T> Set<Class<? extends T>> findSubTypesOfClasses(Class<T> cls, final String packagePrefix) {
-        return classDiscoveryService.findSubTypesOfClasses(cls, packagePrefix);
+    	//FIXME [2033] utilize the TypeRegistry to find sub-classes
+    	throw _Exceptions.notImplemented();
+        //return classDiscoveryService.findSubTypesOfClasses(cls, packagePrefix);
     }
 
     private FixtureScript newFixtureScript(final Class<? extends FixtureScript> fixtureScriptCls) {
@@ -475,7 +477,7 @@ public abstract class FixtureScripts extends AbstractService {
     @Inject ServiceInjector serviceInjector;
     @Inject RepositoryService repositoryService;
     @Inject TransactionService transactionService;
-    @Inject ClassDiscoveryService classDiscoveryService;
+    //@Inject ClassDiscoveryService classDiscoveryService;
     @Inject ExecutionParametersService executionParametersService;
 
 }
\ No newline at end of file
diff --git a/core/config/src/main/java/org/apache/isis/config/beans/BeanTypeRegistry.java b/core/config/src/main/java/org/apache/isis/config/beans/BeanTypeRegistry.java
new file mode 100644
index 0000000..dca7b9a
--- /dev/null
+++ b/core/config/src/main/java/org/apache/isis/config/beans/BeanTypeRegistry.java
@@ -0,0 +1,155 @@
+package org.apache.isis.config.beans;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import org.apache.isis.applib.fixturescripts.FixtureScript;
+import org.apache.isis.commons.internal.collections._Lists;
+
+/**
+ * Holds the set of domain services, persistent entities and fixture scripts.services
+ */
+public final class BeanTypeRegistry {
+
+	public final static List<String> FRAMEWORK_PROVIDED_SERVICE_PACKAGES = _Lists.of(
+			"org.apache.isis.applib",
+			"org.apache.isis.core.wrapper" ,
+			"org.apache.isis.core.metamodel.services" ,
+			"org.apache.isis.core.runtime.services" ,
+			"org.apache.isis.schema.services" ,
+			"org.apache.isis.objectstore.jdo.applib.service" ,
+			"org.apache.isis.viewer.restfulobjects.rendering.service" ,
+			"org.apache.isis.objectstore.jdo.datanucleus.service.support" ,
+			"org.apache.isis.objectstore.jdo.datanucleus.service.eventbus" ,
+			"org.apache.isis.viewer.wicket.viewer.services", 
+			"org.apache.isis.core.integtestsupport.components");
+
+	public final static List<String> FRAMEWORK_PROVIDED_TYPES_FOR_SCANNING = _Lists.of(
+			"org.apache.isis.config.AppConfig",
+			"org.apache.isis.applib.IsisApplibModule",
+			"org.apache.isis.core.wrapper.WrapperFactoryDefault",
+			"org.apache.isis.core.metamodel.MetamodelModule",
+			"org.apache.isis.core.runtime.RuntimeModule",
+			"org.apache.isis.core.runtime.services.RuntimeServicesModule",
+			"org.apache.isis.jdo.JdoModule",
+			"org.apache.isis.viewer.restfulobjects.rendering.RendererContext"
+
+
+			//                "org.apache.isis.objectstore.jdo.applib.service" ,
+			//                "org.apache.isis.objectstore.jdo.datanucleus.service.support" ,
+			//                "org.apache.isis.objectstore.jdo.datanucleus.service.eventbus" ,
+			//                "org.apache.isis.viewer.wicket.viewer.services", 
+			//                "org.apache.isis.core.integtestsupport.components"
+
+
+			);
+
+	private static BeanTypeRegistry instance = new BeanTypeRegistry();
+	public static BeanTypeRegistry instance() {
+		return instance;
+	}
+
+	// -- persistenceCapableTypes
+	private Set<Class<?>> persistenceCapableTypes;
+	/**
+	 * @return <tt>null</tt> if no appManifest is defined
+	 */
+	public Set<Class<?>> getPersistenceCapableTypes() {
+		return persistenceCapableTypes;
+	}
+	public void setPersistenceCapableTypes(final Set<Class<?>> persistenceCapableTypes) {
+		this.persistenceCapableTypes = persistenceCapableTypes;
+	}
+
+
+	// -- mixinTypes
+	private Set<Class<?>> mixinTypes;
+
+	/**
+	 * Along with {@link #getDomainServiceTypes()}, these are introspected eagerly.
+	 *
+	 * @return <tt>null</tt> if no appManifest is defined
+	 */
+	public Set<Class<?>> getMixinTypes() {
+		return mixinTypes;
+	}
+	public void setMixinTypes(final Set<Class<?>> mixinTypes) {
+		this.mixinTypes = mixinTypes;
+	}
+
+
+	// -- fixtureScriptTypes
+	private Set<Class<? extends FixtureScript>> fixtureScriptTypes;
+
+	/**
+	 * @return <tt>null</tt> if no appManifest is defined
+	 */
+	public Set<Class<? extends FixtureScript>> getFixtureScriptTypes() {
+		return fixtureScriptTypes;
+	}
+	public void setFixtureScriptTypes(final Set<Class<? extends FixtureScript>> fixtureScriptTypes) {
+		this.fixtureScriptTypes = fixtureScriptTypes;
+	}
+
+
+
+	// -- domainServiceTypes
+	private Set<Class<?>> domainServiceTypes;
+	/**
+	 * @return <tt>null</tt> if no appManifest is defined
+	 */
+	public Set<Class<?>> getDomainServiceTypes() {
+		return domainServiceTypes;
+	}
+	public void setDomainServiceTypes(final Set<Class<?>> domainServiceTypes) {
+		this.domainServiceTypes = domainServiceTypes;
+	}
+
+
+	private Set<Class<?>> domainObjectTypes;
+	private Set<Class<?>> viewModelTypes;
+	private Set<Class<?>> xmlElementTypes;
+
+	public Set<Class<?>> getDomainObjectTypes() {
+		return domainObjectTypes;
+	}
+	public void setDomainObjectTypes(final Set<Class<?>> domainObjectTypes) {
+		this.domainObjectTypes = domainObjectTypes;
+	}
+
+	public Set<Class<?>> getViewModelTypes() {
+		return viewModelTypes;
+	}
+	public void setViewModelTypes(final Set<Class<?>> viewModelTypes) {
+		this.viewModelTypes = viewModelTypes;
+	}
+
+	public Set<Class<?>> getXmlElementTypes() {
+		return xmlElementTypes;
+	}
+	public void setXmlElementTypes(final Set<Class<?>> xmlElementTypes) {
+		this.xmlElementTypes = xmlElementTypes;
+	}
+
+	// -- STREAM ALL
+
+	/**
+	 * @since 2.0.0-M2
+	 */
+	public Stream<Class<?>> streamAllTypes() {
+
+		return _Lists.of(persistenceCapableTypes,
+				mixinTypes,
+				fixtureScriptTypes,
+				domainServiceTypes,
+				domainObjectTypes,
+				viewModelTypes,
+				xmlElementTypes)
+				.stream()
+				.flatMap(Collection::stream)
+				;
+	}
+
+}
\ No newline at end of file
diff --git a/core/config/src/main/java/org/apache/isis/config/builder/ModulePackageHelper.java b/core/config/src/main/java/org/apache/isis/config/builder/ModulePackageHelper.java
index 84464b0..de50143 100644
--- a/core/config/src/main/java/org/apache/isis/config/builder/ModulePackageHelper.java
+++ b/core/config/src/main/java/org/apache/isis/config/builder/ModulePackageHelper.java
@@ -31,7 +31,6 @@ import java.util.stream.Stream;
 import javax.xml.bind.annotation.XmlElement;
 
 import org.apache.isis.applib.AppManifest;
-import org.apache.isis.applib.AppTypeRegistry;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.DomainService;
@@ -47,6 +46,7 @@ import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.commons.internal.reflection._Reflect;
+import org.apache.isis.config.beans.BeanTypeRegistry;
 import org.apache.isis.core.plugins.classdiscovery.ClassDiscovery;
 import org.apache.isis.core.plugins.classdiscovery.ClassDiscoveryPlugin;
 
@@ -98,7 +98,7 @@ class ModulePackageHelper {
         
         
         val typesForScanning = new HashSet<Class<?>>();
-        AppTypeRegistry.FRAMEWORK_PROVIDED_TYPES_FOR_SCANNING.stream()
+        BeanTypeRegistry.FRAMEWORK_PROVIDED_TYPES_FOR_SCANNING.stream()
         .map(name -> {
 			try {
 				return _Context.loadClass(name);
@@ -116,10 +116,10 @@ class ModulePackageHelper {
         //FIXME [2033] at this point we should have all we need, let CDI take over
         // and let then CDI Bean intercepter make entries into the registry 
         
-        final AppTypeRegistry registry = AppTypeRegistry.instance();
+        final BeanTypeRegistry registry = BeanTypeRegistry.instance();
 
         final Set<String> moduleAndFrameworkPackages = new HashSet<>();
-        moduleAndFrameworkPackages.addAll(AppTypeRegistry.FRAMEWORK_PROVIDED_SERVICE_PACKAGES);
+        moduleAndFrameworkPackages.addAll(BeanTypeRegistry.FRAMEWORK_PROVIDED_SERVICE_PACKAGES);
         modulePackageNamesFrom(appManifest)
             .forEach(moduleAndFrameworkPackages::add);
         moduleAndFrameworkPackages.add(appManifest.getClass().getPackage().getName());
diff --git a/core/log4j/pom.xml b/core/log4j/pom.xml
index 06012af..8ba6508 100644
--- a/core/log4j/pom.xml
+++ b/core/log4j/pom.xml
@@ -36,14 +36,16 @@
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
+            <scope>provided</scope>
         </dependency>
+        
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
+            <scope>provided</scope>
         </dependency>
 
         <!-- JEE API -->
-        <!-- (replaces org.apache.geronimo.specs:geronimo-javamail_1.4_spec for javax.mail:mail) -->
         <dependency>
             <groupId>javax</groupId>
             <artifactId>javaee-api</artifactId>
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
index c630fb3..6344db6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
@@ -25,22 +25,18 @@ import java.util.stream.Stream;
 
 import javax.enterprise.inject.Vetoed;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.isis.applib.AppTypeRegistry;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.registry.ServiceRegistry.BeanAdapter;
-import org.apache.isis.applib.services.registry.ServiceRegistry.LifecycleContext;
 import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.commons.internal.base._Tuples.Tuple2;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.commons.internal.debug._Probe;
 import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.beans.BeanTypeRegistry;
 import org.apache.isis.config.internal._Config;
 import org.apache.isis.config.property.ConfigPropertyBoolean;
 import org.apache.isis.config.property.ConfigPropertyEnum;
@@ -69,6 +65,10 @@ import org.apache.isis.core.runtime.threadpool.ThreadPoolExecutionMode;
 import org.apache.isis.core.runtime.threadpool.ThreadPoolSupport;
 import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
 import org.apache.isis.schema.utils.CommonDtoUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import lombok.val;
 
 /**
  * Builds the meta-model.
@@ -156,6 +156,8 @@ public class SpecificationLoader {
         // need to completely load services and mixins (synchronously)
         LOG.info("Loading all specs (up to state of {})", IntrospectionState.NOT_INTROSPECTED);
 
+        val typeRegistry = BeanTypeRegistry.instance(); 
+        
         final List<ObjectSpecification> specificationsFromRegistry = _Lists.newArrayList();
 
         // we use allServiceClasses() - obtained from servicesInjector - rather than reading from the
@@ -168,7 +170,7 @@ public class SpecificationLoader {
         );
         final List<ObjectSpecification> mixinSpecs =
         loadSpecificationsFor(
-                AppTypeRegistry.instance().getMixinTypes().stream(), null,
+        		typeRegistry.getMixinTypes().stream(), null,
                 specificationsFromRegistry, IntrospectionState.NOT_INTROSPECTED
         );
         loadSpecificationsFor(
@@ -176,15 +178,15 @@ public class SpecificationLoader {
                 specificationsFromRegistry, IntrospectionState.NOT_INTROSPECTED
         );
         loadSpecificationsFor(
-                AppTypeRegistry.instance().getDomainObjectTypes().stream(), null,
+        		typeRegistry.getDomainObjectTypes().stream(), null,
                 specificationsFromRegistry, IntrospectionState.NOT_INTROSPECTED
         );
         loadSpecificationsFor(
-                AppTypeRegistry.instance().getViewModelTypes().stream(), null,
+        		typeRegistry.getViewModelTypes().stream(), null,
                 specificationsFromRegistry, IntrospectionState.NOT_INTROSPECTED
         );
         loadSpecificationsFor(
-                AppTypeRegistry.instance().getXmlElementTypes().stream(), null,
+        		typeRegistry.getXmlElementTypes().stream(), null,
                 specificationsFromRegistry, IntrospectionState.NOT_INTROSPECTED
         );
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index a7610d8..c107c14 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -33,7 +33,6 @@ import java.util.stream.Stream;
 import javax.enterprise.inject.Vetoed;
 
 import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.AppTypeRegistry;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.metamodel.ManagedObjectSort;
 import org.apache.isis.commons.internal.base._NullSafe;
@@ -41,6 +40,7 @@ import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.config.beans.BeanTypeRegistry;
 import org.apache.isis.core.commons.exceptions.UnknownTypeException;
 import org.apache.isis.core.commons.lang.ClassExtensions;
 import org.apache.isis.core.commons.util.ToString;
@@ -850,7 +850,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
             return Collections.emptyList();
         }
 
-        final Set<Class<?>> mixinTypes = AppTypeRegistry.instance().getMixinTypes();
+        final Set<Class<?>> mixinTypes = BeanTypeRegistry.instance().getMixinTypes();
         if(mixinTypes == null) {
             return Collections.emptyList();
         }
@@ -1034,7 +1034,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
         if (isBean() || isValue()) {
             return Collections.emptyList();
         }
-        final Set<Class<?>> mixinTypes = AppTypeRegistry.instance().getMixinTypes();
+        final Set<Class<?>> mixinTypes = BeanTypeRegistry.instance().getMixinTypes();
         if(mixinTypes == null) {
             return Collections.emptyList();
         }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
index aca8881..fddc47a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
@@ -29,13 +29,13 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
-import org.apache.isis.applib.AppTypeRegistry;
 import org.apache.isis.applib.services.grid.GridService2;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.i18n.TranslationService.Mode;
 import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.commons.internal.base._Timing;
 import org.apache.isis.commons.internal.collections._Sets;
+import org.apache.isis.config.beans.BeanTypeRegistry;
 import org.apache.isis.core.metamodel.BeansForTesting;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
@@ -127,13 +127,13 @@ abstract class SpecificationLoaderTestAbstract {
         
         // PRODUCTION
         
-        AppTypeRegistry.instance().setDomainServiceTypes(_Sets.newHashSet());
-        AppTypeRegistry.instance().setFixtureScriptTypes(_Sets.newHashSet());
-        AppTypeRegistry.instance().setDomainObjectTypes(_Sets.newHashSet());
-        AppTypeRegistry.instance().setMixinTypes(_Sets.newHashSet());
-        AppTypeRegistry.instance().setViewModelTypes(_Sets.newHashSet());
-        AppTypeRegistry.instance().setPersistenceCapableTypes(_Sets.newHashSet());
-        AppTypeRegistry.instance().setXmlElementTypes(_Sets.newHashSet());
+        BeanTypeRegistry.instance().setDomainServiceTypes(_Sets.newHashSet());
+        BeanTypeRegistry.instance().setFixtureScriptTypes(_Sets.newHashSet());
+        BeanTypeRegistry.instance().setDomainObjectTypes(_Sets.newHashSet());
+        BeanTypeRegistry.instance().setMixinTypes(_Sets.newHashSet());
+        BeanTypeRegistry.instance().setViewModelTypes(_Sets.newHashSet());
+        BeanTypeRegistry.instance().setPersistenceCapableTypes(_Sets.newHashSet());
+        BeanTypeRegistry.instance().setXmlElementTypes(_Sets.newHashSet());
 
         _Timing.runVerbose("specificationLoader.init()", specificationLoader::init);
         
diff --git a/core/log4j/pom.xml b/core/plugins/legacy/pom.xml
similarity index 50%
copy from core/log4j/pom.xml
copy to core/plugins/legacy/pom.xml
index 06012af..0117cc6 100644
--- a/core/log4j/pom.xml
+++ b/core/plugins/legacy/pom.xml
@@ -1,56 +1,93 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
+<!--
+  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.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>${revision}</version>
+    	<version>${revision}</version>
+    	<relativePath>../../pom.xml</relativePath>
     </parent>
 
-    <artifactId>isis-core-log4j</artifactId>
-    <name>Apache Isis Log4j Impls</name>
+    <artifactId>isis-core-plugins-legacy</artifactId>
+
+    <name>Apache Isis Legacy Support</name>
+    <description>
+    </description>
 
     <properties>
-        <jar-plugin.automaticModuleName>org.apache.isis.core.log4j</jar-plugin.automaticModuleName>
-        <git-plugin.propertiesDir>org/apache/isis/core/log4j</git-plugin.propertiesDir>
+        <jar-plugin.automaticModuleName>org.apache.isis.plugins.legacy</jar-plugin.automaticModuleName>
+        <git-plugin.propertiesDir>org/apache/isis/plugins/legacy</git-plugin.propertiesDir>
     </properties>
 
+    <build>
+        <resources>
+            <resource>
+                <filtering>false</filtering>
+                <directory>src/main/resources</directory>
+            </resource>
+            <resource>
+                <filtering>false</filtering>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**</include>
+                </includes>
+                <excludes>
+                    <exclude>**/*.java</exclude>
+                </excludes>
+            </resource>
+        </resources>
+    </build>
+
     <dependencies>
-        <dependency>
+    
+    	<dependency>
             <groupId>org.apache.isis.core</groupId>
-            <artifactId>isis-core-unittestsupport</artifactId>
-            <scope>test</scope>
+            <artifactId>isis-core-applib</artifactId>
         </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+		
+		<dependency>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-config</artifactId>
         </dependency>
+		
+		
+        <!-- TESTS -->
         <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-unittestsupport</artifactId>
+            <scope>test</scope>
+            <exclusions>
+            	<!-- whatever unittestsupport is dependent on, it should not be transitive  -->
+            	<exclusion>
+                    <groupId>org.reflections</groupId>
+                    <artifactId>reflections</artifactId>
+            	</exclusion>
+            	<exclusion>
+                    <groupId>com.google.guava</groupId>
+                    <artifactId>guava</artifactId>
+            	</exclusion>
+            </exclusions>
         </dependency>
 
-        <!-- JEE API -->
-        <!-- (replaces org.apache.geronimo.specs:geronimo-javamail_1.4_spec for javax.mail:mail) -->
-        <dependency>
-            <groupId>javax</groupId>
-            <artifactId>javaee-api</artifactId>
-            <optional>true</optional>
-            <scope>provided</scope>
-        </dependency>
-        
     </dependencies>
 
     <profiles>
@@ -98,5 +135,4 @@
         </profile>
     </profiles>
 
-
 </project>
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryService.java b/core/plugins/legacy/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryService.java
similarity index 100%
rename from core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryService.java
rename to core/plugins/legacy/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryService.java
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceDefault.java b/core/plugins/legacy/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceDefault.java
similarity index 94%
rename from core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceDefault.java
rename to core/plugins/legacy/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceDefault.java
index cd0efd3..32ee9f5 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceDefault.java
+++ b/core/plugins/legacy/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceDefault.java
@@ -22,12 +22,12 @@ import java.util.Collections;
 import java.util.Set;
 
 import org.apache.isis.applib.AbstractService;
-import org.apache.isis.applib.AppTypeRegistry;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.config.beans.BeanTypeRegistry;
 import org.apache.isis.core.plugins.classdiscovery.ClassDiscoveryPlugin;
 
 /**
@@ -63,7 +63,7 @@ implements ClassDiscoveryService {
     // -- HELPER
 
     private static <T> Set<Class<? extends T>> getFixtureScriptTypes() {
-        Set<?> fixtureScriptTypes = AppTypeRegistry.instance().getFixtureScriptTypes();
+        Set<?> fixtureScriptTypes = BeanTypeRegistry.instance().getFixtureScriptTypes();
         if (fixtureScriptTypes != null) {
             return _Casts.uncheckedCast(fixtureScriptTypes);
         }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/package-info.java b/core/plugins/legacy/src/main/java/org/apache/isis/applib/services/classdiscovery/package-info.java
similarity index 100%
rename from core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/package-info.java
rename to core/plugins/legacy/src/main/java/org/apache/isis/applib/services/classdiscovery/package-info.java
diff --git a/example/application/springapp/pom.xml b/example/application/springapp/pom.xml
index 4216036..9a902bf 100644
--- a/example/application/springapp/pom.xml
+++ b/example/application/springapp/pom.xml
@@ -110,10 +110,10 @@
 
 		<!-- ISIS CORE PLUGINS -->
 
-		<dependency>
-			<groupId>org.apache.isis.core</groupId>
-			<artifactId>isis-core-plugins-ioc-weld</artifactId>
-		</dependency>
+<!-- 		<dependency> -->
+<!-- 			<groupId>org.apache.isis.core</groupId> -->
+<!-- 			<artifactId>isis-core-plugins-ioc-weld</artifactId> -->
+<!-- 		</dependency> -->
 
 		<dependency>
 			<groupId>org.apache.isis.core</groupId>