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/02/13 15:23:29 UTC

[isis] branch 2033-IoC updated: ISIS-2033: fixes provisioning after packages been renamed

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

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


The following commit(s) were added to refs/heads/2033-IoC by this push:
     new 294cfd4  ISIS-2033: fixes provisioning after packages been renamed
294cfd4 is described below

commit 294cfd48ed440d7a7bf29e113dcf74d69cfa68f6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Feb 13 16:23:22 2019 +0100

    ISIS-2033: fixes provisioning after packages been renamed
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2033
---
 .../org/apache/isis/config/AppConfigLocator.java   |  2 +
 ...ctionInvocationFacetForDomainEventAbstract.java |  4 ++
 .../action/invocation/PersistableTypeGuard.java    | 37 ++++++++++++++++
 .../isis/core/plugins/ioc/weld/WeldFactory.java    |  2 +
 .../viewer/wicket/model/models/ActionModel.java    | 13 ++++--
 .../viewer/wicket/model/models/EntityModel.java    | 20 ++++++++-
 .../viewer/wicket/model/models/ModelAbstract.java  |  7 ++-
 .../wicket/model/models/PersistableTypeGuard.java  | 51 ++++++++++++++++++++++
 .../actionresponse/ActionResultResponseType.java   | 17 ++++++--
 .../wicket/ui/panels/FormExecutorDefault.java      |  2 +
 10 files changed, 142 insertions(+), 13 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/config/AppConfigLocator.java b/core/config/src/main/java/org/apache/isis/config/AppConfigLocator.java
index ef07a51..b9d8ff0 100644
--- a/core/config/src/main/java/org/apache/isis/config/AppConfigLocator.java
+++ b/core/config/src/main/java/org/apache/isis/config/AppConfigLocator.java
@@ -84,6 +84,8 @@ public final class AppConfigLocator {
     		"org.apache.isis.applib.services.wrapper.WrapperFactory",
     		"org.apache.isis.core.metamodel.services.bookmarks.BookmarkServiceInternalDefault",
     		
+    		"org.apache.isis.jdo.datanucleus.persistence.IsisLegacyJdoContextHandler",
+    		
     		"org.apache.isis.applib.services.homepage.HomePageProviderService"
     		
     		
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index a14d108..60f0ca0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -147,6 +147,10 @@ implements ImperativeFacet {
         final ObjectAdapter executionResult = 
                 getPersistenceSessionServiceInternal().executeWithinTransaction(()->
                     doInvoke(owningAction, targetAdapter, mixedInAdapter, argumentAdapters, interactionInitiatedBy));
+        
+        System.out.println("!!!!!!!!!!! WTF");
+        PersistableTypeGuard.post(executionResult);
+        
         return executionResult;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/PersistableTypeGuard.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/PersistableTypeGuard.java
new file mode 100644
index 0000000..043a606
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/PersistableTypeGuard.java
@@ -0,0 +1,37 @@
+package org.apache.isis.core.metamodel.facets.actions.action.invocation;
+
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+
+@Deprecated //TODO [2033] debug only
+public class PersistableTypeGuard {
+	
+	private final static String[] persistableObjects = {
+			"SimpleObject",
+			"Customer"
+	};
+
+	public static void post(ObjectAdapter actualAdapter) {
+		
+		String debug = "" + actualAdapter.getOid();
+		
+		if(isPersistable(debug)) {
+            System.out.println("!!! [ObjectAdapter] "+debug);
+            if(debug.contains("!")) {
+                throw _Exceptions.unexpectedCodeReach();
+            }            
+        }
+		
+	}
+	
+	private static boolean isPersistable(String input) {
+		for(String x : persistableObjects) {
+			if(input.contains("."+x+":")) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+
+}
diff --git a/core/plugins/ioc-weld/src/main/java/org/apache/isis/core/plugins/ioc/weld/WeldFactory.java b/core/plugins/ioc-weld/src/main/java/org/apache/isis/core/plugins/ioc/weld/WeldFactory.java
index c322b75..b859e98 100644
--- a/core/plugins/ioc-weld/src/main/java/org/apache/isis/core/plugins/ioc/weld/WeldFactory.java
+++ b/core/plugins/ioc-weld/src/main/java/org/apache/isis/core/plugins/ioc/weld/WeldFactory.java
@@ -62,10 +62,12 @@ public class WeldFactory {
 	                    "org.apache.isis.core.wrapper.WrapperFactoryDefault",
 	                    "org.apache.isis.viewer.wicket.viewer.IsisWicketModule",
 	                    "org.apache.isis.applib.services.jdosupport.IsisJdoSupportDN5",
+	                    "org.apache.isis.jdo.datanucleus.persistence.IsisLegacyJdoContextHandler",
 	                    
 	                    "org.apache.wicket.cdi.AutoConversation",
 	                    "org.apache.isis.viewer.restfulobjects.rendering.RendererContext"
 	                    
+	                    
 	                    );
 	    
 	    stream(classes)
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index c94c0aa..ced001d 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -459,20 +459,25 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
 
         // if this action is a mixin, then it will fill in the details automatically.
         final ObjectAdapter mixedInAdapter = null;
+        
+        //FIXME [2033] creates wrong adapter type: 'attached' vs 'detached'
         final ObjectAdapter resultAdapter =
                 action.executeWithRuleChecking(
                         targetAdapter, mixedInAdapter, arguments,
                         InteractionInitiatedBy.USER,
                         WHERE_FOR_ACTION_INVOCATION);
 
-        final Stream<RoutingService> routingServices = getServicesInjector().streamServices(RoutingService.class);
-        final Object result = resultAdapter != null ? resultAdapter.getPojo() : null;
+        
+        PersistableTypeGuard.post(resultAdapter);
+        
+        final Stream<RoutingService> routingServices = getServiceRegistry().streamServices(RoutingService.class);
+        final Object resultPojo = resultAdapter != null ? resultAdapter.getPojo() : null;
         
         val pojoToAdapter = IsisContext.pojoToAdapter();
         
         return routingServices
-            .filter(routingService->routingService.canRoute(result))
-            .map(routingService->routingService.route(result))
+            .filter(routingService->routingService.canRoute(resultPojo))
+            .map(routingService->routingService.route(resultPojo))
             .filter(_NullSafe::isPresent)
             .map(pojoToAdapter)
             .filter(_NullSafe::isPresent)
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 96f9647..6d3c969 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.layout.component.CollectionLayoutData;
 import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.commons.internal.debug._Probe;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
@@ -36,6 +37,7 @@ import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolic
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
 import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
@@ -46,6 +48,8 @@ import org.apache.wicket.Component;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
+import lombok.val;
+
 /**
  * Backing model to represent a {@link ObjectAdapter}.
  *
@@ -324,8 +328,17 @@ implements ObjectAdapterModel, UiHintContainer {
      * when rendering after post-and-redirect.
      * @return
      */
-    @Deprecated //TODO [2033] remove
+    @Deprecated //TODO [2033] remove ?
     public ObjectAdapter load(ConcurrencyChecking concurrencyChecking) {
+    	
+    	if(concurrencyChecking==ConcurrencyChecking.CHECK && adapterMemento!=null) {
+    		val spec = IsisContext.getSpecificationLoader().lookupBySpecId(adapterMemento.getObjectSpecId());
+    		if(spec.isPersistenceCapable()) {
+        		val info = "adapterMemento '"+adapterMemento+"'";
+        		_Probe.warnNotImplementedYet("[2033] ConcurrencyChecking no longer supported!? "+info);    			
+    		}
+    	}
+    	
         return load();
     }
 
@@ -342,6 +355,9 @@ implements ObjectAdapterModel, UiHintContainer {
         if (adapterMemento == null) {
             return null;
         }
+        
+        PersistableTypeGuard.post(adapterMemento);
+        
         final ObjectAdapter objectAdapter = adapterMemento.getObjectAdapter();
         return objectAdapter;
     }
@@ -351,6 +367,7 @@ implements ObjectAdapterModel, UiHintContainer {
     public void setObject(final ObjectAdapter adapter) {
         super.setObject(adapter);
         adapterMemento = ObjectAdapterMemento.ofAdapter(adapter);
+        PersistableTypeGuard.post(adapterMemento);
     }
 
     public void setObjectMemento(final ObjectAdapterMemento memento) {
@@ -359,6 +376,7 @@ implements ObjectAdapterModel, UiHintContainer {
                 ? memento.getObjectAdapter()
                         : null);
         adapterMemento = memento;
+        PersistableTypeGuard.post(adapterMemento);
     }
 
 
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java
index 4b01bf9..d2f221d 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java
@@ -19,7 +19,7 @@
 
 package org.apache.isis.viewer.wicket.model.models;
 
-import org.apache.isis.applib.services.inject.ServiceInjector;
+import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.session.IsisSession;
@@ -58,9 +58,8 @@ public abstract class ModelAbstract<T> extends LoadableDetachableModel<T> {
         return IsisContext.getSpecificationLoader();
     }
     
-    protected ServiceInjector getServicesInjector() {
-        return IsisContext.getServiceInjector();
+    protected ServiceRegistry getServiceRegistry() {
+        return IsisContext.getServiceRegistry();
     }
 
-
 }
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/PersistableTypeGuard.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/PersistableTypeGuard.java
new file mode 100644
index 0000000..880feda
--- /dev/null
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/PersistableTypeGuard.java
@@ -0,0 +1,51 @@
+package org.apache.isis.viewer.wicket.model.models;
+
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
+
+@Deprecated //TODO [2033] debug only
+public class PersistableTypeGuard {
+	
+	private final static String[] persistableObjects = {
+			"SimpleObject",
+			"Customer"
+	};
+
+	public static void post(ObjectAdapterMemento adapterMemento) {
+		
+		String debug = "" + adapterMemento;
+		
+        if(isPersistable(debug)) {
+            System.out.println("!!! [ObjectAdapterMemento] "+debug);
+            if(debug.contains("!")) {
+                throw _Exceptions.unexpectedCodeReach();
+            }            
+        }
+		
+	}
+
+	public static void post(ObjectAdapter actualAdapter) {
+		
+		String debug = "" + actualAdapter.getOid();
+		
+		if(isPersistable(debug)) {
+            System.out.println("!!! [ObjectAdapter] "+debug);
+            if(debug.contains("!")) {
+                throw _Exceptions.unexpectedCodeReach();
+            }            
+        }
+		
+	}
+	
+	private static boolean isPersistable(String input) {
+		for(String x : persistableObjects) {
+			if(input.contains("."+x+":")) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+
+}
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
index 579b730..75425b0 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
@@ -32,6 +32,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
+import org.apache.isis.viewer.wicket.model.models.PersistableTypeGuard;
 import org.apache.isis.viewer.wicket.model.models.ValueModel;
 import org.apache.isis.viewer.wicket.model.models.VoidModel;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
@@ -47,7 +48,7 @@ public enum ActionResultResponseType {
     OBJECT {
         @Override
         public ActionResultResponse interpretResult(final ActionModel model, final AjaxRequestTarget target, final ObjectAdapter resultAdapter) {
-            final ObjectAdapter actualAdapter = determineActualAdapter(resultAdapter);
+            final ObjectAdapter actualAdapter = determineActualAdapter(resultAdapter); // intercepts collections
             return toEntityPage(model, actualAdapter, null);
         }
 
@@ -130,7 +131,7 @@ public enum ActionResultResponseType {
 
     private static ObjectAdapter determineActualAdapter(
             final ObjectAdapter resultAdapter) {
-    	
+
         if (resultAdapter.getSpecification().isNotCollection()) {
             return resultAdapter;
         } else {
@@ -139,11 +140,19 @@ public enum ActionResultResponseType {
             final Object pojo = pojoList.get(0);
             
             val pojoToAdapter = IsisContext.pojoToAdapter();
-            return pojoToAdapter.apply(pojo);
+            val actualAdapter = pojoToAdapter.apply(pojo);
+            
+            return actualAdapter;
         }
     }
 
-    private static ActionResultResponse toEntityPage(final ActionModel model, final ObjectAdapter actualAdapter, final ConcurrencyException exIfAny) {
+    private static ActionResultResponse toEntityPage(
+    		final ActionModel model, 
+    		final ObjectAdapter actualAdapter, 
+    		final ConcurrencyException exIfAny) {
+    	
+    	PersistableTypeGuard.post(actualAdapter);
+    	
         // this will not preserve the URL (because pageParameters are not copied over)
         // but trying to preserve them seems to cause the 302 redirect to be swallowed somehow
         final EntityPage entityPage =
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
index ed7cae8..7ac2464 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
@@ -53,6 +53,7 @@ import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.FormExecutor;
 import org.apache.isis.viewer.wicket.model.models.ParentEntityModelProvider;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.model.models.PersistableTypeGuard;
 import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.IsisBlobOrClobPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.errors.JGrowlUtil;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
@@ -146,6 +147,7 @@ implements FormExecutor {
             // (The DB exception might actually be thrown by the flush() that follows.
             //
             final ObjectAdapter resultAdapter = obtainResultAdapter();
+
             // flush any queued changes; any concurrency or violation exceptions will actually be thrown here
             IsisRequestCycle.onResultAdapterObtained();