This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v4
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/v4 by this push:
new 661e39d6f4e CAUSEWAY-3897: adds temporary debug logging to the 2
unstable rest tests (RO)
661e39d6f4e is described below
commit 661e39d6f4e0f89c7424291d8e8d4e5141dec11e
Author: andi-huber <[email protected]>
AuthorDate: Mon Jul 7 09:00:35 2025 +0200
CAUSEWAY-3897: adds temporary debug logging to the 2 unstable rest tests
(RO)
- hope is to get some insight on the root cause
---
.../commons/internal/debug/_XrayEvent.java | 2 +-
.../transaction/TransactionServiceSpring.java | 24 ++++++++++++--------
.../scenarios/staff/Staff_hilevel_IntegTest.java | 26 ++++++++++++++++++++--
3 files changed, 40 insertions(+), 12 deletions(-)
diff --git
a/commons/src/main/java/org/apache/causeway/commons/internal/debug/_XrayEvent.java
b/commons/src/main/java/org/apache/causeway/commons/internal/debug/_XrayEvent.java
index adea4ab5bab..922bb845c6e 100644
---
a/commons/src/main/java/org/apache/causeway/commons/internal/debug/_XrayEvent.java
+++
b/commons/src/main/java/org/apache/causeway/commons/internal/debug/_XrayEvent.java
@@ -88,7 +88,7 @@ public void user(final String format, final Object...args) {
*/
void record(final int depthLimit, final _IconResource icon, final String
format, final Object...args) {
var stackTrace = _Exceptions.streamStackTrace()
- .skip(3)
+ .skip(4)
.filter(_XrayEvent::accept)
.collect(Can.toCan());
//.reverse();
diff --git
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/transaction/TransactionServiceSpring.java
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/transaction/TransactionServiceSpring.java
index a61a55e4e16..3027d3c7f02 100644
---
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/transaction/TransactionServiceSpring.java
+++
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/transaction/TransactionServiceSpring.java
@@ -20,6 +20,7 @@
import java.util.List;
import java.util.Optional;
+import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.concurrent.atomic.LongAdder;
@@ -54,6 +55,7 @@
import org.apache.causeway.commons.functional.Try;
import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.commons.internal.collections._Lists;
+import org.apache.causeway.commons.internal.debug._Debug;
import org.apache.causeway.commons.internal.debug._Probe;
import org.apache.causeway.commons.internal.exceptions._Exceptions;
import org.apache.causeway.core.interaction.session.CausewayInteraction;
@@ -116,21 +118,25 @@ public <T> Try<T> callTransactional(final
TransactionDefinition def, final Calla
Try<T> result = null;
+ var uuid = UUID.randomUUID();
+ _Debug.log("tx START %s (%d)
-----------------------------------------------------------", uuid,
def.getPropagationBehavior());
+
try {
TransactionStatus txStatus =
platformTransactionManager.getTransaction(def);
registerTransactionSynchronizations(txStatus);
result = Try.call(() -> {
- final T callResult = callable.call();
- if(!FlushMgmt.isAutoFlushSuppressed()) {
- // we flush here to ensure that the result
captures any exception, eg from a declarative constraint violation
- txStatus.flush();
- }
+ final T callResult = callable.call();
- return callResult;
- })
- .mapFailure(ex->translateExceptionIfPossible(ex,
platformTransactionManager));
+ if(!FlushMgmt.isAutoFlushSuppressed()) {
+ // we flush here to ensure that the result captures
any exception, eg from a declarative constraint violation
+ txStatus.flush();
+ }
+
+ return callResult;
+ })
+ .mapFailure(ex->translateExceptionIfPossible(ex,
platformTransactionManager));
if(result.isFailure()) {
// if this is a nested transaction, then the javadoc says it
will actually be just a call to
@@ -155,7 +161,7 @@ public <T> Try<T> callTransactional(final
TransactionDefinition def, final Calla
return Try.failure(translateExceptionIfPossible(ex,
platformTransactionManager));
}
-
+ _Debug.log("tx END %s
----------------------------------------------------------", uuid);
return result;
}
diff --git
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_hilevel_IntegTest.java
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_hilevel_IntegTest.java
index 916d49de9dd..ae7aed2fb9e 100644
---
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_hilevel_IntegTest.java
+++
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_hilevel_IntegTest.java
@@ -35,6 +35,7 @@
import org.apache.causeway.applib.services.bookmark.Bookmark;
import org.apache.causeway.applib.value.Blob;
import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
+import org.apache.causeway.commons.internal.debug._Debug;
import org.apache.causeway.commons.io.DataSource;
import org.apache.causeway.viewer.restfulobjects.test.domain.dom.Department;
import
org.apache.causeway.viewer.restfulobjects.test.scenarios.Abstract_IntegTest;
@@ -148,6 +149,8 @@ void createStaffMemberWithPhoto2() {
// given
final var staffName = "Fred Smith";
+ _Debug.log("PHASE 1
-----------------------------------------------------------");
+
final var bookmarkBeforeIfAny =
transactionService.callTransactional(Propagation.REQUIRED, () -> {
final var staffMember =
staffMemberRepository.findByName(staffName);
return bookmarkService.bookmarkFor(staffMember);
@@ -155,6 +158,8 @@ void createStaffMemberWithPhoto2() {
assertThat(bookmarkBeforeIfAny).isEmpty();
+ _Debug.log("PHASE 2
-----------------------------------------------------------");
+
// and given
final var departmentName = "Classics";
final var departmentBookmark =
transactionService.callTransactional(Propagation.REQUIRED, () -> {
@@ -162,6 +167,9 @@ void createStaffMemberWithPhoto2() {
return bookmarkService.bookmarkFor(staffMember).orElseThrow();
}).valueAsNonNullElseFail();
+
+ _Debug.log("PHASE 3
-----------------------------------------------------------");
+
// and given
final Blob photo = readFileAsBlob("StaffMember-photo-Bar.pdf");
final var requestBuilder =
restfulClient.request("services/university.dept.Staff/actions/createStaffMemberWithPhoto2/invoke");
@@ -174,6 +182,8 @@ void createStaffMemberWithPhoto2() {
Approvals.verify(args.getEntity(), jsonOptions());
+ _Debug.log("PHASE 4
-----------------------------------------------------------");
+
// when
var response = requestBuilder.post(args);
@@ -186,8 +196,10 @@ void createStaffMemberWithPhoto2() {
var entity = response.readEntity(String.class);
assertNotNull(entity);
+ _Debug.log("PHASE 5
-----------------------------------------------------------");
+
// and also object is created in database
- final var bookmarkAfterIfAny =
transactionService.callTransactional(Propagation.REQUIRES_NEW, () -> {
+ final var bookmarkAfterIfAny =
transactionService.callTransactional(Propagation.REQUIRED, () -> {
final var staffMember =
staffMemberRepository.findByName(staffName);
return bookmarkService.bookmarkFor(staffMember);
}).valueAsNonNullElseFail();
@@ -202,6 +214,8 @@ void createStaffMemberWithPhoto2_using_map() {
// given
final var staffName = "Fred Smith";
+ _Debug.log("PHASE 1
-----------------------------------------------------------");
+
final var bookmarkBeforeIfAny =
transactionService.callTransactional(Propagation.REQUIRED, () -> {
final var staffMember =
staffMemberRepository.findByName(staffName);
return bookmarkService.bookmarkFor(staffMember);
@@ -209,6 +223,8 @@ void createStaffMemberWithPhoto2_using_map() {
assertThat(bookmarkBeforeIfAny).isEmpty();
+ _Debug.log("PHASE 2
-----------------------------------------------------------");
+
// and given
final var departmentName = "Classics";
final var departmentBookmark =
transactionService.callTransactional(Propagation.REQUIRED, () -> {
@@ -216,6 +232,8 @@ void createStaffMemberWithPhoto2_using_map() {
return bookmarkService.bookmarkFor(staffMember).orElseThrow();
}).valueAsNonNullElseFail();
+ _Debug.log("PHASE 3
-----------------------------------------------------------");
+
// and given
final Blob photo = readFileAsBlob("StaffMember-photo-Bar.pdf");
final var requestBuilder =
restfulClient.request("services/university.dept.Staff/actions/createStaffMemberWithPhoto2/invoke");
@@ -233,6 +251,8 @@ void createStaffMemberWithPhoto2_using_map() {
Approvals.verify(args.getEntity(), jsonOptions());
+ _Debug.log("PHASE 4
-----------------------------------------------------------");
+
// when
var response = requestBuilder.post(args);
@@ -245,8 +265,10 @@ void createStaffMemberWithPhoto2_using_map() {
var entity = response.readEntity(String.class);
assertNotNull(entity);
+ _Debug.log("PHASE 5
-----------------------------------------------------------");
+
// and also object is created in database
- final var bookmarkAfterIfAny =
transactionService.callTransactional(Propagation.REQUIRES_NEW, () -> {
+ final var bookmarkAfterIfAny =
transactionService.callTransactional(Propagation.REQUIRED, () -> {
final var staffMember =
staffMemberRepository.findByName(staffName);
return bookmarkService.bookmarkFor(staffMember);
}).valueAsNonNullElseFail();