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

danhaywood pushed a commit to branch CAUSEWAY-4042
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/CAUSEWAY-4042 by this push:
     new f0137b15c41 CAUSEWAY-4042 : further adjustments
f0137b15c41 is described below

commit f0137b15c4119a41351f10e522d1f25b242cfe2d
Author: Dan Haywood <[email protected]>
AuthorDate: Mon Jun 29 13:45:29 2026 +0100

    CAUSEWAY-4042 : further adjustments
---
 .../applib/dom/replay/ReplayableCommand.java       | 26 ++++++++++------------
 .../dom/replay/ReplayableCommandMappingTest.java   |  2 +-
 2 files changed, 13 insertions(+), 15 deletions(-)

diff --git 
a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.java
 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.java
index 6e1a93b9c7e..2529e962ea0 100644
--- 
a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.java
+++ 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.java
@@ -625,29 +625,27 @@ CommandDto commandDtoPossiblyRemappedForReplay(final 
CommandLogEntry commandLogE
     }
 
     private Try<Bookmark> tryReplay(final CommandDto commandDto) {
-        var tryTryResultBookmark = replayContext.transactionService()
-                .callTransactional(Propagation.REQUIRES_NEW, () -> 
tryReplayCaptureOutcome(commandDto)
-            );
-
-        // in any outcome case (OK or FAILED) the ReplayState may have 
changed, hence invalidate local cache
-        invalidateCachedRecord();
-
-        return tryTryResultBookmark.valueAsNullableElseFail();
-    }
-
-    private Try<Bookmark> tryReplayCaptureOutcome(CommandDto commandDto) {
-        return Try.call(() -> {
+        var tryResultBookmark = 
replayContext.transactionService().callTransactional(Propagation.REQUIRES_NEW, 
() -> {
                     final Bookmark actualResult = 
replayContext.commandExecutorService()
+                            // calls transactionService which uses its own try 
to potentially mark _this_ transaction for rollback.
                             
.executeCommand(InteractionContextPolicy.SWITCH_USER_AND_TIME, commandDto)
-                            // if we have a replay failure, this throws, which 
will roll back the surrounding transaction
+                            // if we have a replay failure, this throws, which 
will also roll back the surrounding transaction
                             .valueAsNullableElseFail();
                     onReplaySuccess(actualResult);
                     return actualResult;
                 })
                 .mapFailureToSuccess(ex -> {
-                    onReplayError(ex);
+                    // use a new transaction to record the failure.
+                    
replayContext.transactionService().runTransactional(Propagation.REQUIRES_NEW, 
() -> {
+                        onReplayError(ex);
+                    });
                     return null;
                 });
+
+        // in any outcome case (OK or FAILED) the ReplayState may have 
changed, hence invalidate local cache
+        invalidateCachedRecord();
+
+        return tryResultBookmark;
     }
 
     private void invalidateCachedRecord() {
diff --git 
a/extensions/core/commandlog/applib/src/test/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommandMappingTest.java
 
b/extensions/core/commandlog/applib/src/test/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommandMappingTest.java
index 65b4890d1ab..8a43ede8c7a 100644
--- 
a/extensions/core/commandlog/applib/src/test/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommandMappingTest.java
+++ 
b/extensions/core/commandlog/applib/src/test/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommandMappingTest.java
@@ -1040,7 +1040,7 @@ void 
does_not_notify_listener_when_actual_result_is_missing() {
         verify(listener, never()).onReplayResult(any(), any(), any());
     }
 
-    @Test @Disabled // TODO: CAUSEWAY-4042 ... reinstate?
+    @Test // @Disabled // TODO: CAUSEWAY-4042 ... reinstate?
     void does_not_notify_listener_when_replay_fails() throws Exception {
         UUID interactionId = UUID.randomUUID();
         CommandDto commandDto = new CommandDto();

Reply via email to