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();