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/05/16 12:51:50 UTC

[isis] branch 2112_SpringBoot updated: ISIS-2112: refactoring 'Specloader' to a Spring Managed Bean

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

ahuber pushed a commit to branch 2112_SpringBoot
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/2112_SpringBoot by this push:
     new cf95ca1  ISIS-2112: refactoring 'Specloader' to a Spring Managed Bean
cf95ca1 is described below

commit cf95ca1144899124777c716aed430023bfcb0795
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu May 16 14:51:43 2019 +0200

    ISIS-2112: refactoring 'Specloader' to a Spring Managed Bean
    
    - disentangles and removes the complex factory code
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2112
---
 .../applib/services/jaxb/JaxbServiceDefault.java   |  4 +-
 .../progmodel/ProgrammingModelService.java         | 28 ++++++++
 .../MetaModelValidatorServiceDefault.java          | 77 ++++++++++++++++++++++
 .../specloader/ProgrammingModelServiceDefault.java | 56 ++++++++++++++++
 .../specloader/SpecificationLoaderDefault.java     | 49 ++++++++++----
 .../validator/MetaModelValidatorService.java       | 28 ++++++++
 .../isis/progmodels/dflt/JavaReflectorHelper.java  | 53 ---------------
 .../SpecificationLoaderTestAbstract.java           |  2 +-
 .../system/session/SpecificationLoaderFactory.java | 77 ----------------------
 .../session/SpecificationLoaderProducerBean.java   | 59 -----------------
 10 files changed, 228 insertions(+), 205 deletions(-)

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 e15b826..06cde39 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
@@ -64,7 +64,7 @@ public class JaxbServiceDefault extends JaxbService.Simple {
             DomainObjectList list = (DomainObjectList) domainObject;
             try {
                 final String elementObjectType = list.getElementObjectType();
-                final Class<?> elementType = metaModelService5.fromObjectType(elementObjectType);
+                final Class<?> elementType = metaModelService.fromObjectType(elementObjectType);
                 if (elementType.getAnnotation(XmlJavaTypeAdapter.class) == null) {
                     return JAXBContext.newInstance(domainClass, elementType);
                 } else {
@@ -102,6 +102,6 @@ public class JaxbServiceDefault extends JaxbService.Simple {
     ServiceInjector serviceInjector;
 
     @javax.inject.Inject
-    MetaModelService metaModelService5;
+    MetaModelService metaModelService;
 }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelService.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelService.java
new file mode 100644
index 0000000..d81a354
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelService.java
@@ -0,0 +1,28 @@
+/*
+ *  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.core.metamodel.progmodel;
+
+import java.util.function.Supplier;
+
+/**
+ * @since 2.0.0
+ */
+public interface ProgrammingModelService extends Supplier<ProgrammingModel> {
+    
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/MetaModelValidatorServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/MetaModelValidatorServiceDefault.java
new file mode 100644
index 0000000..6f44cfc
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/MetaModelValidatorServiceDefault.java
@@ -0,0 +1,77 @@
+/*
+ *  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.core.metamodel.specloader;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.apache.isis.commons.internal.base._Lazy;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.core.commons.factory.InstanceUtil;
+import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModelService;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorService;
+
+import lombok.val;
+
+/**
+ * @since 2.0.0
+ */
+@Singleton
+public class MetaModelValidatorServiceDefault implements MetaModelValidatorService {
+
+    @Override
+    public MetaModelValidator get() {
+        return metaModelValidator.get();
+    }
+    
+    // -- HELPER
+    
+    @Inject private IsisConfiguration configuration;
+    @Inject private ProgrammingModelService programmingModelService;
+    
+    private _Lazy<MetaModelValidator> metaModelValidator = 
+            _Lazy.threadSafe(this::createMetaModelValidator);
+            
+    private MetaModelValidator createMetaModelValidator() {
+        
+        final String metaModelValidatorClassName =
+                configuration.getString(
+                        ReflectorConstants.META_MODEL_VALIDATOR_CLASS_NAME,
+                        ReflectorConstants.META_MODEL_VALIDATOR_CLASS_NAME_DEFAULT);
+        val mmValidator = InstanceUtil.createInstance(metaModelValidatorClassName, MetaModelValidator.class);
+        val mmValidatorComposite = MetaModelValidatorComposite.asComposite(mmValidator);
+        
+        val programmingModel = programmingModelService.get();
+        val metaModelRefiners = MetaModelRefiner.getAll();
+        
+        for (MetaModelRefiner metaModelRefiner : metaModelRefiners) {
+            metaModelRefiner.refineProgrammingModel(programmingModel);
+            metaModelRefiner.refineMetaModelValidator(mmValidatorComposite);
+        }
+        
+        programmingModel.refineMetaModelValidator(mmValidatorComposite);
+        
+        return mmValidator;
+    }
+    
+}
+
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ProgrammingModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ProgrammingModelServiceDefault.java
new file mode 100644
index 0000000..63fd267
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ProgrammingModelServiceDefault.java
@@ -0,0 +1,56 @@
+/*
+ *  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.core.metamodel.specloader;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.apache.isis.commons.internal.base._Lazy;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModelAbstract.DeprecatedPolicy;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModelService;
+import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
+
+@Singleton
+public class ProgrammingModelServiceDefault implements ProgrammingModelService {
+
+    @Override
+    public ProgrammingModel get() {
+        return programmingModel.get();
+    }
+    
+    // -- HELPER
+    
+    @Inject private IsisConfiguration configuration;
+    
+    private _Lazy<ProgrammingModel> programmingModel = 
+            _Lazy.threadSafe(this::createProgrammingModel);
+            
+    private ProgrammingModel createProgrammingModel() {
+        
+        final DeprecatedPolicy deprecatedPolicy = DeprecatedPolicy.parse(configuration);
+
+        final ProgrammingModel programmingModel = new ProgrammingModelFacetsJava5(deprecatedPolicy);
+        ProgrammingModel.Util.includeFacetFactories(configuration, programmingModel);
+        ProgrammingModel.Util.excludeFacetFactories(configuration, programmingModel);
+        return programmingModel;
+    }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
index 7c58cbb..3e84a23 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
@@ -6,7 +6,9 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import javax.annotation.Nullable;
-import javax.enterprise.inject.Vetoed;
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
@@ -24,7 +26,7 @@ import org.apache.isis.core.metamodel.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModelService;
 import org.apache.isis.core.metamodel.spec.FreeStandingList;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -37,6 +39,7 @@ import org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbs
 import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
 import org.apache.isis.core.metamodel.specloader.specimpl.standalonelist.ObjectSpecificationOnStandaloneList;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorService;
 import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
 import org.apache.isis.core.runtime.threadpool.ThreadPoolExecutionMode;
 import org.apache.isis.core.runtime.threadpool.ThreadPoolSupport;
@@ -63,37 +66,52 @@ import lombok.extern.slf4j.Slf4j;
  * </ul>
  * </p>
  */
-@Vetoed // has a producer
+@Singleton
 @Slf4j
 public class SpecificationLoaderDefault implements SpecificationLoader {
 
 	private final ClassSubstitutor classSubstitutor = new ClassSubstitutor();
 
-	private final ProgrammingModel programmingModel;
-	private final FacetProcessor facetProcessor;
+	private ProgrammingModel programmingModel;
+	private FacetProcessor facetProcessor;
 
 
-	private final MetaModelValidator metaModelValidator;
+	private MetaModelValidator metaModelValidator;
 	private final SpecificationCacheDefault cache = new SpecificationCacheDefault();
-	private final PostProcessor postProcessor;
+	private PostProcessor postProcessor;
 
+	@PostConstruct
+	public void preInit() {
+        this.programmingModel = programmingModelService.get();
+        this.metaModelValidator = metaModelValidatorService.get();
 
-	public SpecificationLoaderDefault(
+        this.facetProcessor = new FacetProcessor(programmingModel);
+        this.postProcessor = new PostProcessor(programmingModel);
+	}
+	
+	/** JUnit Test Support */
+	public static SpecificationLoaderDefault getInstance (
 			final ProgrammingModel programmingModel,
 			final MetaModelValidator metaModelValidator) {
 
-		this.programmingModel = programmingModel;
-		this.metaModelValidator = metaModelValidator;
+	    val instance = new SpecificationLoaderDefault(); 
+	    
+	    instance.programmingModel = programmingModel;
+	    instance.metaModelValidator = metaModelValidator;
 
-		this.facetProcessor = new FacetProcessor(programmingModel);
-		this.postProcessor = new PostProcessor(programmingModel);
+	    instance.facetProcessor = new FacetProcessor(programmingModel);
+	    instance.postProcessor = new PostProcessor(programmingModel);
+	    
+	    return instance;
 	}
+	
+	
 
 	// -- LIVE CYCLE
 
 	/**
 	 * Initializes and wires up, and primes the cache based on any service
-	 * classes (provided by the {@link ServicesInjector}).
+	 * classes (provided by the {@link IsisBeanTypeRegistry}).
 	 */
 	@Override
 	public void init() {
@@ -484,6 +502,11 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
 		cache.recache(newSpec);
 	}
 	
+	// -- DEPS
+	
+	private @Inject ProgrammingModelService programmingModelService;
+	private @Inject MetaModelValidatorService metaModelValidatorService; 
+	
 	// -- DEPRECATED
 
 //	/**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorService.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorService.java
new file mode 100644
index 0000000..2102a47
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorService.java
@@ -0,0 +1,28 @@
+/*
+ *  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.core.metamodel.specloader.validator;
+
+import java.util.function.Supplier;
+
+/**
+ * @since 2.0.0
+ */
+public interface MetaModelValidatorService extends Supplier<MetaModelValidator>{
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
deleted file mode 100644
index e897c9c..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.progmodels.dflt;
-
-import java.util.Collection;
-
-import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
-import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-
-public final class JavaReflectorHelper  {
-    
-    private JavaReflectorHelper(){}
-
-    public static SpecificationLoader createSpecificationLoader(
-            final ProgrammingModel programmingModel,
-            final Collection<MetaModelRefiner> metaModelRefiners,
-            final MetaModelValidator mmValidator) {
-
-        MetaModelValidatorComposite metaModelValidator = MetaModelValidatorComposite.asComposite(mmValidator);
-        for (MetaModelRefiner metaModelRefiner : metaModelRefiners) {
-            metaModelRefiner.refineProgrammingModel(programmingModel);
-            metaModelRefiner.refineMetaModelValidator(metaModelValidator);
-        }
-
-        programmingModel.refineMetaModelValidator(metaModelValidator);
-
-        return new SpecificationLoaderDefault(programmingModel, metaModelValidator);
-    }
-    
-    
-
-}
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 e6d556b..85580f5 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
@@ -82,7 +82,7 @@ abstract class SpecificationLoaderTestAbstract {
         
         //@Produces
         SpecificationLoader getSpecificationLoader() {
-            return new SpecificationLoaderDefault(
+            return SpecificationLoaderDefault.getInstance(
                     new ProgrammingModelFacetsJava5(DeprecatedPolicy.HONOUR),
                     new MetaModelValidatorDefault());
         }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/SpecificationLoaderFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/SpecificationLoaderFactory.java
deleted file mode 100644
index 425fdaf..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/SpecificationLoaderFactory.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.runtime.system.session;
-
-import static org.apache.isis.config.internal._Config.getConfiguration;
-
-import org.apache.isis.config.IsisConfiguration;
-import org.apache.isis.core.commons.factory.InstanceUtil;
-import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
-import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
-import org.apache.isis.core.metamodel.progmodel.ProgrammingModelAbstract.DeprecatedPolicy;
-import org.apache.isis.core.metamodel.specloader.ReflectorConstants;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
-import org.apache.isis.progmodels.dflt.JavaReflectorHelper;
-import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
-
-import lombok.val;
-
-/**
- * 
- */
-final class SpecificationLoaderFactory {
-    
-    // -- CREATE SPECIFICATION LOADER
-
-    public SpecificationLoader createSpecificationLoader() {
-
-        val metaModelRefiners = MetaModelRefiner.getAll();
-        val configuration = getConfiguration();
-        val programmingModel = createProgrammingModel(configuration);
-        val mmValidator = createMetaModelValidator(configuration);
-
-        return JavaReflectorHelper.createSpecificationLoader(
-                programmingModel, metaModelRefiners, mmValidator);
-    }
-
-    // -- HELPER
-    
-    private MetaModelValidator createMetaModelValidator(IsisConfiguration configuration) {
-        
-        final String metaModelValidatorClassName =
-                configuration.getString(
-                        ReflectorConstants.META_MODEL_VALIDATOR_CLASS_NAME,
-                        ReflectorConstants.META_MODEL_VALIDATOR_CLASS_NAME_DEFAULT);
-        return InstanceUtil.createInstance(metaModelValidatorClassName, MetaModelValidator.class);
-    }
-
-    private ProgrammingModel createProgrammingModel(IsisConfiguration configuration) {
-        
-        final DeprecatedPolicy deprecatedPolicy = DeprecatedPolicy.parse(configuration);
-
-        final ProgrammingModel programmingModel = new ProgrammingModelFacetsJava5(deprecatedPolicy);
-        ProgrammingModel.Util.includeFacetFactories(configuration, programmingModel);
-        ProgrammingModel.Util.excludeFacetFactories(configuration, programmingModel);
-        return programmingModel;
-    }
-
-
-}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/SpecificationLoaderProducerBean.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/SpecificationLoaderProducerBean.java
deleted file mode 100644
index b123d8c..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/SpecificationLoaderProducerBean.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.runtime.system.session;
-
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.springframework.context.annotation.Bean;
-
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtime.system.IsisSystemException;
-
-/**
- * @deprecated TODO [2033] convert SpecificationLoaderDefault to Singleton
- * Currently `SpecificationLoader` is not life-cycle 
- * managed by CDI/Spring, instead we provide a 'Producer Method' for it.
- * 
- * Consequently the framework is responsible for its life-cycle. 
- * 
- * We want to have CDI/Spring also manage these, which can be achieved by finally 
- * removing the `SpecificationLoaderProducerBean` singleton.
- *
- */
-@Singleton
-public class SpecificationLoaderProducerBean {
-    
-    @Inject ServiceRegistry serviceRegistry; //depends on 
-
-    // let Spring manage destruction , init is handled by isisSessionFactory internally
-	@Bean(destroyMethod = "shutdown") 
-	@Produces @Singleton 
-	//XXX note: the resulting singleton is not life-cycle managed by CDI/Spring, 
-	//neither are InjectionPoints resolved by CDI/Spring
-	public SpecificationLoader produceSpecificationLoader() throws IsisSystemException {
-	    return _Context.computeIfAbsent(SpecificationLoader.class, 
-	            ()-> new SpecificationLoaderFactory().createSpecificationLoader());
-	}
-	
-}