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 2021/12/04 06:32:17 UTC
[isis] branch master updated: ISIS-2903: Xray: associate logs with actual current thread nodes
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 24bf32b ISIS-2903: Xray: associate logs with actual current thread nodes
24bf32b is described below
commit 24bf32bc872fefdb02e8cb0b16f564b40c0c161a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Dec 4 07:32:03 2021 +0100
ISIS-2903: Xray: associate logs with actual current thread nodes
---
.../org/apache/isis/commons/internal/debug/_Xray.java | 8 ++++++--
.../isis/commons/internal/debug/xray/XrayModel.java | 15 +++++++++++++--
...creatableObjectFacetForXmlRootElementAnnotation.java | 3 ++-
.../java/org/apache/isis/core/runtime/events/_Xray.java | 11 ++++++-----
.../apache/isis/core/runtimeservices/session/_Xray.java | 9 +++++----
.../org/apache/isis/core/security/util/XrayUtil.java | 15 +++------------
.../isis/testdomain/viewers/jdo/wkt/TestAppJpaWkt.java | 3 ++-
.../publishing/PublishingTestFactoryAbstract.java | 4 ++--
.../isis/viewer/wicket/model/models/FormExecutor.java | 17 ++++++++++++++++-
.../ui/components/widgets/linkandlabel/ActionLink.java | 13 ++++++++++---
.../viewer/wicket/ui/panels/FormExecutorDefault.java | 13 +++++++++++++
11 files changed, 78 insertions(+), 33 deletions(-)
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/debug/_Xray.java b/commons/src/main/java/org/apache/isis/commons/internal/debug/_Xray.java
index 8759f87..f48930e 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/debug/_Xray.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/debug/_Xray.java
@@ -21,6 +21,7 @@ package org.apache.isis.commons.internal.debug;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.debug.xray.XrayDataModel;
+import org.apache.isis.commons.internal.debug.xray.XrayModel.ThreadMemento;
import org.apache.isis.commons.internal.debug.xray.XrayUi;
import lombok.val;
@@ -37,9 +38,12 @@ final class _Xray {
return;
}
+ val threadId = ThreadMemento.fromCurrentThread();
+
XrayUi.updateModel(model->{
- val root = model.getRootNode();
- val logModel = model.addDataNode(root,
+ val parentNode = model.getThreadNode(threadId);
+
+ val logModel = model.addDataNode(parentNode,
new XrayDataModel.LogEntry(
"debug-log",
_Strings.ellipsifyAtEnd(logMessage, 80, "..."),
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/XrayModel.java b/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/XrayModel.java
index 3477bcd..89810f5 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/XrayModel.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/XrayModel.java
@@ -22,13 +22,15 @@ import java.util.Optional;
import java.util.Stack;
import java.util.UUID;
-import org.springframework.lang.Nullable;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.MutableTreeNode;
+import org.springframework.lang.Nullable;
+
import org.apache.isis.commons.internal.base._Strings;
import lombok.Value;
+import lombok.val;
public interface XrayModel {
@@ -42,7 +44,7 @@ public interface XrayModel {
}
MutableTreeNode addContainerNode(MutableTreeNode parent, String name, String id);
- default MutableTreeNode addContainerNode(MutableTreeNode parent, String name) {
+ default MutableTreeNode addContainerNode(final MutableTreeNode parent, final String name) {
return addContainerNode(parent, name, UUID.randomUUID().toString());
}
@@ -86,6 +88,15 @@ public interface XrayModel {
private final String id;
private final String label;
private final String multilinelabel;
+
+ public static ThreadMemento fromCurrentThread() {
+ val ct = Thread.currentThread();
+ return ThreadMemento.of(
+ String.format("thread-%d-%s", ct.getId(), ct.getName()),
+ String.format("Thread-%d [%s]", ct.getId(), ct.getName()),
+ String.format("Thread-%d\n%s", ct.getId(), ct.getName()));
+ }
+
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java
index 1d2d468..75a7e42 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java
@@ -23,6 +23,7 @@ import java.util.UUID;
import org.apache.isis.applib.services.jaxb.JaxbService;
import org.apache.isis.applib.services.urlencoding.UrlEncodingService;
import org.apache.isis.commons.internal.debug._Debug;
+import org.apache.isis.commons.internal.debug.xray.XrayUi;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.HasPostConstructMethodCache;
@@ -50,7 +51,7 @@ extends RecreatableObjectFacetAbstract {
final String xml = getJaxbService().toXml(vmPojo);
final String encoded = getUrlEncodingService().encodeString(xml);
//FIXME[ISIS-2903] gets called about 4 times per same object, why?
- _Debug.onCondition(true, ()->{
+ _Debug.onCondition(XrayUi.isXrayEnabled(), ()->{
_Debug.log(100, "%s => %s",
super.getMetaModelContext().getInteractionProvider().getInteractionId()
.map(UUID::toString)
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/events/_Xray.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/events/_Xray.java
index be0ca98..35e6b0e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/events/_Xray.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/events/_Xray.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.runtime.events;
import org.apache.isis.applib.services.confview.ConfigurationViewService;
import org.apache.isis.applib.services.iactnlayer.InteractionLayerTracker;
import org.apache.isis.commons.internal.debug.xray.XrayDataModel;
+import org.apache.isis.commons.internal.debug.xray.XrayModel.ThreadMemento;
import org.apache.isis.commons.internal.debug.xray.XrayUi;
import org.apache.isis.core.security.util.XrayUtil;
@@ -28,7 +29,7 @@ import lombok.val;
final class _Xray {
- static void addConfiguration(ConfigurationViewService configurationService) {
+ static void addConfiguration(final ConfigurationViewService configurationService) {
XrayUi.updateModel(model->{
@@ -48,14 +49,14 @@ final class _Xray {
}
- public static void txBeforeCompletion(InteractionLayerTracker iaTracker, String txInfo) {
+ public static void txBeforeCompletion(final InteractionLayerTracker iaTracker, final String txInfo) {
// append to the current interaction if any
if(!XrayUi.isXrayEnabled()) {
return;
}
- val threadId = XrayUtil.currentThreadAsMemento();
+ val threadId = ThreadMemento.fromCurrentThread();
val sequenceId = XrayUtil.currentSequenceId(iaTracker)
.orElse(null);
@@ -84,14 +85,14 @@ final class _Xray {
}
- public static void txAfterCompletion(InteractionLayerTracker iaTracker, String txInfo) {
+ public static void txAfterCompletion(final InteractionLayerTracker iaTracker, final String txInfo) {
// append to the current interaction if any
if(!XrayUi.isXrayEnabled()) {
return;
}
- val threadId = XrayUtil.currentThreadAsMemento();
+ val threadId = ThreadMemento.fromCurrentThread();
val sequenceId = XrayUtil.currentSequenceId(iaTracker)
.orElse(null);
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/_Xray.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/_Xray.java
index 617a401..2972f5c 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/_Xray.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/_Xray.java
@@ -20,9 +20,10 @@ package org.apache.isis.core.runtimeservices.session;
import java.util.Stack;
+import org.apache.isis.applib.services.iactnlayer.InteractionLayer;
import org.apache.isis.commons.internal.debug.xray.XrayDataModel;
+import org.apache.isis.commons.internal.debug.xray.XrayModel.ThreadMemento;
import org.apache.isis.commons.internal.debug.xray.XrayUi;
-import org.apache.isis.applib.services.iactnlayer.InteractionLayer;
import org.apache.isis.core.security.util.XrayUtil;
import lombok.val;
@@ -30,7 +31,7 @@ import lombok.val;
//@Log4j2
final class _Xray {
- static void newInteractionLayer(Stack<InteractionLayer> afterEnter) {
+ static void newInteractionLayer(final Stack<InteractionLayer> afterEnter) {
if(!XrayUi.isXrayEnabled()) {
return;
@@ -41,7 +42,7 @@ final class _Xray {
val interactionId = afterEnter.peek().getInteraction().getInteractionId();
val executionContext = afterEnter.peek().getInteractionContext();
- val threadId = XrayUtil.currentThreadAsMemento();
+ val threadId = ThreadMemento.fromCurrentThread();
XrayUi.updateModel(model->{
@@ -85,7 +86,7 @@ final class _Xray {
}
- public static void closeInteractionLayer(Stack<InteractionLayer> beforeClose) {
+ public static void closeInteractionLayer(final Stack<InteractionLayer> beforeClose) {
if(!XrayUi.isXrayEnabled()) {
return;
diff --git a/core/security/src/main/java/org/apache/isis/core/security/util/XrayUtil.java b/core/security/src/main/java/org/apache/isis/core/security/util/XrayUtil.java
index b5b2f10..5bff5e4 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/util/XrayUtil.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/util/XrayUtil.java
@@ -24,9 +24,8 @@ import java.util.function.Consumer;
import org.apache.isis.applib.services.iactn.InteractionProvider;
import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.debug.xray.XrayModel.ThreadMemento;
-import org.apache.isis.commons.internal.debug.xray.graphics.SequenceDiagram;
import org.apache.isis.commons.internal.debug.xray.XrayUi;
+import org.apache.isis.commons.internal.debug.xray.graphics.SequenceDiagram;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import lombok.Builder;
@@ -49,15 +48,7 @@ public final class XrayUtil {
return String.format("seq-%s", uuid);
}
- public static ThreadMemento currentThreadAsMemento() {
- val ct = Thread.currentThread();
- return ThreadMemento.of(
- String.format("thread-%d-%s", ct.getId(), ct.getName()),
- String.format("Thread-%d [%s]", ct.getId(), ct.getName()),
- String.format("Thread-%d\n%s", ct.getId(), ct.getName()));
- }
-
- public static String nestedInteractionId(int authenticationStackSize) {
+ public static String nestedInteractionId(final int authenticationStackSize) {
return "ia-" + (authenticationStackSize-1);
}
@@ -92,7 +83,7 @@ public final class XrayUtil {
final @NonNull String caller;
final @NonNull Can<String> callees;
- public void submit(Consumer<SequenceDiagram> onSubmission) {
+ public void submit(final Consumer<SequenceDiagram> onSubmission) {
XrayUi.updateModel(model->{
model.lookupSequence(getSequenceId())
.ifPresent(sequence->onSubmission.accept(sequence.getData()));
diff --git a/regressiontests/stable-viewers-jpa/src/main/java/org/apache/isis/testdomain/viewers/jdo/wkt/TestAppJpaWkt.java b/regressiontests/stable-viewers-jpa/src/main/java/org/apache/isis/testdomain/viewers/jdo/wkt/TestAppJpaWkt.java
index e36714c..668dfbd 100644
--- a/regressiontests/stable-viewers-jpa/src/main/java/org/apache/isis/testdomain/viewers/jdo/wkt/TestAppJpaWkt.java
+++ b/regressiontests/stable-viewers-jpa/src/main/java/org/apache/isis/testdomain/viewers/jdo/wkt/TestAppJpaWkt.java
@@ -32,6 +32,7 @@ import org.apache.isis.applib.annotation.HomePage;
import org.apache.isis.applib.annotation.Nature;
import org.apache.isis.applib.annotation.ObjectSupport;
import org.apache.isis.applib.services.user.UserService;
+import org.apache.isis.commons.internal.debug.xray.XrayEnable;
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.testdomain.conf.Configuration_usingJpa;
import org.apache.isis.testdomain.conf.Configuration_usingWicket;
@@ -50,7 +51,7 @@ import org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
// UI (Wicket Viewer)
IsisModuleViewerWicketViewer.class,
- //XrayEnable.class // for debugging only
+ XrayEnable.class // for debugging only
})
public class TestAppJpaWkt extends SpringBootServletInitializer {
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/publishing/PublishingTestFactoryAbstract.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/publishing/PublishingTestFactoryAbstract.java
index 380b1bc..391bb37 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/publishing/PublishingTestFactoryAbstract.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/publishing/PublishingTestFactoryAbstract.java
@@ -43,8 +43,8 @@ import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.assertions._Assert;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.debug._Probe;
+import org.apache.isis.commons.internal.debug.xray.XrayModel.ThreadMemento;
import org.apache.isis.commons.internal.debug.xray.XrayUi;
-import org.apache.isis.core.security.util.XrayUtil;
import org.apache.isis.core.transaction.events.TransactionAfterCompletionEvent;
import org.apache.isis.core.transaction.events.TransactionBeforeCompletionEvent;
@@ -401,7 +401,7 @@ public abstract class PublishingTestFactoryAbstract {
private final void xrayAddTest(final String name) {
- val threadId = XrayUtil.currentThreadAsMemento();
+ val threadId = ThreadMemento.fromCurrentThread();
XrayUi.updateModel(model->{
model.addContainerNode(
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
index b9d116c..e6fbfb4 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
@@ -32,14 +32,29 @@ import org.apache.wicket.markup.html.form.Form;
public interface FormExecutor extends Serializable {
enum FormExecutionOutcome {
+
+ /**
+ * if invalid arguments or exception
+ */
FAILURE_SO_STAY_ON_PAGE,
+
+ /**
+ * redirect to result page or re-render all UI components
+ */
SUCCESS_SO_REDIRECT_TO_RESULT_PAGE,
+
+ /**
+ * do not trigger a full page re-render, when executing eg. a nested dialog
+ */
SUCCESS_IN_NESTED_CONTEXT_SO_STAY_ON_PAGE;
public boolean isFailure() { return this == FAILURE_SO_STAY_ON_PAGE; }
- public boolean isSuccess() { return this != FAILURE_SO_STAY_ON_PAGE; }
+ public boolean isSuccess() { return !isFailure(); }
public boolean isSuccessWithRedirect() { return this == SUCCESS_SO_REDIRECT_TO_RESULT_PAGE; }
public boolean isSuccessWithinNestedContext() { return this == SUCCESS_IN_NESTED_CONTEXT_SO_STAY_ON_PAGE; }
+
+ public boolean isRedirect() { return this == SUCCESS_SO_REDIRECT_TO_RESULT_PAGE; }
+
}
FormExecutionOutcome executeAndProcessResults(
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
index cac37f9..1f0ad4e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
@@ -28,8 +28,10 @@ import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.isis.commons.internal.debug._Debug;
import org.apache.isis.commons.internal.debug._Probe;
import org.apache.isis.commons.internal.debug._Probe.EntryPoint;
+import org.apache.isis.commons.internal.debug.xray.XrayUi;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.runtime.context.IsisAppCommonContext;
@@ -219,9 +221,6 @@ extends IndicatingAjaxLink<ManagedObject> {
val actionModel = this.getActionModel();
val page = this.getPage();
- // returns true - if redirecting to new page, or repainting all components.
- // returns false - if invalid args; if concurrency exception;
-
val outcome = FormExecutorDefault
.forAction(actionModel)
.executeAndProcessResults(page, null, null, actionModel);
@@ -240,6 +239,10 @@ extends IndicatingAjaxLink<ManagedObject> {
}
});
+ _Debug.onCondition(XrayUi.isXrayEnabled(), ()->{
+ _Debug.log(10, "nothing to do, outcome: %s", outcome);
+ });
+
// else nothing to do
//
@@ -249,6 +252,10 @@ extends IndicatingAjaxLink<ManagedObject> {
} else {
+ _Debug.onCondition(XrayUi.isXrayEnabled(), ()->{
+ _Debug.log(10, "render the target entity again, outcome: %s", outcome);
+ });
+
// render the target entity again
//
// (One way this can occur is if an event subscriber has a defect and throws an exception; in which case
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
index 28d0c62..01128f4 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
@@ -32,6 +32,8 @@ import org.apache.isis.applib.services.i18n.TranslationService;
import org.apache.isis.applib.services.message.MessageService;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.commons.internal.base._Either;
+import org.apache.isis.commons.internal.debug._Debug;
+import org.apache.isis.commons.internal.debug.xray.XrayUi;
import org.apache.isis.core.metamodel.spec.ManagedObjects.EntityUtil;
import org.apache.isis.core.runtime.context.IsisAppCommonContext;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
@@ -103,6 +105,13 @@ implements FormExecutor {
return FormExecutionOutcome.FAILURE_SO_STAY_ON_PAGE; // invalid args, stay on page
}
+ _Debug.onCondition(XrayUi.isXrayEnabled(), ()->{
+ _Debug.log(10, "execute %s ...", actionOrPropertyModel
+ .fold(
+ act->act.getFriendlyName(),
+ prop->prop.getFriendlyName()));
+ });
+
//
// the following line will (attempt to) invoke the action, and will in turn either:
//
@@ -135,6 +144,10 @@ implements FormExecutor {
resultAdapter);
}
+ _Debug.onCondition(XrayUi.isXrayEnabled(), ()->{
+ _Debug.log(10, "process result ...");
+ });
+
val resultResponse = actionOrPropertyModel.fold(
act->ActionResultResponseType
.determineAndInterpretResult(act, ajaxTarget, resultAdapter, act.snapshotArgs()),