This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch 3944-collection.out.of.sync in repository https://gitbox.apache.org/repos/asf/causeway.git
commit dd29ac93bbc5c700bfc85165f2b3d93ec946e74f Author: andi-huber <[email protected]> AuthorDate: Thu Nov 13 20:57:13 2025 +0100 CAUSEWAY-3944: refresh entities against DB before passing them over to actions (hotfix) --- .../runtimeservices/executor/MemberExecutorServiceDefault.java | 9 +++++++++ .../publishing/stubs/LifecycleEventPublishingTestAbstract.java | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/executor/MemberExecutorServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/executor/MemberExecutorServiceDefault.java index bcf9d58cfb0..5e520090a63 100644 --- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/executor/MemberExecutorServiceDefault.java +++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/executor/MemberExecutorServiceDefault.java @@ -39,6 +39,7 @@ import org.apache.causeway.applib.services.iactnlayer.InteractionLayerTracker; import org.apache.causeway.applib.services.inject.ServiceInjector; import org.apache.causeway.applib.services.metrics.MetricsService; +import org.apache.causeway.applib.services.repository.RepositoryService; import org.apache.causeway.applib.services.xactn.TransactionService; import org.apache.causeway.commons.collections.Can; import org.apache.causeway.commons.functional.Try; @@ -49,6 +50,7 @@ import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.MessageTemplate; import org.apache.causeway.core.metamodel.commons.CanonicalInvoker; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; +import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.execution.ActionExecutor; import org.apache.causeway.core.metamodel.execution.InteractionInternal; import org.apache.causeway.core.metamodel.execution.MemberExecutorService; @@ -105,6 +107,7 @@ public class MemberExecutorServiceDefault private final @Getter Provider<ExecutionPublisher> executionPublisherProvider; private final @Getter MetamodelEventService metamodelEventService; private final @Getter TransactionService transactionService; + private final @Getter RepositoryService repositoryService; private final Provider<CommandPublisher> commandPublisherProvider; private MetricsService metricsService() { @@ -140,6 +143,12 @@ private ManagedObject invokeActionInternally( final ObjectAction owningAction = actionExecutor.getOwningAction(); final InteractionHead head = actionExecutor.getHead(); + + //CAUSEWAY-3944: make sure entities are in sync with the db before passing them to actions + if(head.owner().objSpec().isEntity()) { + repositoryService.refresh(head.owner().getPojo()); + } + final Can<ManagedObject> argumentAdapters = actionExecutor.getArguments(); final InteractionInitiatedBy interactionInitiatedBy = actionExecutor.getInteractionInitiatedBy(); // final MethodFacade methodFacade, diff --git a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/publishing/stubs/LifecycleEventPublishingTestAbstract.java b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/publishing/stubs/LifecycleEventPublishingTestAbstract.java index ff4af66be87..2ea097bdc38 100644 --- a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/publishing/stubs/LifecycleEventPublishingTestAbstract.java +++ b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/publishing/stubs/LifecycleEventPublishingTestAbstract.java @@ -180,7 +180,7 @@ protected void verify( case ACTION_INVOCATION: // double the book's price action -> 198.0 assertHasCreatedLifecycleEvents(Can.empty()); - assertHasLoadedLifecycleEvents(Can.empty()); + assertHasLoadedLifecycleEvents(bookSample1); //was empty before CAUSEWAY-3944 assertHasPersistingLifecycleEvents(Can.empty()); assertHasPersistedLifecycleEvents(Can.empty()); assertHasUpdatingLifecycleEvents(bookSample3);
