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/03/27 07:09:44 UTC
[isis] branch master updated: ISIS-2573: x-ray: be more verbose on
publishing
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 8550963 ISIS-2573: x-ray: be more verbose on publishing
8550963 is described below
commit 855096338544ada7a25e10fec5410dbdf35a3bb2
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Mar 27 08:09:26 2021 +0100
ISIS-2573: x-ray: be more verbose on publishing
also allow seq. dia. individual connection styling
---
.../debug/xray/sequence/SequenceDiagram.java | 87 ++++++++++++++++++----
.../publish/CommandPublisherDefault.java | 26 ++++++-
.../publish/EntityChangesPublisherDefault.java | 17 ++++-
.../EntityPropertyChangePublisherDefault.java | 18 ++++-
.../publish/ExecutionPublisherDefault.java | 23 +++++-
.../isis/core/runtimeservices/publish/_Xray.java | 79 +++++++++++++++-----
.../publishing/jdo/JdoExecutionPublishingTest.java | 4 +-
7 files changed, 211 insertions(+), 43 deletions(-)
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/sequence/SequenceDiagram.java b/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/sequence/SequenceDiagram.java
index a7746bd..d3d598b 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/sequence/SequenceDiagram.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/sequence/SequenceDiagram.java
@@ -56,15 +56,15 @@ public class SequenceDiagram {
}
public void enter(final @NonNull String from, final @NonNull String to, String label) {
- val p0 = participantsById.computeIfAbsent(from, id->new Participant(aliases.getOrDefault(id, id)));
- val p1 = participantsById.computeIfAbsent(to, id->new Participant(aliases.getOrDefault(id, id)));
- connections.add(new Connection(connections.size(), p0, p1, label, false));
+ val p0 = participant(from);
+ val p1 = participant(to);
+ connections.add(newConnection(p0, p1, label, false));
}
public void exit(final @NonNull String from, final @NonNull String to, String label) {
- val p1 = participantsById.computeIfAbsent(to, id->new Participant(aliases.getOrDefault(id, id)));
- val p0 = participantsById.computeIfAbsent(from, id->new Participant(aliases.getOrDefault(id, id)));
- connections.add(new Connection(connections.size(), p0, p1, label, true));
+ val p1 = participant(to);
+ val p0 = participant(from);
+ connections.add(newConnection(p0, p1, label, true));
}
public void enter(String from, String to) {
@@ -76,22 +76,72 @@ public class SequenceDiagram {
}
public void activate(String participantId) {
- val participant = participantsById
- .computeIfAbsent(participantId, id->new Participant(aliases.getOrDefault(id, id)));
- val latestConnection = Can.ofCollection(connections).getLast().orElse(null);
+ val participant = participant(participantId);
+ val latestConnection = latestConnection();
lifelines.add(new Lifeline(participant, latestConnection));
}
public void deactivate(String participantId) {
- val participant = participantsById
- .computeIfAbsent(participantId, id->new Participant(aliases.getOrDefault(id, id)));
- val latestConnection = Can.ofCollection(connections).getLast().orElse(null);
+ val participant = participant(participantId);
+ val latestConnection = latestConnection();
Can.ofCollection(lifelines).reverse().stream()
.filter(lifeline->lifeline.getParticipant().equals(participant))
.findFirst()
.ifPresent(lifeline->lifeline.endAt = latestConnection);
}
+
+ // -- STYLE OVERRIDE
+
+ private Color connectionArrowColor;
+ private Color connectionLabelColor;
+
+ public void setConnectionArrowColor(Color connectionArrowColor) {
+ this.connectionArrowColor = connectionArrowColor;
+ }
+
+ public void setConnectionLabelColor(Color connectionLabelColor) {
+ this.connectionLabelColor = connectionLabelColor;
+ }
+
+ // -- HELPER
+
+ private Connection newConnection(
+ final Participant from,
+ final Participant to,
+ final String label,
+ final boolean dashedLine) {
+ return new Connection(
+ connections.size(),
+ from,
+ to,
+ label,
+ dashedLine,
+ getConnectionArrowColor(),
+ getConnectionLabelColor());
+ }
+
+ private Participant participant(String participantId) {
+ return participantsById
+ .computeIfAbsent(participantId, id->new Participant(aliases.getOrDefault(id, id)));
+ }
+
+ private Connection latestConnection() {
+ return Can.ofCollection(connections).getLast().orElse(null);
+ }
+
+ private Color getConnectionArrowColor() {
+ return connectionArrowColor!=null
+ ? connectionArrowColor
+ : CONNECTION_ARROW_COLOR;
+ }
+ private Color getConnectionLabelColor() {
+ return connectionLabelColor!=null
+ ? connectionLabelColor
+ : CONNECTION_LABEL_COLOR;
+ }
+
+
// -- RENDERING
private final static Color PARTICIPANT_BACKGROUND_COLOR = _Graphics.COLOR_LIGHTER_GREEN;
@@ -107,6 +157,8 @@ public class SequenceDiagram {
private final static Color LIFELINE_BACKGROUND_COLOR = Color.WHITE;
private final static int LIFELINE_WIDTH = 8;
+ private final static Color CONNECTION_ARROW_COLOR = _Graphics.COLOR_DARKER_RED;
+ private final static Color CONNECTION_LABEL_COLOR = Color.BLACK;
private final static int CONNECTION_MARGIN_V = 12;
private final static int CONNECTION_LABEL_PADDING_H = 8;
private final static int CONNECTION_LABEL_PADDING_V = 3;
@@ -121,6 +173,9 @@ public class SequenceDiagram {
final String label;
final boolean dashedLine;
+ final Color arrowColor;
+ final Color labelColor;
+
TextBlock textBlock;
int x_left;
@@ -325,6 +380,8 @@ public class SequenceDiagram {
lifelines.stream()
.forEach(ll->{
+ // lifeline box
+
g.setColor(LIFELINE_BACKGROUND_COLOR);
g.fillRect(ll.getX_left(), ll.getY_top(), ll.getWidth(), ll.getHeight());
@@ -339,7 +396,7 @@ public class SequenceDiagram {
// connection arrow
- g.setColor(_Graphics.COLOR_DARKER_RED);
+ g.setColor(c.getArrowColor());
g.setStroke(c.isDashedLine()
? _Graphics.STROKE_DASHED
@@ -352,12 +409,14 @@ public class SequenceDiagram {
// connection label
- g.setColor(Color.black);
+ g.setColor(c.getLabelColor());
c.getTextBlock().render(g);
});
}
+
+
}
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/CommandPublisherDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/CommandPublisherDefault.java
index 8491518..f61f63e 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/CommandPublisherDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/CommandPublisherDefault.java
@@ -20,6 +20,7 @@ package org.apache.isis.core.runtimeservices.publish;
import java.util.List;
+import javax.annotation.Nullable;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
@@ -65,10 +66,13 @@ public class CommandPublisherDefault implements CommandPublisher {
@Override
public void complete(final @NonNull Command command) {
- val canPublish = canPublish(command);
- val handle = _Xray.enterCommandPublishing(iaTracker, command, canPublish, enabledSubscribers);
+ val handle = _Xray.enterCommandPublishing(
+ iaTracker,
+ command,
+ enabledSubscribers,
+ ()->getCannotPublishReason(command));
- if(canPublish) {
+ if(canPublish(command)) {
log.debug("about to PUBLISH command: {} to {}", command, enabledSubscribers);
enabledSubscribers.forEach(subscriber -> subscriber.onCompleted(command));
}
@@ -84,6 +88,20 @@ public class CommandPublisherDefault implements CommandPublisher {
&& command.getLogicalMemberIdentifier() != null; // eg null when seed fixtures
}
-
+ // x-ray support
+ private @Nullable String getCannotPublishReason(final @NonNull Command command) {
+ return enabledSubscribers.isEmpty()
+ ? "no subscribers"
+ : !command.isPublishingEnabled()
+ ? String.format(
+ "publishing not enabled for given command\n%s",
+ command.toString())
+ : command.getLogicalMemberIdentifier() == null
+ ? String.format(
+ "no logical-member-id for given command\n%s",
+ command.toString())
+ : null;
+ }
+
}
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityChangesPublisherDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityChangesPublisherDefault.java
index 6deaed3..2870076 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityChangesPublisherDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityChangesPublisherDefault.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.runtimeservices.publish;
import java.util.List;
import java.util.Optional;
+import javax.annotation.Nullable;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
@@ -41,6 +42,7 @@ import org.apache.isis.core.interaction.session.InteractionTracker;
import org.apache.isis.core.transaction.changetracking.EntityChangesPublisher;
import org.apache.isis.core.transaction.changetracking.HasEnlistedEntityChanges;
+import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.val;
@@ -69,7 +71,11 @@ public class EntityChangesPublisherDefault implements EntityChangesPublisher {
public void publishChangingEntities(HasEnlistedEntityChanges hasEnlistedEntityChanges) {
val payload = getPayload(hasEnlistedEntityChanges);
- val handle = _Xray.enterEntityChangesPublishing(iaTracker, payload, enabledSubscribers);
+ val handle = _Xray.enterEntityChangesPublishing(
+ iaTracker,
+ payload,
+ enabledSubscribers,
+ ()->getCannotPublishReason(payload));
payload.ifPresent(entityChanges->{
for (val subscriber : enabledSubscribers) {
@@ -89,5 +95,14 @@ public class EntityChangesPublisherDefault implements EntityChangesPublisher {
clockService.getClock().javaSqlTimestamp(), // current time
userService.currentUserNameElseNobody()); // current user
}
+
+ // x-ray support
+ private @Nullable String getCannotPublishReason(final @NonNull Optional<EntityChanges> payload) {
+ return enabledSubscribers.isEmpty()
+ ? "no subscribers"
+ : !payload.isPresent()
+ ? "no changes had been enlisted"
+ : null;
+ }
}
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java
index 10c4cba..b5623cf 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java
@@ -20,6 +20,7 @@ package org.apache.isis.core.runtimeservices.publish;
import java.util.List;
+import javax.annotation.Nullable;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
@@ -42,6 +43,7 @@ import org.apache.isis.core.interaction.session.InteractionTracker;
import org.apache.isis.core.transaction.changetracking.EntityPropertyChangePublisher;
import org.apache.isis.core.transaction.changetracking.HasEnlistedEntityPropertyChanges;
+import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.val;
@@ -73,7 +75,12 @@ public class EntityPropertyChangePublisherDefault implements EntityPropertyChang
final HasEnlistedEntityPropertyChanges hasEnlistedEntityPropertyChanges) {
val payload = getPayload(hasEnlistedEntityPropertyChanges);
- val handle = _Xray.enterEntityPropertyChangePublishing(iaTracker, payload, enabledSubscribers);
+ val handle = _Xray.enterEntityPropertyChangePublishing(
+ iaTracker,
+ payload,
+ enabledSubscribers,
+ ()->getCannotPublishReason(payload)
+ );
payload.forEach(propertyChange->{
for (val subscriber : enabledSubscribers) {
@@ -103,5 +110,14 @@ public class EntityPropertyChangePublisherDefault implements EntityPropertyChang
currentUser,
currentTransactionId);
}
+
+ // x-ray support
+ private @Nullable String getCannotPublishReason(final @NonNull Can<EntityPropertyChange> payload) {
+ return enabledSubscribers.isEmpty()
+ ? "no subscribers"
+ : payload.isEmpty()
+ ? "no changes had been enlisted"
+ : null;
+ }
}
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/ExecutionPublisherDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/ExecutionPublisherDefault.java
index 652e3a3..01cb3c2 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/ExecutionPublisherDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/ExecutionPublisherDefault.java
@@ -23,6 +23,7 @@ import java.util.List;
import java.util.concurrent.atomic.LongAdder;
import java.util.function.Supplier;
+import javax.annotation.Nullable;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
@@ -90,10 +91,13 @@ implements ExecutionPublisher {
private void notifySubscribers(final Execution<?,?> execution) {
- val canPublish = canPublish();
- val handle = _Xray.enterExecutionPublishing(iaTracker, execution, canPublish, enabledSubscribers);
+ val handle = _Xray.enterExecutionPublishing(
+ iaTracker,
+ execution,
+ enabledSubscribers,
+ this::getCannotPublishReason);
- if(canPublish) {
+ if(canPublish()) {
for (val subscriber : enabledSubscribers) {
subscriber.onExecution(execution);
}
@@ -107,7 +111,18 @@ implements ExecutionPublisher {
private boolean canPublish() {
return enabledSubscribers.isNotEmpty()
- && suppressionRequestCounter.longValue() < 1L; }
+ && suppressionRequestCounter.longValue() < 1L;
+ }
+ // x-ray support
+ private @Nullable String getCannotPublishReason() {
+ return enabledSubscribers.isEmpty()
+ ? "no subscribers"
+ : suppressionRequestCounter.longValue() > 0L
+ ? String.format(
+ "suppressed for block of executable code\nsuppression request depth %d",
+ suppressionRequestCounter.longValue())
+ : null;
+ }
}
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/_Xray.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/_Xray.java
index 92f0399..b5bccde 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/_Xray.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/_Xray.java
@@ -18,7 +18,9 @@
*/
package org.apache.isis.core.runtimeservices.publish;
+import java.awt.Color;
import java.util.Optional;
+import java.util.function.Supplier;
import javax.annotation.Nullable;
@@ -46,16 +48,20 @@ final class _Xray {
static SequenceHandle enterCommandPublishing(
final @NonNull InteractionTracker iaTracker,
final @Nullable Command command,
- final boolean canPublish,
- final @NonNull Can<CommandSubscriber> enabledSubscribers) {
+ final @NonNull Can<CommandSubscriber> enabledSubscribers,
+ final @NonNull Supplier<String> cannotPublishReasonSupplier) {
if(!XrayUi.isXrayEnabled()) {
return null;
}
+ val cannotPublishReason = cannotPublishReasonSupplier.get();
+ val canPublish = cannotPublishReason==null;
val enteringLabel = canPublish
- ? String.format("publishing command to %d subscriber(s)", enabledSubscribers.size())
- : "not publishing command";
+ ? String.format("publishing command to %d subscriber(s):\n%s",
+ enabledSubscribers.size(),
+ command.toString())
+ : String.format("not publishing command:\n%s", cannotPublishReason);
val handleIfAny = XrayUtil.createSequenceHandle(iaTracker, "cmd-publisher");
handleIfAny.ifPresent(handle->{
@@ -64,6 +70,11 @@ final class _Xray {
sequenceData.alias("cmd-publisher", "Command-\nPublisher-\n(Default)");
+ if(!canPublish) {
+ sequenceData.setConnectionArrowColor(Color.GRAY);
+ sequenceData.setConnectionLabelColor(Color.GRAY);
+ }
+
val callee = handle.getCallees().getFirstOrFail();
sequenceData.enter(handle.getCaller(), callee, enteringLabel);
sequenceData.activate(callee);
@@ -79,17 +90,21 @@ final class _Xray {
public static SequenceHandle enterExecutionPublishing(
final @NonNull InteractionTracker iaTracker,
- final @Nullable Execution<?, ?> command,
- final boolean canPublish,
- final @NonNull Can<ExecutionSubscriber> enabledSubscribers) {
+ final @Nullable Execution<?, ?> execution,
+ final @NonNull Can<ExecutionSubscriber> enabledSubscribers,
+ final @NonNull Supplier<String> cannotPublishReasonSupplier) {
if(!XrayUi.isXrayEnabled()) {
return null;
}
- val enteringLabel = canPublish
- ? String.format("publishing execution to %d subscriber(s)", enabledSubscribers.size())
- : "not publishing execution";
+ val cannotPublishReason = cannotPublishReasonSupplier.get();
+ val canPublish = cannotPublishReason==null;
+ val enteringLabel = canPublish
+ ? String.format("publishing execution to %d subscriber(s):\n%s",
+ enabledSubscribers.size(),
+ execution.toString())
+ : String.format("not publishing execution:\n%s", cannotPublishReason);
val handleIfAny = XrayUtil.createSequenceHandle(iaTracker, "exec-publisher");
handleIfAny.ifPresent(handle->{
@@ -98,6 +113,11 @@ final class _Xray {
sequenceData.alias("exec-publisher", "Execution-\nPublisher-\n(Default)");
+ if(!canPublish) {
+ sequenceData.setConnectionArrowColor(Color.GRAY);
+ sequenceData.setConnectionLabelColor(Color.GRAY);
+ }
+
val callee = handle.getCallees().getFirstOrFail();
sequenceData.enter(handle.getCaller(), callee, enteringLabel);
sequenceData.activate(callee);
@@ -114,15 +134,20 @@ final class _Xray {
public static SequenceHandle enterEntityChangesPublishing(
final @NonNull InteractionTracker iaTracker,
final @NonNull Optional<EntityChanges> payload,
- final @NonNull Can<EntityChangesSubscriber> enabledSubscribers) {
+ final @NonNull Can<EntityChangesSubscriber> enabledSubscribers,
+ final @NonNull Supplier<String> cannotPublishReasonSupplier) {
if(!XrayUi.isXrayEnabled()) {
return null;
}
- val enteringLabel = payload.isPresent()
- ? String.format("publishing entity-changes to %d subscriber(s)", enabledSubscribers.size())
- : "not publishing entity-changes";
+ val cannotPublishReason = cannotPublishReasonSupplier.get();
+ val canPublish = cannotPublishReason==null;
+ val enteringLabel = canPublish
+ ? String.format("publishing entity-changes to %d subscriber(s):\n%s",
+ enabledSubscribers.size(),
+ payload.map(Object::toString).orElse("null"))
+ : String.format("not publishing entity-changes:\n%s", cannotPublishReason);
val handleIfAny = XrayUtil.createSequenceHandle(iaTracker, "ec-publisher");
handleIfAny.ifPresent(handle->{
@@ -131,6 +156,11 @@ final class _Xray {
sequenceData.alias("ec-publisher", "EntityChanges-\nPublisher-\n(Default)");
+ if(!canPublish) {
+ sequenceData.setConnectionArrowColor(Color.GRAY);
+ sequenceData.setConnectionLabelColor(Color.GRAY);
+ }
+
val callee = handle.getCallees().getFirstOrFail();
sequenceData.enter(handle.getCaller(), callee, enteringLabel);
sequenceData.activate(callee);
@@ -147,15 +177,20 @@ final class _Xray {
public static SequenceHandle enterEntityPropertyChangePublishing(
final @NonNull InteractionTracker iaTracker,
final @NonNull Can<EntityPropertyChange> payload,
- final @NonNull Can<EntityPropertyChangeSubscriber> enabledSubscribers) {
+ final @NonNull Can<EntityPropertyChangeSubscriber> enabledSubscribers,
+ final @NonNull Supplier<String> cannotPublishReasonSupplier) {
if(!XrayUi.isXrayEnabled()) {
return null;
}
- val enteringLabel = !payload.isEmpty()
- ? String.format("publishing entity-property-changes to %d subscriber(s)", enabledSubscribers.size())
- : "not publishing entity-property-changes";
+ val cannotPublishReason = cannotPublishReasonSupplier.get();
+ val canPublish = cannotPublishReason==null;
+ val enteringLabel = canPublish
+ ? String.format("publishing entity-property-changes to %d subscriber(s):\n%s",
+ enabledSubscribers.size(),
+ payload)
+ : String.format("not publishing entity-property-changes:\n%s", cannotPublishReason);
val handleIfAny = XrayUtil.createSequenceHandle(iaTracker, "epc-publisher");
handleIfAny.ifPresent(handle->{
@@ -164,6 +199,11 @@ final class _Xray {
sequenceData.alias("epc-publisher", "EntityProperty-\nChanges-Publisher-\n(Default)");
+ if(!canPublish) {
+ sequenceData.setConnectionArrowColor(Color.GRAY);
+ sequenceData.setConnectionLabelColor(Color.GRAY);
+ }
+
val callee = handle.getCallees().getFirstOrFail();
sequenceData.enter(handle.getCaller(), callee, enteringLabel);
sequenceData.activate(callee);
@@ -187,6 +227,9 @@ final class _Xray {
val callee = handle.getCallees().getFirstOrFail();
sequenceData.exit(callee, handle.getCaller());
sequenceData.deactivate(callee);
+
+ sequenceData.setConnectionArrowColor(null);
+ sequenceData.setConnectionLabelColor(null);
});
}
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/publishing/jdo/JdoExecutionPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/publishing/jdo/JdoExecutionPublishingTest.java
index 5bb1a17..7c53276 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/publishing/jdo/JdoExecutionPublishingTest.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/publishing/jdo/JdoExecutionPublishingTest.java
@@ -36,6 +36,7 @@ import org.apache.isis.applib.services.iactn.Execution;
import org.apache.isis.applib.services.iactn.Interaction;
import org.apache.isis.applib.services.iactn.PropertyEdit;
import org.apache.isis.commons.collections.Can;
+import org.apache.isis.commons.internal.debug.xray.XrayEnable;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.testdomain.applayer.ApplicationLayerTestFactory;
@@ -53,7 +54,8 @@ import lombok.val;
classes = {
Configuration_usingJdo.class,
Configuration_usingExecutionPublishing.class,
- ApplicationLayerTestFactory.class
+ ApplicationLayerTestFactory.class,
+ XrayEnable.class
},
properties = {
"logging.level.org.apache.isis.persistence.jdo.datanucleus5.persistence.IsisTransactionJdo=DEBUG",