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

[isis] branch v2 updated (e3c6ec3 -> af84c1c)

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

ahuber pushed a change to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from e3c6ec3  ISIS-2158: fixing issues after last commit
     new 7cdb3f4  ISIS-2158: moving ObjectAdapterContext -> jdo-common
     new f3cb3a5  ISIS-2158: removing jdo-api from 'applib' and 'metamodel'
     new b62c08a  ISIS-2158: remove jdo specifica from PersistenceSession
     new d541546  ISIS-2158: remove jdo-api from remaining in core
     new 7648485  ISIS-2158: decouple PoWriter from IsisContext
     new 5fa4560  ISIS-2158: remove injection points from FormAbstract
     new af84c1c  ISIS-2158: remove obsolete layer of abstraction: MetaModelDeficiencies

The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 core/applib/pom.xml                                |   9 --
 .../apache/isis/applib/annotation/Collection.java  |   5 +-
 .../apache/isis/applib/annotation/Property.java    |   5 +-
 .../exceprecog/ExceptionRecognizerForType.java     | 105 ++++++++++++++-------
 .../applib/services/metrics/MetricsService.java    |   1 -
 .../commons/internal/exceptions/_Exceptions.java   |  25 ++++-
 core/config/pom.xml                                |   9 --
 core/metamodel/pom.xml                             |   9 --
 .../apache/isis/metamodel/facets/Annotations.java  |  17 ++--
 .../apache/isis/metamodel/facets/FacetFactory.java |   2 +-
 .../annotation/HomePageFacetAnnotationFactory.java |  10 +-
 .../metamodel/facets/jaxb/JaxbFacetFactory.java    |  21 +++--
 .../order/annotprop/MemberOrderFacetFactory.java   |   9 +-
 .../param/DeriveFacetsPostProcessor.java           |  20 +++-
 .../exceprecog/ExceptionRecognizerDocDefault.java  |   1 -
 .../specimpl/OneToManyAssociationDefault.java      |  14 +--
 .../validator/MetaModelDeficiencies.java           |  49 ----------
 .../validator/MetaModelInvalidException.java       |   7 +-
 .../specloader/validator/ValidationFailures.java   |  33 ++++---
 .../applib/services/jdosupport/IsisJdoSupport.java |   0
 .../applib/services/jdosupport/package-info.java   |   0
 ...xceptionRecognizerForJDODataStoreException.java |   7 +-
 ...traintViolationForeignKeyNoActionException.java |   1 +
 ...yConstraintViolationUniqueOrIndexException.java |   1 +
 .../exceprecog/JdoNestedExceptionResolver.java}    |  25 +++--
 ...doPersistenceCapableAnnotationFacetFactory.java |   3 +-
 .../JdoPersistenceCapableFacetAbstract.java        |  13 ++-
 .../JdoPersistenceCapableFacetImpl.java            |  13 ++-
 .../JdoNotPersistentAnnotationFacetFactory.java    |  10 +-
 .../JdoPrimaryKeyAnnotationFacetFactory.java       |  10 +-
 .../jdo/persistence/IsisPersistenceSessionJdo.java |   2 +
 .../adaptermanager/ObjectAdapterContext.java       |   7 +-
 .../ObjectAdapterContext_DependencyInjection.java  |   0
 .../ObjectAdapterContext_Factories.java            |   0
 ...ObjectAdapterContext_LifecycleEventSupport.java |   0
 .../ObjectAdapterContext_MementoSupport.java       |   0
 .../ObjectAdapterContext_NewIdentifier.java        |   0
 ...ctAdapterContext_ObjectAdapterByIdProvider.java |   0
 ...ObjectAdapterContext_ObjectAdapterProvider.java |   0
 .../ObjectAdapterContext_ObjectCreation.java       |   0
 .../ObjectAdapterContext_ServiceLookup.java        |   0
 .../adaptermanager/ObjectAdapterLegacy.java        |   0
 .../isis/jdo/jdosupport/IsisJdoSupportDN5.java     |   6 +-
 core/runtime-extensions/pom.xml                    |   9 --
 .../background/CommandExecutorServiceDefault.java  |  47 +++++----
 .../isis/runtime/services/i18n/po/PoAbstract.java  |   8 +-
 .../isis/runtime/services/i18n/po/PoDisabled.java  |   5 -
 .../isis/runtime/services/i18n/po/PoReader.java    |   5 -
 .../isis/runtime/services/i18n/po/PoWriter.java    |  13 +--
 .../services/i18n/po/TranslationServicePo.java     |  14 ++-
 core/runtime/pom.xml                               |   9 --
 .../isis/runtime/memento/ObjectAdapterMemento.java |   1 -
 .../ObjectAdapterMementoSupport_usingDefault.java  |   3 +-
 .../isis/runtime/system/context/IsisContext.java   |  57 +++--------
 .../system/persistence/PersistenceSession.java     |  10 --
 .../validate/ValidateDomainModel.java              |   2 +-
 .../IsisRestfulObjectsSessionFilter.java           |  27 +++---
 .../wicket/viewer/IsisWicketApplication.java       |   9 +-
 .../integration/wicket/WebRequestCycleForIsis.java |  48 +++++-----
 .../isis/viewer/wicket/ui/panels/FormAbstract.java |  58 ++++++------
 extensions/fixtures/pom.xml                        |   6 ++
 .../legacy/teardown/TeardownFixtureAbstract.java   |   3 +-
 .../legacy/teardown/TeardownFixtureAbstract2.java  |   3 +-
 extensions/legacy/pom.xml                          |   6 ++
 64 files changed, 390 insertions(+), 402 deletions(-)
 delete mode 100644 core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/validator/MetaModelDeficiencies.java
 rename core/{applib => plugins/jdo/common}/src/main/java/org/apache/isis/applib/services/jdosupport/IsisJdoSupport.java (100%)
 rename core/{applib => plugins/jdo/common}/src/main/java/org/apache/isis/applib/services/jdosupport/package-info.java (100%)
 copy core/{runtime-web/src/main/java/org/apache/isis/webapp/IsisWebAppUtils.java => plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/JdoNestedExceptionResolver.java} (60%)
 rename core/{runtime => plugins/jdo/common}/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java (97%)
 rename core/{runtime => plugins/jdo/common}/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_DependencyInjection.java (100%)
 rename core/{runtime => plugins/jdo/common}/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java (100%)
 rename core/{runtime => plugins/jdo/common}/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java (100%)
 rename core/{runtime => plugins/jdo/common}/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java (100%)
 rename core/{runtime => plugins/jdo/common}/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java (100%)
 rename core/{runtime => plugins/jdo/common}/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterByIdProvider.java (100%)
 rename core/{runtime => plugins/jdo/common}/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java (100%)
 rename core/{runtime => plugins/jdo/common}/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectCreation.java (100%)
 rename core/{runtime => plugins/jdo/common}/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java (100%)
 rename core/{runtime => plugins/jdo/common}/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterLegacy.java (100%)


[isis] 04/07: ISIS-2158: remove jdo-api from remaining in core

Posted by ah...@apache.org.
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

commit d541546b4d11663fc93c85d735dd689da61051aa
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 30 14:29:10 2019 +0100

    ISIS-2158: remove jdo-api from remaining in core
---
 core/applib/pom.xml             | 9 ---------
 core/config/pom.xml             | 9 ---------
 core/metamodel/pom.xml          | 9 ---------
 core/runtime-extensions/pom.xml | 9 ---------
 core/runtime/pom.xml            | 9 ---------
 5 files changed, 45 deletions(-)

diff --git a/core/applib/pom.xml b/core/applib/pom.xml
index 2ae2f76..0530bce 100644
--- a/core/applib/pom.xml
+++ b/core/applib/pom.xml
@@ -70,15 +70,6 @@
             <artifactId>isis-schema</artifactId>
         </dependency>
 		
-		<!-- JDO API (non transient, provided by plugin) -->
-<!--         <dependency> -->
-<!--             <groupId>javax.jdo</groupId> -->
-<!--             <artifactId>jdo-api</artifactId> -->
-<!--             <version>${jdo-api.version}</version> -->
-<!--             provided by plugins -->
-<!--             <scope>provided</scope> -->
-<!--         </dependency> -->
-
         <!-- HSQL-DB -->
         <dependency>
             <groupId>org.hsqldb</groupId>
diff --git a/core/config/pom.xml b/core/config/pom.xml
index 1dca638..ee899f8 100644
--- a/core/config/pom.xml
+++ b/core/config/pom.xml
@@ -64,15 +64,6 @@
             <artifactId>isis-applib</artifactId>
         </dependency>
         
-        <!-- [2039] only to discover persistence capable classes, not required if every 
-        	relevant entity is annotated with @DomainObject-->
-		<dependency>
-        	<groupId>javax.jdo</groupId>
-        	<artifactId>jdo-api</artifactId>
-        	<version>${jdo-api.version}</version>
-        	<scope>provided</scope>
-        </dependency>
-        
 		<!-- IDE support (optional) -->
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
diff --git a/core/metamodel/pom.xml b/core/metamodel/pom.xml
index 7059b95..7bb7387 100644
--- a/core/metamodel/pom.xml
+++ b/core/metamodel/pom.xml
@@ -55,15 +55,6 @@
 
     <dependencies>
     
-        <!-- JDO API (non transient, provided by plugin) -->
-<!--         <dependency> -->
-<!--             <groupId>javax.jdo</groupId> -->
-<!--             <artifactId>jdo-api</artifactId> -->
-<!--             <version>${jdo-api.version}</version> -->
-<!-- 			provided by plugins -->
-<!--             <scope>provided</scope> -->
-<!--         </dependency> -->
-    
         <dependency>
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-unittestsupport</artifactId>
diff --git a/core/runtime-extensions/pom.xml b/core/runtime-extensions/pom.xml
index 22e24e3..4baeb4f 100644
--- a/core/runtime-extensions/pom.xml
+++ b/core/runtime-extensions/pom.xml
@@ -56,15 +56,6 @@
 
     <dependencies>
 	
-        <!-- JDO API (non transient, provided by plugin) -->
-        <dependency>
-            <groupId>javax.jdo</groupId>
-            <artifactId>jdo-api</artifactId>
-            <version>${jdo-api.version}</version>
-            <!-- provided by plugins -->
-            <scope>provided</scope>
-        </dependency>
-        
         <dependency>
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-runtime</artifactId>
diff --git a/core/runtime/pom.xml b/core/runtime/pom.xml
index f2ab5ab..3ad37ee 100644
--- a/core/runtime/pom.xml
+++ b/core/runtime/pom.xml
@@ -62,15 +62,6 @@
 
     <dependencies>
 	
-	<!-- JDO API (non transient, provided by plugin) -->
-<!--         <dependency> -->
-<!--             <groupId>javax.jdo</groupId> -->
-<!--             <artifactId>jdo-api</artifactId> -->
-<!--             <version>${jdo-api.version}</version> -->
-<!--             provided by plugins -->
-<!--             <scope>provided</scope> -->
-<!--         </dependency> -->
-	
         <dependency>
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-applib</artifactId>


[isis] 02/07: ISIS-2158: removing jdo-api from 'applib' and 'metamodel'

Posted by ah...@apache.org.
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

commit f3cb3a594888497577568f03ac0bd5a85f2ac85f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 30 10:58:29 2019 +0100

    ISIS-2158: removing jdo-api from 'applib' and 'metamodel'
---
 core/metamodel/pom.xml                              | 14 +++++++-------
 .../apache/isis/metamodel/facets/Annotations.java   | 17 +++++++++++------
 .../apache/isis/metamodel/facets/FacetFactory.java  |  2 +-
 .../annotation/HomePageFacetAnnotationFactory.java  | 10 +++++++---
 .../metamodel/facets/jaxb/JaxbFacetFactory.java     | 21 +++++++++++++++------
 .../order/annotprop/MemberOrderFacetFactory.java    |  9 +++++++--
 .../param/DeriveFacetsPostProcessor.java            | 20 +++++++++++++++++---
 .../JdoNotPersistentAnnotationFacetFactory.java     | 10 ++++++++--
 .../JdoPrimaryKeyAnnotationFacetFactory.java        | 10 ++++++++--
 9 files changed, 81 insertions(+), 32 deletions(-)

diff --git a/core/metamodel/pom.xml b/core/metamodel/pom.xml
index b92cd14..7059b95 100644
--- a/core/metamodel/pom.xml
+++ b/core/metamodel/pom.xml
@@ -56,13 +56,13 @@
     <dependencies>
     
         <!-- JDO API (non transient, provided by plugin) -->
-        <dependency>
-            <groupId>javax.jdo</groupId>
-            <artifactId>jdo-api</artifactId>
-            <version>${jdo-api.version}</version>
-            <!-- provided by plugins -->
-            <scope>provided</scope>
-        </dependency>
+<!--         <dependency> -->
+<!--             <groupId>javax.jdo</groupId> -->
+<!--             <artifactId>jdo-api</artifactId> -->
+<!--             <version>${jdo-api.version}</version> -->
+<!-- 			provided by plugins -->
+<!--             <scope>provided</scope> -->
+<!--         </dependency> -->
     
         <dependency>
             <groupId>org.apache.isis.core</groupId>
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/Annotations.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/Annotations.java
index dbedafa..a3160ae 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/Annotations.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/Annotations.java
@@ -28,6 +28,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 import java.util.function.Consumer;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
@@ -45,6 +46,7 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.commons.internal.reflection._Annotations;
 import org.apache.isis.commons.internal.reflection._Reflect;
 import org.apache.isis.metamodel.commons.ThrowableExtensions;
@@ -208,7 +210,7 @@ public final class Annotations  {
      *     WARN: this method does NOT search for meta-annotations; use {@link #getAnnotations(Class, Class)} for that.
      * </p>
      */
-    public static <T extends Annotation> T getAnnotation(
+    private static <T extends Annotation> T getAnnotation(
             final Method method,
             final Class<T> annotationClass) {
         if (method == null) {
@@ -270,7 +272,7 @@ public final class Annotations  {
      * inherited methods up from the superclass.
      * @deprecated use {@link _Annotations} instead
      */
-    public static <T extends Annotation> List<T> getAnnotations(
+    private static <T extends Annotation> List<T> getAnnotations(
             final Method method,
             final Class<T> annotationClass) {
         if (method == null) {
@@ -527,8 +529,8 @@ public final class Annotations  {
 
     }
 
-    private static List<Class<?>> fieldAnnotationClasses = 
-            _Lists.of(
+    private static Set<Class<? extends Annotation>> fieldAnnotationClasses = 
+            _Sets.of(
                     Property.class,
                     PropertyLayout.class,
                     Collection.class,
@@ -539,11 +541,14 @@ public final class Annotations  {
                     javax.annotation.Nullable.class,
                     Title.class,
                     XmlJavaTypeAdapter.class,
-                    XmlTransient.class,
-                    javax.jdo.annotations.Column.class
+                    XmlTransient.class
+                    //javax.jdo.annotations.Column.class
                     );
 
     private static boolean shouldSearchForField(final Class<?> annotationClass) {
+        if(annotationClass.getName().equals("javax.jdo.annotations.Column")) {
+            return true;
+        }
         return fieldAnnotationClasses.contains(annotationClass);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/FacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/FacetFactory.java
index 5fb998a..b4afccc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/FacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/FacetFactory.java
@@ -235,7 +235,7 @@ public interface FacetFactory {
 
         
         /** 
-         * Annotation lookup on this context's method..
+         * Annotation lookup on this context's method. Also honors annotations on fields, if this method is a getter.
          * @since 2.0
          */
         public <A extends Annotation> Optional<A> synthesizeOnMethod(Class<A> annotationType) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
index 05b3b92..991b53b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
@@ -30,7 +30,6 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.metamodel.facetapi.FacetUtil;
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.facetapi.MetaModelRefiner;
-import org.apache.isis.metamodel.facets.Annotations;
 import org.apache.isis.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.metamodel.facets.FacetedMethod;
 import org.apache.isis.metamodel.facets.actions.homepage.HomePageFacet;
@@ -55,8 +54,13 @@ implements MetaModelRefiner {
 
     @Override
     public void process(ProcessMethodContext processMethodContext) {
-        final HomePage annotation = Annotations.getAnnotation(processMethodContext.getMethod(), HomePage.class);
-        if (annotation == null) {
+        final HomePage homepageAnnot = processMethodContext.synthesizeOnMethod(HomePage.class)
+                .orElse(null);
+        
+//        _Assert.assertEquals("expected same", homepageAnnot,
+//                Annotations.getAnnotation(processMethodContext.getMethod(), HomePage.class));
+        
+        if (homepageAnnot == null) {
             return;
         }
         final FacetedMethod facetHolder = processMethodContext.getFacetHolder();
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/jaxb/JaxbFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/jaxb/JaxbFacetFactory.java
index 664c75a..77d59eb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/jaxb/JaxbFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/jaxb/JaxbFacetFactory.java
@@ -20,7 +20,6 @@
 package org.apache.isis.metamodel.facets.jaxb;
 
 import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.List;
 import java.util.Optional;
@@ -115,9 +114,14 @@ implements MetaModelRefiner {
     }
 
     private void processXmlJavaTypeAdapter(final ProcessMethodContext processMethodContext, XmlAccessType accessType) {
-        final Method method = processMethodContext.getMethod();
-
-        final XmlJavaTypeAdapter annotation = Annotations.getAnnotation(method, XmlJavaTypeAdapter.class);
+        //val method = processMethodContext.getMethod();
+        
+        final XmlJavaTypeAdapter annotation = processMethodContext.synthesizeOnMethod(XmlJavaTypeAdapter.class)
+                .orElse(null);
+                
+//        _Assert.assertEquals("expected same", annotation,
+//                Annotations.getAnnotation(method, XmlJavaTypeAdapter.class));
+        
         if(annotation == null) {
             return;
         }
@@ -130,9 +134,14 @@ implements MetaModelRefiner {
     }
 
     private void processXmlTransient(final ProcessMethodContext processMethodContext, XmlAccessType accessType) {
-        final Method method = processMethodContext.getMethod();
+        //val method = processMethodContext.getMethod();
 
-        final XmlTransient annotation = Annotations.getAnnotation(method, XmlTransient.class);
+        final XmlTransient annotation = processMethodContext.synthesizeOnMethod(XmlTransient.class)
+                .orElse(null);
+                
+//        _Assert.assertEquals("expected same", annotation,
+//                Annotations.getAnnotation(method, XmlTransient.class));
+        
         if(annotation == null) {
             return;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/members/order/annotprop/MemberOrderFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/members/order/annotprop/MemberOrderFacetFactory.java
index f732501..f8ceaed 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/members/order/annotprop/MemberOrderFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/members/order/annotprop/MemberOrderFacetFactory.java
@@ -22,7 +22,6 @@ package org.apache.isis.metamodel.facets.members.order.annotprop;
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.metamodel.facetapi.FacetUtil;
 import org.apache.isis.metamodel.facetapi.FeatureType;
-import org.apache.isis.metamodel.facets.Annotations;
 import org.apache.isis.metamodel.facets.ContributeeMemberFacetFactory;
 import org.apache.isis.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.metamodel.facets.members.order.MemberOrderFacet;
@@ -48,7 +47,13 @@ public class MemberOrderFacetFactory extends FacetFactoryAbstract implements Con
     }
 
     private MemberOrderFacet createFromAnnotationIfPossible(final ProcessMethodContext processMethodContext) {
-        final MemberOrder annotation = Annotations.getAnnotation(processMethodContext.getMethod(), MemberOrder.class);
+        
+        final MemberOrder annotation = processMethodContext.synthesizeOnMethod(MemberOrder.class)
+                .orElse(null);
+                
+//        _Assert.assertEquals("expected same", annotation,
+//                Annotations.getAnnotation(processMethodContext.getMethod(), MemberOrder.class));
+        
         if (annotation != null) {
             return new MemberOrderFacetAnnotation(
                     annotation.name(),
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
index 83d1767..b85e903 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
@@ -30,11 +30,11 @@ import org.apache.isis.applib.events.domain.ActionDomainEvent;
 import org.apache.isis.applib.events.domain.CollectionDomainEvent;
 import org.apache.isis.applib.events.domain.PropertyDomainEvent;
 import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.reflection._Annotations;
 import org.apache.isis.metamodel.MetaModelContext;
 import org.apache.isis.metamodel.MetaModelContextAware;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetUtil;
-import org.apache.isis.metamodel.facets.Annotations;
 import org.apache.isis.metamodel.facets.FacetedMethod;
 import org.apache.isis.metamodel.facets.TypedHolder;
 import org.apache.isis.metamodel.facets.actions.action.invocation.ActionDomainEventFacet;
@@ -286,7 +286,14 @@ implements ObjectSpecificationPostProcessor, MetaModelContextAware {
             if(method != null) {
                 // this is basically a subset of the code that is in CollectionAnnotationFacetFactory,
                 // ignoring stuff which is deprecated for Isis v2
-                final Collection collectionAnnot = Annotations.getAnnotation(method, Collection.class);
+                
+                final Collection collectionAnnot = 
+                        _Annotations.synthesizeInherited(method, Collection.class)
+                        .orElse(null);
+                
+//                _Assert.assertEquals("expected same", collectionAnnot,
+//                        Annotations.getAnnotation(method, Collection.class));
+                
                 if(collectionAnnot != null) {
                     final Class<? extends CollectionDomainEvent<?, ?>> collectionDomainEventType =
                             CollectionAnnotationFacetFactory.defaultFromDomainObjectIfRequired(
@@ -325,7 +332,14 @@ implements ObjectSpecificationPostProcessor, MetaModelContextAware {
             if(method != null) {
                 // this is basically a subset of the code that is in CollectionAnnotationFacetFactory,
                 // ignoring stuff which is deprecated for Isis v2
-                final Property propertyAnnot = Annotations.getAnnotation(method, Property.class);
+                
+                final Property propertyAnnot = 
+                        _Annotations.synthesizeInherited(method, Property.class)
+                        .orElse(null);
+                
+//                _Assert.assertEquals("expected same", propertyAnnot,
+//                        Annotations.getAnnotation(method, Property.class));
+                
                 if(propertyAnnot != null) {
                     final Class<? extends PropertyDomainEvent<?, ?>> propertyDomainEventType =
                             PropertyAnnotationFacetFactory.defaultFromDomainObjectIfRequired(
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/notpersistent/JdoNotPersistentAnnotationFacetFactory.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/notpersistent/JdoNotPersistentAnnotationFacetFactory.java
index 5205c39..ff1ec48 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/notpersistent/JdoNotPersistentAnnotationFacetFactory.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/notpersistent/JdoNotPersistentAnnotationFacetFactory.java
@@ -23,7 +23,6 @@ import javax.jdo.annotations.NotPersistent;
 import org.apache.isis.metamodel.JdoMetamodelUtil;
 import org.apache.isis.metamodel.facetapi.FacetUtil;
 import org.apache.isis.metamodel.facetapi.FeatureType;
-import org.apache.isis.metamodel.facets.Annotations;
 import org.apache.isis.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.metamodel.facets.FacetedMethod;
 
@@ -42,8 +41,15 @@ public class JdoNotPersistentAnnotationFacetFactory extends FacetFactoryAbstract
         if(!JdoMetamodelUtil.isPersistenceEnhanced(cls)) {
             return;
         }
+        
+        //val method = processMethodContext.getMethod();
+
+        final NotPersistent annotation = processMethodContext.synthesizeOnMethod(NotPersistent.class)
+                .orElse(null);
+                
+//        _Assert.assertEquals("expected same", annotation,
+//                Annotations.getAnnotation(method, NotPersistent.class));
 
-        final NotPersistent annotation = Annotations.getAnnotation(processMethodContext.getMethod(), NotPersistent.class);
         if (annotation == null) {
             return;
         }
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/primarykey/JdoPrimaryKeyAnnotationFacetFactory.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/primarykey/JdoPrimaryKeyAnnotationFacetFactory.java
index 0de23a1..dc34eed 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/primarykey/JdoPrimaryKeyAnnotationFacetFactory.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/prop/primarykey/JdoPrimaryKeyAnnotationFacetFactory.java
@@ -22,7 +22,6 @@ import javax.jdo.annotations.PrimaryKey;
 
 import org.apache.isis.metamodel.JdoMetamodelUtil;
 import org.apache.isis.metamodel.facetapi.FeatureType;
-import org.apache.isis.metamodel.facets.Annotations;
 import org.apache.isis.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.metamodel.facets.FacetedMethod;
 
@@ -41,8 +40,15 @@ public class JdoPrimaryKeyAnnotationFacetFactory extends FacetFactoryAbstract {
         if(!JdoMetamodelUtil.isPersistenceEnhanced(cls)) {
             return;
         }
+        
+        //val method = processMethodContext.getMethod();
+
+        final PrimaryKey annotation = processMethodContext.synthesizeOnMethod(PrimaryKey.class)
+                .orElse(null);
+                
+//        _Assert.assertEquals("expected same on method=" + method , annotation,
+//                Annotations.getAnnotation(method, PrimaryKey.class));
 
-        final PrimaryKey annotation = Annotations.getAnnotation(processMethodContext.getMethod(), PrimaryKey.class);
         if (annotation == null) {
             return;
         }


[isis] 03/07: ISIS-2158: remove jdo specifica from PersistenceSession

Posted by ah...@apache.org.
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

commit b62c08aacba0127d93b55dcc5dc9ffde31907bcd
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 30 14:14:27 2019 +0100

    ISIS-2158: remove jdo specifica from PersistenceSession
---
 .../isis/jdo/persistence/IsisPersistenceSessionJdo.java    |  2 ++
 .../persistence/adaptermanager/ObjectAdapterContext.java   |  7 ++++---
 .../org/apache/isis/jdo/jdosupport/IsisJdoSupportDN5.java  |  6 +++---
 core/runtime/pom.xml                                       | 14 +++++++-------
 .../runtime/system/persistence/PersistenceSession.java     | 10 ----------
 5 files changed, 16 insertions(+), 23 deletions(-)

diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/persistence/IsisPersistenceSessionJdo.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/persistence/IsisPersistenceSessionJdo.java
index 20dedb4..11a232e 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/persistence/IsisPersistenceSessionJdo.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/persistence/IsisPersistenceSessionJdo.java
@@ -55,4 +55,6 @@ public interface IsisPersistenceSessionJdo extends PersistenceSession {
         return getJdoPersistenceManager().newQuery(cls, filter);
     }
     
+    javax.jdo.PersistenceManager getJdoPersistenceManager();
+    
 }
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index ac781ee..c6edd34 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -23,6 +23,7 @@ import java.util.Objects;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.commons.internal.assertions._Assert;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.jdo.persistence.IsisPersistenceSessionJdo;
 import org.apache.isis.metamodel.MetaModelContext;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.ObjectAdapterByIdProvider;
@@ -57,7 +58,7 @@ final public class ObjectAdapterContext {
     public static ObjectAdapterContext openContext(
             MetaModelContext mmc,
             AuthenticationSession authenticationSession, 
-            PersistenceSession persistenceSession) {
+            IsisPersistenceSessionJdo persistenceSession) {
         
         val objectAdapterContext = 
                 new ObjectAdapterContext(mmc, authenticationSession, persistenceSession);
@@ -65,7 +66,7 @@ final public class ObjectAdapterContext {
         return objectAdapterContext;
     }
 
-    private final PersistenceSession persistenceSession; 
+    private final IsisPersistenceSessionJdo persistenceSession; 
     @Getter private final SpecificationLoader specificationLoader;
     private final ObjectAdapterContext_ObjectAdapterProvider objectAdapterProviderMixin;
     private final ObjectAdapterContext_MementoSupport mementoSupportMixin;
@@ -80,7 +81,7 @@ final public class ObjectAdapterContext {
     private ObjectAdapterContext(
             MetaModelContext mmc,
             AuthenticationSession authenticationSession, 
-            PersistenceSession persistenceSession) {
+            IsisPersistenceSessionJdo persistenceSession) {
 
         val runtimeContext = new RuntimeContextBase(mmc) {};
 
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 d7456dc..081dbcf 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
@@ -41,10 +41,10 @@ import org.apache.isis.applib.FatalException;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.jdo.persistence.IsisPersistenceSessionJdo;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.ObjectPersistenceException;
 import org.apache.isis.runtime.system.context.IsisContext;
-import org.apache.isis.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.runtime.system.session.IsisSessionFactory;
 
 import static org.apache.isis.commons.internal.base._NullSafe.stream;
@@ -207,8 +207,8 @@ public class IsisJdoSupportDN5 implements IsisJdoSupport_v3_2 {
     @Inject IsisSessionFactory isisSessionFactory;
     @Inject ServiceInjector serviceInjector;
 
-    protected PersistenceSession getPersistenceSession() {
-        return IsisContext.getPersistenceSession().orElse(null);
+    protected IsisPersistenceSessionJdo getPersistenceSession() {
+        return (IsisPersistenceSessionJdo) IsisContext.getPersistenceSession().orElse(null);
     }
 
     @Override
diff --git a/core/runtime/pom.xml b/core/runtime/pom.xml
index 38d8535..f2ab5ab 100644
--- a/core/runtime/pom.xml
+++ b/core/runtime/pom.xml
@@ -63,13 +63,13 @@
     <dependencies>
 	
 	<!-- JDO API (non transient, provided by plugin) -->
-        <dependency>
-            <groupId>javax.jdo</groupId>
-            <artifactId>jdo-api</artifactId>
-            <version>${jdo-api.version}</version>
-            <!-- provided by plugins -->
-            <scope>provided</scope>
-        </dependency>
+<!--         <dependency> -->
+<!--             <groupId>javax.jdo</groupId> -->
+<!--             <artifactId>jdo-api</artifactId> -->
+<!--             <version>${jdo-api.version}</version> -->
+<!--             provided by plugins -->
+<!--             <scope>provided</scope> -->
+<!--         </dependency> -->
 	
         <dependency>
             <groupId>org.apache.isis.core</groupId>
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/PersistenceSession.java
index 7296252..af21d05 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/PersistenceSession.java
@@ -21,8 +21,6 @@ package org.apache.isis.runtime.system.persistence;
 import java.util.List;
 import java.util.Map;
 
-import javax.jdo.PersistenceManager;
-
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.services.xactn.TransactionService;
@@ -106,14 +104,6 @@ SessionScopedComponent {
     /**@since 2.0*/
     Map<RootOid, Object> fetchPersistentPojos(List<RootOid> rootOids);
 
-
-    // -------------------------------------------------------------------------------------------------
-    // -- JDO SPECIFIC
-    // -------------------------------------------------------------------------------------------------
-
-    PersistenceManager getJdoPersistenceManager();
-
-
     // -------------------------------------------------------------------------------------------------
     // -- API NOT STABLE YET - SUBJECT TO REFACTORING
     // -------------------------------------------------------------------------------------------------


[isis] 06/07: ISIS-2158: remove injection points from FormAbstract

Posted by ah...@apache.org.
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

commit 5fa4560184b371c7f7fcc21e41cf0808bea46a68
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 30 15:14:25 2019 +0100

    ISIS-2158: remove injection points from FormAbstract
---
 ...doPersistenceCapableAnnotationFacetFactory.java |  3 +-
 .../JdoPersistenceCapableFacetAbstract.java        | 13 ++++-
 .../JdoPersistenceCapableFacetImpl.java            | 13 +++--
 .../isis/runtime/system/context/IsisContext.java   |  2 +
 .../isis/viewer/wicket/ui/panels/FormAbstract.java | 58 +++++++++++-----------
 5 files changed, 53 insertions(+), 36 deletions(-)

diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
index 039f470..80c2812 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
@@ -71,6 +71,5 @@ implements ObjectSpecIdFacetFactory {
                 annotationTableAttribute, annotationIdentityType, processClassContext.getFacetHolder()));
         return;
     }
-
-
+    
 }
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java
index 3dd58cf..fc84358 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java
@@ -22,10 +22,12 @@ import java.util.Map;
 
 import javax.jdo.annotations.IdentityType;
 
+import org.apache.isis.jdo.persistence.IsisPersistenceSessionJdo;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.object.entity.EntityFacet;
+import org.apache.isis.runtime.system.persistence.PersistenceSession;
 
 
 public abstract class JdoPersistenceCapableFacetAbstract 
@@ -45,6 +47,7 @@ implements JdoPersistenceCapableFacet {
             final String tableOrTypeName,
             final IdentityType identityType,
             final FacetHolder holder) {
+        
         super(JdoPersistenceCapableFacetAbstract.type(), holder, Derivation.NOT_DERIVED);
         super.setFacetAliasType(EntityFacet.class);
         this.schema = schemaName;
@@ -61,16 +64,24 @@ implements JdoPersistenceCapableFacet {
     public String getSchema() {
         return schema;
     }
+    
     @Override
     public String getTable() {
         return table;
     }
 
-    @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+    @Override 
+    public void appendAttributesTo(final Map<String, Object> attributeMap) {
         super.appendAttributesTo(attributeMap);
         attributeMap.put("schema", schema);
         attributeMap.put("table", table);
         attributeMap.put("identityType", identityType);
     }
     
+    protected IsisPersistenceSessionJdo getPersistenceSessionJdo() {
+        return PersistenceSession.current(IsisPersistenceSessionJdo.class)
+                .getFirst()
+                .orElse(null);
+    }
+    
 }
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
index 4998121..13d0769 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
@@ -27,7 +27,6 @@ import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.metamodel.adapter.oid.Oid;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
-import org.apache.isis.runtime.system.context.IsisContext;
 
 import lombok.val;
 
@@ -47,7 +46,7 @@ public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAb
         
         //TODO simplify, spec is already loaded
         
-        val persistenceSession = IsisContext.getPersistenceSession().get();
+        val persistenceSession = super.getPersistenceSessionJdo();
         val adapter = persistenceSession.getObjectAdapterByIdProvider()
                 .adapterFor(Oid.Factory.persistentOf(spec.getSpecId(), identifier)); 
         
@@ -63,7 +62,7 @@ public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAb
             return "?";
         }
         
-        val persistenceSession = IsisContext.getPersistenceSession().get();
+        val persistenceSession = super.getPersistenceSessionJdo();
         val isRecognized = persistenceSession.isRecognized(pojo);
         if(isRecognized) {
             final String identifier = persistenceSession.identifierFor(pojo);
@@ -76,8 +75,14 @@ public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAb
 
     @Override
     public void persist(ObjectSpecification spec, Object pojo) {
-        // TODO Auto-generated method stub
+
+        if(pojo==null || !isPersistableType(pojo.getClass())) {
+            return; //noop
+        }
         
+        val persistenceSession = super.getPersistenceSessionJdo();
+        //TODO don't bypass domain logic !? 
+        persistenceSession.getJdoPersistenceManager().makePersistent(pojo);
     }
 
     // -- HELPER
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
index 9ffa7b9..841493b 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
@@ -86,11 +86,13 @@ public interface IsisContext {
      * TODO [2033] its unclear whether there is only one or multiple
      * @return framework's currently resolvable PersistenceSessions
      */
+    @Deprecated
     public static Optional<PersistenceSession> getPersistenceSession() {
         return PersistenceSession.current(PersistenceSession.class)
                 .getFirst();
     }
 
+    @Deprecated
     public static Function<RootOid, ObjectAdapter> rootOidToAdapter() {
         return rootOid -> {
             val ps = IsisContext.getPersistenceSession()
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java
index 92bcc70..bb4d7fd 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java
@@ -19,71 +19,71 @@
 
 package org.apache.isis.viewer.wicket.ui.panels;
 
-import javax.inject.Inject;
-
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.IModel;
 
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.metamodel.MetaModelContext;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.runtime.system.context.IsisContext;
-import org.apache.isis.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.security.authentication.AuthenticationSession;
+import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
 import org.apache.isis.webapp.context.IsisWebAppCommonContext;
 
-import lombok.Getter;
-
 public abstract class FormAbstract<T> extends Form<T>
 implements ComponentFactoryRegistryAccessor, PageClassRegistryAccessor {
 
     private static final long serialVersionUID = 1L;
 
+    private transient ComponentFactoryRegistry componentFactoryRegistry;
+    private transient PageClassRegistry pageClassRegistry;
+    private transient IsisWebAppCommonContext commonContext;
+    
     public FormAbstract(final String id) {
         super(id);
-        this.commonContext = IsisWebAppCommonContext.of(metaModelContext);
     }
 
     public FormAbstract(final String id, final IModel<T> model) {
         super(id, model);
-        this.commonContext = IsisWebAppCommonContext.of(metaModelContext);
     }
 
-    // ///////////////////////////////////////////////////////////////////
-    // Convenience
-    // ///////////////////////////////////////////////////////////////////
-
+    public IsisWebAppCommonContext getCommonContext() {
+        return commonContext = CommonContextUtils.computeIfAbsent(commonContext);
+    }
+    
     @Override
     public ComponentFactoryRegistry getComponentFactoryRegistry() {
-        return ((ComponentFactoryRegistryAccessor) getApplication()).getComponentFactoryRegistry();
+        if(componentFactoryRegistry==null) {
+            componentFactoryRegistry = ((ComponentFactoryRegistryAccessor) getApplication()).getComponentFactoryRegistry(); 
+        }
+        return componentFactoryRegistry;
     }
 
     @Override
     public PageClassRegistry getPageClassRegistry() {
-        return ((PageClassRegistryAccessor) getApplication()).getPageClassRegistry();
+        if(pageClassRegistry==null) {
+            pageClassRegistry = ((PageClassRegistryAccessor) getApplication()).getPageClassRegistry();
+        }
+        return pageClassRegistry;
     }
 
-    // ///////////////////////////////////////////////////////////////////
-    // Dependencies (from IsisContext)
-    // ///////////////////////////////////////////////////////////////////
-
-    protected  PersistenceSession getPersistenceSession() {
-        return IsisContext.getPersistenceSession().orElse(null);
+    protected SpecificationLoader getSpecificationLoader() {
+        return getCommonContext().getSpecificationLoader();
     }
 
-    protected  AuthenticationSession getAuthenticationSession() {
-        return commonContext.getAuthenticationSession();
+    protected ServiceRegistry getServiceRegistry() {
+        return getCommonContext().getServiceRegistry();
+    }
+    
+    protected TranslationService getTranslationService() {
+        return getCommonContext().getTranslationService();
+    }
+    
+    protected AuthenticationSession getAuthenticationSession() {
+        return getCommonContext().getAuthenticationSession();
     }
-
-    @Inject @Getter protected transient SpecificationLoader specificationLoader;
-    @Inject @Getter protected transient ServiceRegistry serviceRegistry;
-    @Inject @Getter protected transient TranslationService translationService;
-    @Inject private transient MetaModelContext metaModelContext;
-    @Getter protected final transient IsisWebAppCommonContext commonContext;
 
 }


[isis] 07/07: ISIS-2158: remove obsolete layer of abstraction: MetaModelDeficiencies

Posted by ah...@apache.org.
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

commit af84c1c15fe2d8e151618c93f0ab297a4be8c89d
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 30 15:47:41 2019 +0100

    ISIS-2158: remove obsolete layer of abstraction: MetaModelDeficiencies
    
    - with previous commits finally reinstates validation error handling
---
 .../validator/MetaModelDeficiencies.java           | 49 ----------------------
 .../validator/MetaModelInvalidException.java       |  7 +++-
 .../specloader/validator/ValidationFailures.java   | 33 ++++++++++-----
 .../isis/runtime/system/context/IsisContext.java   | 29 +++++--------
 .../validate/ValidateDomainModel.java              |  2 +-
 .../IsisRestfulObjectsSessionFilter.java           | 27 ++++++------
 .../wicket/viewer/IsisWicketApplication.java       |  9 ++--
 .../integration/wicket/WebRequestCycleForIsis.java | 48 +++++++++++----------
 8 files changed, 82 insertions(+), 122 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/validator/MetaModelDeficiencies.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/validator/MetaModelDeficiencies.java
deleted file mode 100644
index b4bd481..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/validator/MetaModelDeficiencies.java
+++ /dev/null
@@ -1,49 +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.metamodel.specloader.validator;
-
-import java.io.Serializable;
-import java.util.Collection;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@RequiredArgsConstructor(staticName="of")
-public class MetaModelDeficiencies implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @Getter private final Collection<String> validationErrors;
-
-    public String getValidationErrorsAsString() {
-        return concatenate(validationErrors);
-    }
-
-    // //////////////////////////////////////
-
-    private static String concatenate(Collection<String> messages) {
-        val buf = new StringBuilder();
-        int i=0;
-        for (val message : messages) {
-            buf.append(++i).append(": ").append(message).append("\n");
-        }
-        return buf.toString();
-    }
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/validator/MetaModelInvalidException.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/validator/MetaModelInvalidException.java
index 0a8b2dc..90e1dde 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/validator/MetaModelInvalidException.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/validator/MetaModelInvalidException.java
@@ -19,12 +19,15 @@
 
 package org.apache.isis.metamodel.specloader.validator;
 
+import java.util.Optional;
+
 public class MetaModelInvalidException extends IllegalStateException {
 
     private static final long serialVersionUID = 1L;
 
-    public MetaModelInvalidException(MetaModelDeficiencies metaModelDeficiencies) {
-        super(metaModelDeficiencies.getValidationErrorsAsString());
+    public MetaModelInvalidException(Optional<String> failuresAsLineNumberedString) {
+        // fails if failuresAsLineNumberedString is empty, which would indicate misuse
+        super(failuresAsLineNumberedString.get());  
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/validator/ValidationFailures.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/validator/ValidationFailures.java
index 8f26eb7..4e454cc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/validator/ValidationFailures.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/validator/ValidationFailures.java
@@ -18,9 +18,11 @@
  */
 package org.apache.isis.metamodel.specloader.validator;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
-import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -31,7 +33,6 @@ import lombok.val;
 
 public final class ValidationFailures implements Iterable<ValidationFailure> {
 
-    
     private final Set<ValidationFailure> failures = _Sets.newConcurrentHashSet();
 
     public void add(Identifier origin, String pattern, Object... arguments) {
@@ -53,12 +54,11 @@ public final class ValidationFailures implements Iterable<ValidationFailure> {
         return Collections.unmodifiableSet(failures);
     }
     
-    public List<String> getMessages() {
+    public ArrayList<String> getMessages() { // <-- ensure serializable
         val messages = failures.stream() // already sorted
         .map(ValidationFailure::getMessage)
-        .collect(Collectors.toList());
-        
-        return Collections.unmodifiableList(messages);
+        .collect(Collectors.toCollection(ArrayList::new));
+        return messages;
     }
 
     public int getNumberOfFailures() {
@@ -70,15 +70,26 @@ public final class ValidationFailures implements Iterable<ValidationFailure> {
         return getFailures().iterator();
     }
     
-    public boolean occurred() {
+    public boolean hasFailures() {
         return !failures.isEmpty();
     }
+    
+    public Optional<String> getAsLineNumberedString() {
+        if (!hasFailures()) {
+            return Optional.empty();
+        }
+        return Optional.of(toLineNumberedString(getMessages()));
+    }
+
+    // -- HELPER
 
-    public MetaModelDeficiencies getDeficienciesIfAny() {
-        if (!occurred()) {
-            return null;
+    private static String toLineNumberedString(Collection<String> messages) {
+        val buf = new StringBuilder();
+        int i=0;
+        for (val message : messages) {
+            buf.append(++i).append(": ").append(message).append("\n");
         }
-        return MetaModelDeficiencies.of(getMessages());
+        return buf.toString();
     }
 
 
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
index 841493b..b64d888 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
@@ -26,7 +26,6 @@ import java.util.function.Supplier;
 import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
-import org.apache.isis.metamodel.specloader.validator.MetaModelDeficiencies;
 import org.apache.isis.metamodel.specloader.validator.MetaModelInvalidException;
 import org.apache.isis.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.runtime.system.session.IsisSession;
@@ -42,14 +41,6 @@ import lombok.val;
 public interface IsisContext {
 
     /**
-     * Populated only if the meta-model was found to be invalid.
-     * @return null, if there is none
-     */
-    public static MetaModelDeficiencies getMetaModelDeficienciesIfAny() {
-        return _Context.getIfAny(MetaModelDeficiencies.class);
-    }
-
-    /**
      *
      * @return Isis's default class loader
      */
@@ -81,6 +72,17 @@ public interface IsisContext {
     public static Optional<IsisSession> getCurrentIsisSession() {
         return IsisSession.current();
     }
+    
+    /**
+     * @return framework's current AuthenticationSession (if any)
+     * @throws IllegalStateException - if IsisSessionFactory not resolvable
+     */
+    public static Optional<AuthenticationSession> getAuthenticationSession() {
+        return getCurrentIsisSession()
+                .map(IsisSession::getAuthenticationSession);
+    }
+    
+    // -- DEPRECATIONS
 
     /**
      * TODO [2033] its unclear whether there is only one or multiple
@@ -102,14 +104,5 @@ public interface IsisContext {
         }; 
     }
 
-    /**
-     * @return framework's current AuthenticationSession (if any)
-     * @throws IllegalStateException - if IsisSessionFactory not resolvable
-     */
-    public static Optional<AuthenticationSession> getAuthenticationSession() {
-        return getCurrentIsisSession()
-                .map(IsisSession::getAuthenticationSession);
-    }
-
 
 }
diff --git a/core/testsupport/integtestsupport/src/main/java/org/apache/isis/integtestsupport/validate/ValidateDomainModel.java b/core/testsupport/integtestsupport/src/main/java/org/apache/isis/integtestsupport/validate/ValidateDomainModel.java
index 0c43144..639d080 100644
--- a/core/testsupport/integtestsupport/src/main/java/org/apache/isis/integtestsupport/validate/ValidateDomainModel.java
+++ b/core/testsupport/integtestsupport/src/main/java/org/apache/isis/integtestsupport/validate/ValidateDomainModel.java
@@ -63,7 +63,7 @@ public class ValidateDomainModel implements Runnable {
             });
         }
 
-        if (validationFailures.occurred()) {
+        if (validationFailures.hasFailures()) {
             throwFailureException(
                     validationFailures.getNumberOfFailures() + " problems found.", 
                     validationFailures.getMessages());
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/IsisRestfulObjectsSessionFilter.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/IsisRestfulObjectsSessionFilter.java
index f5d6190..4076472 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/IsisRestfulObjectsSessionFilter.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/IsisRestfulObjectsSessionFilter.java
@@ -29,7 +29,6 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import javax.inject.Inject;
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -44,7 +43,8 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.factory.InstanceUtil;
 import org.apache.isis.config.SystemConstants;
 import org.apache.isis.metamodel.commons.StringExtensions;
-import org.apache.isis.runtime.system.context.IsisContext;
+import org.apache.isis.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.metamodel.specloader.validator.MetaModelInvalidException;
 import org.apache.isis.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.webapp.IsisWebAppUtils;
 import org.apache.isis.webapp.auth.AuthenticationSessionStrategy;
@@ -150,7 +150,8 @@ public class IsisRestfulObjectsSessionFilter implements Filter {
         return Pattern.compile(".*\\." + input);
     };
 
-    @Inject private IsisSessionFactory isisSessionFactory;
+    private IsisSessionFactory isisSessionFactory;
+    private SpecificationLoader specificationLoader;
     
     private List<String> passThruList = Collections.emptyList();
 
@@ -234,6 +235,8 @@ public class IsisRestfulObjectsSessionFilter implements Filter {
     private WhenNoSession whenNotAuthenticated;
     private String redirectToOnException;
     private Collection<Pattern> ignoreExtensions;
+
+
     
 
     // /////////////////////////////////////////////////////////////////
@@ -250,6 +253,7 @@ public class IsisRestfulObjectsSessionFilter implements Filter {
         
         val servletContext  = config.getServletContext();
         isisSessionFactory = IsisWebAppUtils.getManagedBean(IsisSessionFactory.class, servletContext);
+        specificationLoader = IsisWebAppUtils.getManagedBean(SpecificationLoader.class, servletContext);
     }
 
     /**
@@ -337,8 +341,9 @@ public class IsisRestfulObjectsSessionFilter implements Filter {
     public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
 
         requires(isisSessionFactory, "isisSessionFactory");
+        requires(specificationLoader, "specificationLoader");
         
-        ensureMetamodelIsValid();
+        ensureMetamodelIsValid(specificationLoader);
 
         val httpServletRequest = (HttpServletRequest) request;
         val httpServletResponse = (HttpServletResponse) response;
@@ -395,16 +400,10 @@ public class IsisRestfulObjectsSessionFilter implements Filter {
     }
 
 
-    private static void ensureMetamodelIsValid() {
-        val metaModelDeficiencies = IsisContext.getMetaModelDeficienciesIfAny();
-
-        if(metaModelDeficiencies != null) {
-            val validationErrors = metaModelDeficiencies.getValidationErrors();
-            val buf = new StringBuilder();
-            for (String validationError : validationErrors) {
-                buf.append(validationError).append("\n");
-            }
-            throw new IllegalStateException("Metamodel validation errors: \n" + buf.toString());
+    private static void ensureMetamodelIsValid(SpecificationLoader specificationLoader) {
+        val validationResult = specificationLoader.getValidationResult();
+        if(validationResult.hasFailures()) {
+            throw new MetaModelInvalidException(validationResult.getAsLineNumberedString());
         }
     }
 
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index ae5f974..391b436 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -71,9 +71,8 @@ import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
 import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.metamodel.MetaModelContext;
 import org.apache.isis.metamodel.spec.ManagedObject;
-import org.apache.isis.metamodel.specloader.validator.MetaModelDeficiencies;
+import org.apache.isis.metamodel.specloader.validator.ValidationFailures;
 import org.apache.isis.runtime.memento.ObjectAdapterMemento;
-import org.apache.isis.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettingsAccessor;
 import org.apache.isis.viewer.wicket.model.models.PageType;
@@ -283,9 +282,9 @@ IsisWebAppCommonContext.Provider {
             SharedResources sharedResources = getSharedResources();
 
             //XXX lombok issue, cannot use val when super is referenced in same method
-            MetaModelDeficiencies metaModelDeficiencies = IsisContext.getMetaModelDeficienciesIfAny();
-            if(metaModelDeficiencies != null) {
-                log(metaModelDeficiencies.getValidationErrors());
+            ValidationFailures validationResult = commonContext.getSpecificationLoader().getValidationResult();
+            if(validationResult.hasFailures()) {
+                log(validationResult.getMessages());
             }
 
             if(systemEnvironment.isPrototyping()) {
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
index 1fa88e8..c0023cf 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
@@ -58,6 +58,7 @@ import org.apache.isis.runtime.system.session.IsisSession;
 import org.apache.isis.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.security.authentication.AuthenticationSession;
 import org.apache.isis.security.authentication.MessageBroker;
+import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 import org.apache.isis.viewer.wicket.model.models.PageType;
 import org.apache.isis.viewer.wicket.ui.errors.ExceptionModel;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
@@ -85,7 +86,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
     
     private PageClassRegistry pageClassRegistry;
     private IsisWebAppCommonContext commonContext;
-
+    
     @Override
     public synchronized void onBeginRequest(RequestCycle requestCycle) {
 
@@ -97,10 +98,11 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
             return;
         }
 
-        val wicketSession = AuthenticatedWebSessionForIsis.get();
-        this.commonContext = wicketSession.getCommonContext();        
+        val commonContext = getCommonContext();
+        val authenticationSession = AuthenticatedWebSessionForIsis.get().getAuthenticationSession();
+        
+        //fails yet _Assert.assertEquals("expected same", authenticationSession, commonContext.getAuthenticationSession());
         
-        val authenticationSession = wicketSession.getAuthenticationSession();
         if (authenticationSession == null) {
             log.debug("onBeginRequest out - session was not opened (because no authenticationSession)");
             return;
@@ -123,17 +125,17 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
         log.debug("onRequestHandlerResolved in");
 
         if(handler instanceof RenderPageRequestHandler) {
-
-            val metaModelDeficiencies = IsisContext.getMetaModelDeficienciesIfAny();
-
-            if(metaModelDeficiencies != null) {
+            
+            val validationResult = getCommonContext().getSpecificationLoader().getValidationResult();
+            
+            if(validationResult.hasFailures()) {
                 RenderPageRequestHandler requestHandler = (RenderPageRequestHandler) handler;
                 final IRequestablePage nextPage = requestHandler.getPage();
                 if(nextPage instanceof ErrorPage || nextPage instanceof MmvErrorPage) {
                     // do nothing
                     return;
                 }
-                throw new MetaModelInvalidException(metaModelDeficiencies);
+                throw new MetaModelInvalidException(validationResult.getAsLineNumberedString());
             }
         }
 
@@ -202,11 +204,10 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
     public IRequestHandler onException(RequestCycle cycle, Exception ex) {
 
         log.debug("onException");
-
-        val metaModelDeficiencies = IsisContext.getMetaModelDeficienciesIfAny();
-        if(metaModelDeficiencies != null) {
-            val validationErrors = metaModelDeficiencies.getValidationErrors();
-            val mmvErrorPage = new MmvErrorPage(validationErrors);
+        
+        val validationResult = getCommonContext().getSpecificationLoader().getValidationResult();
+        if(validationResult.hasFailures()) {
+            val mmvErrorPage = new MmvErrorPage(validationResult.getMessages());
             return new RenderPageRequestHandler(new PageProvider(mmvErrorPage), RedirectPolicy.ALWAYS_REDIRECT);
         }
 
@@ -227,7 +228,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
 
 
             // handle recognized exceptions gracefully also
-            final Stream<ExceptionRecognizer> exceptionRecognizers = commonContext.getServiceRegistry()
+            final Stream<ExceptionRecognizer> exceptionRecognizers = getCommonContext().getServiceRegistry()
                     .select(ExceptionRecognizer.class)
                     .stream();
 
@@ -287,7 +288,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
         if(text == null) {
             return null;
         }
-        return commonContext.getTranslationService().translate(WebRequestCycleForIsis.class.getName(), text);
+        return getCommonContext().getTranslationService().translate(WebRequestCycleForIsis.class.getName(), text);
     }
 
     protected PageProvider errorPageProviderFor(Exception ex) {
@@ -309,21 +310,20 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
         exceptionRecognizers.add(pageExpiredExceptionRecognizer);
 
         if(inIsisSession()) {
-            commonContext.getServiceRegistry()
+            getCommonContext().getServiceRegistry()
             .select(ExceptionRecognizer.class)
             .forEach(exceptionRecognizers::add);
         } else {
-            val metaModelDeficiencies = IsisContext.getMetaModelDeficienciesIfAny();
-            if(metaModelDeficiencies != null) {
-                val validationErrors = metaModelDeficiencies.getValidationErrors();
-                return new MmvErrorPage(validationErrors);
+            val validationResult = getCommonContext().getSpecificationLoader().getValidationResult();
+            if(validationResult.hasFailures()) {
+                return new MmvErrorPage(validationResult.getMessages());
             }
             // not sure whether this can ever happen now...
             log.warn("Unable to obtain exceptionRecognizers (no session), "
                     + "will be treated as unrecognized exception", ex);
         }
         String recognizedMessageIfAny = new ExceptionRecognizerComposite(exceptionRecognizers).recognize(ex);
-        ExceptionModel exceptionModel = ExceptionModel.create(commonContext, recognizedMessageIfAny, ex);
+        ExceptionModel exceptionModel = ExceptionModel.create(getCommonContext(), recognizedMessageIfAny, ex);
 
         return isSignedIn() ? new ErrorPage(exceptionModel) : newSignInPage(exceptionModel);
     }
@@ -380,6 +380,10 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
     }
 
     // -- DEPENDENCIES
+    
+    public IsisWebAppCommonContext getCommonContext() {
+        return commonContext = CommonContextUtils.computeIfAbsent(commonContext);
+    }
 
     private boolean inIsisSession() {
         return IsisSession.currentOrElseNull()!=null;


[isis] 01/07: ISIS-2158: moving ObjectAdapterContext -> jdo-common

Posted by ah...@apache.org.
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

commit 7cdb3f4dff83bfbe0559dc138cb787edd192af6b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 30 08:37:53 2019 +0100

    ISIS-2158: moving ObjectAdapterContext -> jdo-common
---
 core/applib/pom.xml                                |  14 +--
 .../apache/isis/applib/annotation/Collection.java  |   5 +-
 .../apache/isis/applib/annotation/Property.java    |   5 +-
 .../exceprecog/ExceptionRecognizerForType.java     | 105 ++++++++++++++-------
 .../applib/services/metrics/MetricsService.java    |   1 -
 .../commons/internal/exceptions/_Exceptions.java   |  25 ++++-
 .../exceprecog/ExceptionRecognizerDocDefault.java  |   1 -
 .../specimpl/OneToManyAssociationDefault.java      |  14 +--
 .../applib/services/jdosupport/IsisJdoSupport.java |   0
 .../applib/services/jdosupport/package-info.java   |   0
 ...xceptionRecognizerForJDODataStoreException.java |   7 +-
 ...traintViolationForeignKeyNoActionException.java |   1 +
 ...yConstraintViolationUniqueOrIndexException.java |   1 +
 ...eption.java => JdoNestedExceptionResolver.java} |  29 ++++--
 .../adaptermanager/ObjectAdapterContext.java       |   0
 .../ObjectAdapterContext_DependencyInjection.java  |   0
 .../ObjectAdapterContext_Factories.java            |   0
 ...ObjectAdapterContext_LifecycleEventSupport.java |   0
 .../ObjectAdapterContext_MementoSupport.java       |   0
 .../ObjectAdapterContext_NewIdentifier.java        |   0
 ...ctAdapterContext_ObjectAdapterByIdProvider.java |   0
 ...ObjectAdapterContext_ObjectAdapterProvider.java |   0
 .../ObjectAdapterContext_ObjectCreation.java       |   0
 .../ObjectAdapterContext_ServiceLookup.java        |   0
 .../adaptermanager/ObjectAdapterLegacy.java        |   0
 .../background/CommandExecutorServiceDefault.java  |  47 +++++----
 .../isis/runtime/memento/ObjectAdapterMemento.java |   1 -
 .../ObjectAdapterMementoSupport_usingDefault.java  |   3 +-
 extensions/fixtures/pom.xml                        |   6 ++
 .../legacy/teardown/TeardownFixtureAbstract.java   |   3 +-
 .../legacy/teardown/TeardownFixtureAbstract2.java  |   3 +-
 extensions/legacy/pom.xml                          |   6 ++
 32 files changed, 172 insertions(+), 105 deletions(-)

diff --git a/core/applib/pom.xml b/core/applib/pom.xml
index 3caa879..2ae2f76 100644
--- a/core/applib/pom.xml
+++ b/core/applib/pom.xml
@@ -71,13 +71,13 @@
         </dependency>
 		
 		<!-- JDO API (non transient, provided by plugin) -->
-        <dependency>
-            <groupId>javax.jdo</groupId>
-            <artifactId>jdo-api</artifactId>
-            <version>${jdo-api.version}</version>
-            <!-- provided by plugins -->
-            <scope>provided</scope>
-        </dependency>
+<!--         <dependency> -->
+<!--             <groupId>javax.jdo</groupId> -->
+<!--             <artifactId>jdo-api</artifactId> -->
+<!--             <version>${jdo-api.version}</version> -->
+<!--             provided by plugins -->
+<!--             <scope>provided</scope> -->
+<!--         </dependency> -->
 
         <!-- HSQL-DB -->
         <dependency>
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java
index 793e444..fa8944a 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java
@@ -25,8 +25,6 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-import javax.jdo.annotations.NotPersistent;
-
 import org.apache.isis.applib.events.domain.CollectionDomainEvent;
 
 /**
@@ -93,7 +91,8 @@ public @interface Collection {
      * Indicates whether the collecion should be included or excluded from mementos.
      *
      * <p>
-     *     To ensure that the collection is actually not persisted in the objectstore, also annotate with the JDO annotation {@link NotPersistent}.
+     *     To ensure that the collection is actually not persisted in the objectstore, 
+     *     also annotate with the JDO annotation {@link javax.jdo.annotations.NotPersistent}.
      * </p>
      */
     MementoSerialization mementoSerialization() default MementoSerialization.NOT_SPECIFIED;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
index 22d3a7b..99e87fd 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
@@ -25,8 +25,6 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-import javax.jdo.annotations.NotPersistent;
-
 import org.apache.isis.applib.conmap.ContentMappingServiceForCommandDto;
 import org.apache.isis.applib.conmap.ContentMappingServiceForCommandsDto;
 import org.apache.isis.applib.events.domain.PropertyDomainEvent;
@@ -200,7 +198,8 @@ public @interface Property {
      * Indicates whether the property should be included or excluded from mementos.
      *
      * <p>
-     *     To ensure that the property is actually not persisted in the objectstore, also annotate with the JDO annotation {@link NotPersistent}.
+     *     To ensure that the property is actually not persisted in the objectstore, also annotate with the JDO annotation 
+     *     {@link javax.jdo.annotations.NotPersistent}.
      * </p>
      */
     MementoSerialization mementoSerialization() default MementoSerialization.NOT_SPECIFIED;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
index a36317c..7ace8f5 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
@@ -21,13 +21,17 @@ package org.apache.isis.applib.services.exceprecog;
 import java.util.List;
 import java.util.function.Function;
 import java.util.function.Predicate;
-
-import javax.jdo.JDODataStoreException;
+import java.util.stream.Stream;
 
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 
+import static org.apache.isis.commons.internal.exceptions._Exceptions.containsAnyOfTheseMessages;
+import static org.apache.isis.commons.internal.exceptions._Exceptions.getCausalChain;
+
+import lombok.val;
+
 /**
- * An specific implementation of {@link ExceptionRecognizer} that looks for an
+ * A specific implementation of {@link ExceptionRecognizer} that looks for an
  * exception of the type provided in the constructor
  * and, if found anywhere in the causal chain,
  * then returns a non-null message indicating that the exception has been recognized.
@@ -38,15 +42,36 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
  */
 public class ExceptionRecognizerForType extends ExceptionRecognizerAbstract {
 
-    protected final static Predicate<Throwable> ofTypeExcluding(final Class<? extends Throwable> exceptionType, final String... messages) {
-        return ofType(exceptionType).and(excluding(messages));
+    /**
+     * Introduced in support of eg. {@link javax.jdo.JDODataStoreException}
+     * @since 2.0
+     */
+    @FunctionalInterface
+    public static interface NestedExceptionResolver {
+        Stream<Throwable> streamNestedExceptionsOf(Throwable throwable); 
+        
+        public static final NestedExceptionResolver NOOP = __->Stream.empty();
+    }
+    
+    protected final static Predicate<Throwable> ofTypeExcluding(
+            final Class<? extends Throwable> exceptionType, 
+            final NestedExceptionResolver nestedExceptionResolver,
+            final String... messages) {
+        
+        return ofType(exceptionType).and(excluding(nestedExceptionResolver, messages));
     }
 
-    protected final static Predicate<Throwable> ofTypeIncluding(final Class<? extends Throwable> exceptionType, final String... messages) {
-        return ofType(exceptionType).and(including(messages));
+    protected final static Predicate<Throwable> ofTypeIncluding(
+            final Class<? extends Throwable> exceptionType,
+            final NestedExceptionResolver nestedExceptionResolver,
+            final String... messages) {
+        
+        return ofType(exceptionType).and(including(nestedExceptionResolver, messages));
     }
 
-    protected final static Predicate<Throwable> ofType(final Class<? extends Throwable> exceptionType) {
+    protected final static Predicate<Throwable> ofType(
+            final Class<? extends Throwable> exceptionType) {
+        
         return input->exceptionType.isAssignableFrom(input.getClass());
     }
 
@@ -58,31 +83,33 @@ public class ExceptionRecognizerForType extends ExceptionRecognizerAbstract {
      * <p>
      * Intended to prevent too eager matching of an overly general exception type.
      */
-    protected final static Predicate<Throwable> excluding(final String... messages) {
+    protected final static Predicate<Throwable> excluding(
+            final NestedExceptionResolver nestedExceptionResolver,
+            final String... messages) {
+        
         return input->{
-            final List<Throwable> causalChain = _Exceptions.getCausalChain(input);
-            for (String message : messages) {
-                for (Throwable throwable : causalChain) {
-                    final String throwableMessage = throwable.getMessage();
-                    if(throwableMessage != null && throwableMessage.contains(message)) {
-                        return false;
-                    }
-                    if(throwable instanceof JDODataStoreException) {
-                        final JDODataStoreException jdoDataStoreException = (JDODataStoreException) throwable;
-                        final Throwable[] nestedExceptions = jdoDataStoreException.getNestedExceptions();
-                        for (Throwable nestedException : nestedExceptions) {
-                            final String nestedThrowableMessage = nestedException.getMessage();
-                            if(nestedThrowableMessage != null && nestedThrowableMessage.contains(message)) {
-                                return false;
-                            }
-                        }
-                    }
+            final List<Throwable> causalChain = getCausalChain(input);
+            
+            for (Throwable throwable : causalChain) {
+                
+                if(containsAnyOfTheseMessages(throwable, messages)) {
+                    return false; 
+                }
+                
+                val isAnyNestedRecognized = nestedExceptionResolver.streamNestedExceptionsOf(throwable)
+                .anyMatch(nested->_Exceptions.containsAnyOfTheseMessages(throwable, messages));
+                
+                if(isAnyNestedRecognized) {
+                    return false;
                 }
+
             }
+            
             return true;
         };
 
     }
+    
 
     /**
      * A {@link Predicate} that {@link Predicate#apply(Object) applies} only if at least one of the message(s)
@@ -92,17 +119,27 @@ public class ExceptionRecognizerForType extends ExceptionRecognizerAbstract {
      * <p>
      * Intended to prevent more precise matching of a specific general exception type.
      */
-    protected final static Predicate<Throwable> including(final String... messages) {
+    protected final static Predicate<Throwable> including(
+            final NestedExceptionResolver nestedExceptionResolver,
+            final String... messages) {
+        
         return input->{
-            final List<Throwable> causalChain = _Exceptions.getCausalChain(input);
-            for (String message : messages) {
-                for (Throwable throwable : causalChain) {
-                    final String throwableMessage = throwable.getMessage();
-                    if(throwableMessage != null && throwableMessage.contains(message)) {
-                        return true;
-                    }
+            final List<Throwable> causalChain = getCausalChain(input);
+           
+            for (Throwable throwable : causalChain) {
+                if(containsAnyOfTheseMessages(throwable, messages)) {
+                    return true; 
+                }
+                
+                val isAnyNestedRecognized = nestedExceptionResolver.streamNestedExceptionsOf(throwable)
+                        .anyMatch(nested->_Exceptions.containsAnyOfTheseMessages(throwable, messages));
+                        
+                if(isAnyNestedRecognized) {
+                    return true;
                 }
+                
             }
+            
             return false;
         };
     }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java b/core/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java
index 4659460..d66966f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java
@@ -19,7 +19,6 @@
 package org.apache.isis.applib.services.metrics;
 
 import javax.enterprise.context.RequestScoped;
-import javax.jdo.listener.InstanceLifecycleEvent;
 
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.iactn.InteractionContext;
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
index 344772e..8598579 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
@@ -31,6 +31,8 @@ import java.util.stream.Stream;
 
 import javax.annotation.Nullable;
 
+import org.apache.isis.commons.internal.base._NullSafe;
+import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.functions._Functions;
 
@@ -263,6 +265,26 @@ public final class _Exceptions {
         }
         
     }
+    
+    // -- PREDICATES
+    
+    public static boolean containsAnyOfTheseMessages(@Nullable Throwable throwable, @Nullable String ... messages) {
+        if(throwable==null) {
+            return false;
+        }
+        val throwableMessage = throwable.getMessage();
+        if(throwableMessage == null || _NullSafe.isEmpty(messages)) {
+            return false;
+        }
+        for (String message : messages) {
+            if(_Strings.isNotEmpty(message) 
+                    && throwableMessage.contains(message)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
 
     // -- FLUENT EXCEPTION
 
@@ -374,7 +396,4 @@ public final class _Exceptions {
 
 
 
-
-
-
 }
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 4399def..6482c17 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
@@ -22,7 +22,6 @@ package org.apache.isis.metamodel.services.exceprecog;
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
-import javax.inject.Singleton;
 
 import org.springframework.stereotype.Service;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
index 4877563..8bb8619 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
@@ -165,18 +165,10 @@ extends ObjectAssociationAbstract implements OneToManyAssociation {
         }
         
         val objectManager = super.getObjectManager();
-        System.err.println("#### likely won't work");
-        return objectManager.adapt(collection);
         
-//        val objectIdentifier = ManagedObject._collectionOidIfAny(ownerAdapter).getIdentifier();
-//
-//        
-//        //val spec = objectManager.loadSpec(collection); 
-//        val objectLoadRequest = ObjectLoadRequest.ofParentedCollection(ownerAdapter, this);
-//        val collectionAdapter = objectManager.loadObject(objectLoadRequest);
-//         
-//        val newAdapter = getObjectAdapterProvider().adapterForCollection(collection, parentOid, this);
-//        return newAdapter.injectServices(getServiceInjector());
+        super.getServiceInjector().injectServicesInto(collection);
+        
+        return objectManager.adapt(collection);
     }
 
     @Override
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/jdosupport/IsisJdoSupport.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/applib/services/jdosupport/IsisJdoSupport.java
similarity index 100%
rename from core/applib/src/main/java/org/apache/isis/applib/services/jdosupport/IsisJdoSupport.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/applib/services/jdosupport/IsisJdoSupport.java
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/jdosupport/package-info.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/applib/services/jdosupport/package-info.java
similarity index 100%
rename from core/applib/src/main/java/org/apache/isis/applib/services/jdosupport/package-info.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/applib/services/jdosupport/package-info.java
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForJDODataStoreException.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForJDODataStoreException.java
index 9549f16..e3ee12d 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForJDODataStoreException.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForJDODataStoreException.java
@@ -24,9 +24,14 @@ public class ExceptionRecognizerForJDODataStoreException extends ExceptionRecogn
 
     public ExceptionRecognizerForJDODataStoreException() {
         super(Category.SERVER_ERROR,
-                ofTypeExcluding(javax.jdo.JDODataStoreException.class, "NOT NULL check constraint"),
+                ofTypeExcluding(
+                        javax.jdo.JDODataStoreException.class,
+                        JdoNestedExceptionResolver::streamNestedExceptionsOf,
+                        "NOT NULL check constraint"),
                 prefix("Unable to save changes.  " +
                         "Does similar data already exist, or has referenced data been deleted?"));
     }
+    
+
 
 }
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForJDODataStoreExceptionIntegrityConstraintViolationForeignKeyNoActionException.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForJDODataStoreExceptionIntegrityConstraintViolationForeignKeyNoActionException.java
index c749ca3..536bd17 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForJDODataStoreExceptionIntegrityConstraintViolationForeignKeyNoActionException.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForJDODataStoreExceptionIntegrityConstraintViolationForeignKeyNoActionException.java
@@ -29,6 +29,7 @@ extends ExceptionRecognizerForType {
         super(Category.CONSTRAINT_VIOLATION,
                 ofTypeIncluding(
                         JDODataStoreException.class,
+                        JdoNestedExceptionResolver::streamNestedExceptionsOf,
                         "integrity constraint violation: foreign key no action"),
                 prefix("Related data exists"));
     }
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForSQLIntegrityConstraintViolationUniqueOrIndexException.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForSQLIntegrityConstraintViolationUniqueOrIndexException.java
index cbf2af0..88750af 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForSQLIntegrityConstraintViolationUniqueOrIndexException.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForSQLIntegrityConstraintViolationUniqueOrIndexException.java
@@ -27,6 +27,7 @@ extends ExceptionRecognizerForType {
         super(Category.CONSTRAINT_VIOLATION,
                 ofTypeIncluding(
                         java.sql.SQLIntegrityConstraintViolationException.class,
+                        ExceptionRecognizerForType.NestedExceptionResolver.NOOP,
                         "unique constraint or index violation"),
                 prefix("Data already exists"));
     }
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForJDODataStoreExceptionIntegrityConstraintViolationForeignKeyNoActionException.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/JdoNestedExceptionResolver.java
similarity index 60%
copy from core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForJDODataStoreExceptionIntegrityConstraintViolationForeignKeyNoActionException.java
copy to core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/JdoNestedExceptionResolver.java
index c749ca3..6db40a3 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/ExceptionRecognizerForJDODataStoreExceptionIntegrityConstraintViolationForeignKeyNoActionException.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/exceprecog/JdoNestedExceptionResolver.java
@@ -18,19 +18,28 @@
  */
 package org.apache.isis.jdo.exceprecog;
 
+import java.util.stream.Stream;
+
 import javax.jdo.JDODataStoreException;
 
-import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerForType;
+import org.apache.isis.commons.internal.base._NullSafe;
 
-public class ExceptionRecognizerForJDODataStoreExceptionIntegrityConstraintViolationForeignKeyNoActionException
-extends ExceptionRecognizerForType {
+import lombok.val;
 
-    public ExceptionRecognizerForJDODataStoreExceptionIntegrityConstraintViolationForeignKeyNoActionException() {
-        super(Category.CONSTRAINT_VIOLATION,
-                ofTypeIncluding(
-                        JDODataStoreException.class,
-                        "integrity constraint violation: foreign key no action"),
-                prefix("Related data exists"));
-    }
+/**
+ * @since 2.0
+ */
+final class JdoNestedExceptionResolver {
 
+    static Stream<Throwable> streamNestedExceptionsOf(Throwable throwable) {
+        
+        if(throwable instanceof JDODataStoreException) {
+            val jdoDataStoreException = (JDODataStoreException) throwable;
+            return _NullSafe.stream(jdoDataStoreException.getNestedExceptions());
+            
+        }
+        return Stream.empty();
+        
+    }
+    
 }
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_DependencyInjection.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_DependencyInjection.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_DependencyInjection.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_DependencyInjection.java
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterByIdProvider.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterByIdProvider.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterByIdProvider.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterByIdProvider.java
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectCreation.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectCreation.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectCreation.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectCreation.java
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterLegacy.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterLegacy.java
similarity index 100%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterLegacy.java
rename to core/plugins/jdo/common/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterLegacy.java
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 36b14a4..443b5bf 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
@@ -40,9 +40,8 @@ import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.services.iactn.InteractionContext;
 import org.apache.isis.applib.services.sudo.SudoService;
 import org.apache.isis.applib.services.xactn.TransactionService;
-import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.collections._Arrays;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facets.actions.action.invocation.CommandUtil;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -54,7 +53,6 @@ import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.runtime.system.context.IsisContext;
 import org.apache.isis.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.runtime.system.persistence.adaptermanager.ObjectAdapterLegacy;
 import org.apache.isis.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.schema.cmd.v1.ActionDto;
 import org.apache.isis.schema.cmd.v1.CommandDto;
@@ -149,13 +147,13 @@ public class CommandExecutorServiceDefault implements CommandExecutorService {
 
                     for (OidDto targetOidDto : targetOidDtos) {
 
-                        final ObjectAdapter targetAdapter = adapterFor(targetOidDto);
+                        val targetAdapter = adapterFor(targetOidDto);
                         final ObjectAction objectAction = findObjectAction(targetAdapter, memberId);
 
                         // we pass 'null' for the mixedInAdapter; if this action _is_ a mixin then
                         // it will switch the targetAdapter to be the mixedInAdapter transparently
-                        final ObjectAdapter[] argAdapters = argAdaptersFor(actionDto);
-                        final ManagedObject resultAdapter = objectAction.execute(
+                        final ManagedObject[] argAdapters = argAdaptersFor(actionDto);
+                        val resultAdapter = objectAction.execute(
                                 targetAdapter, null, argAdapters, InteractionInitiatedBy.FRAMEWORK);
 
                         // flush any Isis PersistenceCommands pending
@@ -185,11 +183,11 @@ public class CommandExecutorServiceDefault implements CommandExecutorService {
                         final Bookmark bookmark = Bookmark.from(targetOidDto);
                         final Object targetObject = bookmarkService.lookup(bookmark, FieldResetPolicy.RESET);
 
-                        final ObjectAdapter targetAdapter = adapterFor(targetObject);
+                        val targetAdapter = adapterFor(targetObject);
 
                         final OneToOneAssociation property = findOneToOneAssociation(targetAdapter, memberId);
 
-                        final ObjectAdapter newValueAdapter = newValueAdapterFor(propertyDto);
+                        val newValueAdapter = newValueAdapterFor(propertyDto);
 
                         property.set(targetAdapter, newValueAdapter, InteractionInitiatedBy.FRAMEWORK);
 
@@ -232,7 +230,7 @@ public class CommandExecutorServiceDefault implements CommandExecutorService {
     // //////////////////////////////////////
 
     private static ObjectAction findObjectAction(
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final String actionId) throws RuntimeException {
 
         final ObjectSpecification specification = targetAdapter.getSpecification();
@@ -245,7 +243,7 @@ public class CommandExecutorServiceDefault implements CommandExecutorService {
     }
 
     private static OneToOneAssociation findOneToOneAssociation(
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final String propertyId) throws RuntimeException {
 
         final ObjectSpecification specification = targetAdapter.getSpecification();
@@ -257,7 +255,7 @@ public class CommandExecutorServiceDefault implements CommandExecutorService {
         return property;
     }
 
-    private ObjectAdapter newValueAdapterFor(final PropertyDto propertyDto) {
+    private ManagedObject newValueAdapterFor(final PropertyDto propertyDto) {
         final ValueWithTypeDto newValue = propertyDto.getNewValue();
         final Object arg = CommonDtoUtils.getValue(newValue);
         return adapterFor(arg);
@@ -291,17 +289,15 @@ public class CommandExecutorServiceDefault implements CommandExecutorService {
 
     }
 
-    private ObjectAdapter[] argAdaptersFor(final ActionDto actionDto) {
-        final List<ParamDto> params = paramDtosFrom(actionDto);
-        final List<ObjectAdapter> args = _Lists.newArrayList(
-                params.stream()
-                .map(paramDto -> {
-                    final Object arg = CommonDtoUtils.getValue(paramDto);
-                    return adapterFor(arg);
-                })
-                .collect(Collectors.toList())
-                );
-        return args.toArray(new ObjectAdapter[]{});
+    private ManagedObject[] argAdaptersFor(final ActionDto actionDto) {
+        
+        val paramDtos = paramDtosFrom(actionDto);
+        
+        return paramDtos
+                .stream()
+                .map(CommonDtoUtils::getValue)
+                .map(this::adapterFor)
+                .collect(_Arrays.toArray(ManagedObject.class, paramDtos.size()));
     }
 
     private static List<ParamDto> paramDtosFrom(final ActionDto actionDto) {
@@ -315,8 +311,11 @@ public class CommandExecutorServiceDefault implements CommandExecutorService {
         return Collections.emptyList();
     }
 
-    private ObjectAdapter adapterFor(final Object targetObject) {
-        return ObjectAdapterLegacy.__CommandExecutorServiceDefault.adapterFor(targetObject);
+    private ManagedObject adapterFor(final Object pojo) {
+        return ManagedObject.of(getSpecificationLoader()::loadSpecification, pojo);
+        
+        //legacy of
+        //return ObjectAdapterLegacy.__CommandExecutorServiceDefault.adapterFor(targetObject);
     }
 
     // //////////////////////////////////////
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java
index 25f29b8..3786f32 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java
@@ -31,7 +31,6 @@ import org.apache.isis.commons.collections.Cardinality;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.ioc.BeanSort;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecId;
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
index 598a973..5b3a7bf 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
@@ -27,7 +27,6 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.internal.ioc.BeanSort;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecId;
@@ -125,7 +124,7 @@ implements ObjectAdapterMementoSupport {
         }
         
         private PersistenceSession persistenceSession() {
-            return IsisContext.getPersistenceSession().get();
+            return IsisContext.getPersistenceSession().orElse(null);
         }
 
     }
diff --git a/extensions/fixtures/pom.xml b/extensions/fixtures/pom.xml
index ec1a4c4..63b88f8 100644
--- a/extensions/fixtures/pom.xml
+++ b/extensions/fixtures/pom.xml
@@ -43,6 +43,12 @@
 
 		<dependency>
 			<groupId>org.apache.isis.core</groupId>
+			<artifactId>isis-plugins-jdo-common</artifactId>
+			<scope>provided</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.isis.core</groupId>
 			<artifactId>isis-integtestsupport</artifactId>
 			<scope>provided</scope>
 		</dependency>
diff --git a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/teardown/TeardownFixtureAbstract.java b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/teardown/TeardownFixtureAbstract.java
index d1b76db..8dbf320 100644
--- a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/teardown/TeardownFixtureAbstract.java
+++ b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/teardown/TeardownFixtureAbstract.java
@@ -63,7 +63,6 @@ public abstract class TeardownFixtureAbstract extends FixtureScript {
 
     protected void postDeleteFrom(final Class<?> cls) {}
 
-    @Inject
-    private IsisJdoSupport isisJdoSupport;
+    @Inject private IsisJdoSupport isisJdoSupport;
 
 }
diff --git a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/teardown/TeardownFixtureAbstract2.java b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/teardown/TeardownFixtureAbstract2.java
index e1db35e..33a4cec 100644
--- a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/teardown/TeardownFixtureAbstract2.java
+++ b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/legacy/teardown/TeardownFixtureAbstract2.java
@@ -148,6 +148,5 @@ public abstract class TeardownFixtureAbstract2 extends TeardownFixtureAbstract {
     protected void postDeleteFrom(Class<?> cls) {
     }
 
-    @Inject
-    protected IsisJdoSupport isisJdoSupport;
+    @Inject protected IsisJdoSupport isisJdoSupport;
 }
diff --git a/extensions/legacy/pom.xml b/extensions/legacy/pom.xml
index f836bea..3001a01 100644
--- a/extensions/legacy/pom.xml
+++ b/extensions/legacy/pom.xml
@@ -57,6 +57,12 @@
 			<artifactId>isis-applib</artifactId>
 			<scope>compile</scope>
 		</dependency>
+		
+		<dependency>
+			<groupId>org.apache.isis.core</groupId>
+			<artifactId>isis-plugins-jdo-common</artifactId>
+			<scope>provided</scope>
+		</dependency>
 
 		<dependency>
 			<groupId>org.apache.isis.core</groupId>


[isis] 05/07: ISIS-2158: decouple PoWriter from IsisContext

Posted by ah...@apache.org.
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

commit 7648485a9b3ca819acecbf6c55acbc520d84d65b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 30 14:51:18 2019 +0100

    ISIS-2158: decouple PoWriter from IsisContext
---
 .../isis/runtime/services/i18n/po/PoAbstract.java  |  8 +++----
 .../isis/runtime/services/i18n/po/PoDisabled.java  |  5 -----
 .../isis/runtime/services/i18n/po/PoReader.java    |  5 -----
 .../isis/runtime/services/i18n/po/PoWriter.java    | 13 +----------
 .../services/i18n/po/TranslationServicePo.java     | 14 +++++-------
 .../isis/runtime/system/context/IsisContext.java   | 26 ----------------------
 6 files changed, 11 insertions(+), 60 deletions(-)

diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoAbstract.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoAbstract.java
index 6530609..92ccd71 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoAbstract.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoAbstract.java
@@ -31,15 +31,15 @@ abstract class PoAbstract {
         this.mode = mode;
     }
 
-
-    abstract void shutdown();
-
     abstract String translate(final String context, final String msgId);
-
     abstract String translate(final String context, final String msgId, final String msgIdPlural, int num);
 
     TranslationService.Mode getMode() {
         return mode;
     }
 
+    void logTranslations() {
+        // default: do nothing
+    }
+
 }
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoDisabled.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoDisabled.java
index 706eae8..2d202a7 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoDisabled.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoDisabled.java
@@ -27,11 +27,6 @@ class PoDisabled extends PoAbstract {
     }
 
     @Override
-    void shutdown() {
-        // nothing to do
-    }
-
-    @Override
     String translate(String context, String msgId) {
         return msgId;
     }
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoReader.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoReader.java
index 4e06008..bec4f5c 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoReader.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoReader.java
@@ -91,11 +91,6 @@ class PoReader extends PoAbstract {
     }
 
     @Override
-    void shutdown() {
-    }
-
-
-    @Override
     public String translate(final String context, final String msgId) {
         if(translationsResolver == null) {
             // already logged as WARN (in constructor) if null.
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoWriter.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoWriter.java
index ddb7b00..c5c33a1 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoWriter.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/i18n/po/PoWriter.java
@@ -26,7 +26,6 @@ import org.joda.time.LocalDateTime;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.collections._Sets;
-import org.apache.isis.runtime.system.context.IsisContext;
 
 import lombok.extern.log4j.Log4j2;
 
@@ -46,18 +45,8 @@ class PoWriter extends PoAbstract {
         super(translationServicePo, TranslationService.Mode.WRITE);
     }
 
-    // -- shutdown
-
     @Override
-    void shutdown() {
-        if(IsisContext.getMetaModelDeficienciesIfAny() != null) {
-            // suppress logging translations
-            return;
-        }
-        logTranslations();
-    }
-
-    private void logTranslations() {
+    void logTranslations() {
         final StringBuilder buf = new StringBuilder();
 
         buf.append("\n");
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 4942519..e5b8188 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
@@ -30,10 +30,8 @@ import org.apache.isis.applib.services.i18n.TranslationsResolver;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Lazy;
-import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
 import org.apache.isis.config.IsisConfiguration;
-import org.apache.isis.runtime.system.context.IsisContext;
 
 @Service
 public class TranslationServicePo implements TranslationService {
@@ -50,9 +48,6 @@ public class TranslationServicePo implements TranslationService {
 
     // -- init, shutdown
 
-    @Inject
-    IsisConfiguration configuration;
-
     @PostConstruct
     public void init() {
 
@@ -86,12 +81,14 @@ public class TranslationServicePo implements TranslationService {
     }
 
     protected boolean isPrototypeOrTest() {
-        return isisSystemEnvironment.isPrototyping();
+        return systemEnvironment.isPrototyping() || systemEnvironment.isUnitTesting();
     }
 
     @PreDestroy
     public void shutdown() {
-        po.shutdown();
+        if(systemEnvironment.isPrototyping() && !systemEnvironment.isUnitTesting()) {
+            po.logTranslations();  
+        }
     }
 
     @Override
@@ -161,8 +158,9 @@ public class TranslationServicePo implements TranslationService {
 
     // -- DEPENDENCIES
 
-    @Inject private IsisSystemEnvironment isisSystemEnvironment;
+    @Inject private IsisSystemEnvironment systemEnvironment;
     @Inject private ServiceRegistry serviceRegistry;
+    @Inject private IsisConfiguration configuration;
     
     private _Lazy<Can<TranslationsResolver>> translationsResolvers = _Lazy.threadSafe(()->
     serviceRegistry.select(TranslationsResolver.class) );
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
index 16b47be..9ffa7b9 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
@@ -91,24 +91,6 @@ public interface IsisContext {
                 .getFirst();
     }
 
-    // likely to be extended to support multiple PlatformTransactionManagers, by selecting one by its name
-//    public static TransactionTemplate createTransactionTemplate() {
-//        val txMan = getSingletonElseFail(PlatformTransactionManager.class);
-//        return new TransactionTemplate(txMan);
-//    }
-
-//    /**
-//     * @return framework's ServiceRegistry
-//     * @throws NoSuchElementException - if ServiceRegistry not managed
-//     */
-//    public static ObjectAdapterProvider getObjectAdapterProvider() {
-//        return getSingletonElseFail(ObjectAdapterService.class);
-//    }
-
-//    public static Function<Object, ObjectAdapter> pojoToAdapter() {
-//        return getObjectAdapterProvider()::adapterFor;
-//    }
-
     public static Function<RootOid, ObjectAdapter> rootOidToAdapter() {
         return rootOid -> {
             val ps = IsisContext.getPersistenceSession()
@@ -127,13 +109,5 @@ public interface IsisContext {
                 .map(IsisSession::getAuthenticationSession);
     }
 
-//    public static AuthenticationManager getAuthenticationManager() {
-//        return getSingletonElseFail(AuthenticationManager.class);
-//    }
-//
-//    public static AuthorizationManager getAuthorizationManager() {
-//        return getSingletonElseFail(AuthorizationManager.class);
-//    }
-
 
 }