You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2026/06/19 06:47:34 UTC
(causeway) 03/11: CAUSEWAY-4039: moves injected services into ReplayContext
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-4039
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit f6828f1b9b831c1fadc6311b198061ab8553f5f9
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Jun 18 19:00:44 2026 +0100
CAUSEWAY-4039: moves injected services into ReplayContext
---
.../applib/CausewayModuleExtCommandLogApplib.java | 17 ++++++++++-
.../applib/dom/replay/CommandManagerAbstract.java | 3 +-
.../applib/dom/replay/CommandManagerExport.java | 22 ++++++--------
.../CommandManagerExport_exportSelected.java | 8 -----
.../applib/dom/replay/CommandManagerReplay.java | 1 -
.../applib/dom/replay/ReplayContext.java | 34 ++++++++++++++++++++--
6 files changed, 58 insertions(+), 27 deletions(-)
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/CausewayModuleExtCommandLogApplib.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/CausewayModuleExtCommandLogApplib.java
index f7a08bac1ef..dee0fde0360 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/CausewayModuleExtCommandLogApplib.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/CausewayModuleExtCommandLogApplib.java
@@ -18,11 +18,16 @@
*/
package org.apache.causeway.extensions.commandlog.applib;
+import java.util.List;
+
import org.apache.causeway.applib.services.clock.ClockService;
import org.apache.causeway.applib.services.command.CommandExecutorService;
import org.apache.causeway.applib.services.iactnlayer.InteractionService;
+import org.apache.causeway.applib.services.metamodel.MetaModelService;
import org.apache.causeway.applib.services.repository.RepositoryService;
+import org.apache.causeway.applib.services.scratchpad.Scratchpad;
import org.apache.causeway.applib.services.xactn.TransactionService;
+import org.apache.causeway.core.config.CausewayConfiguration;
import org.apache.causeway.core.config.util.SpringProfileUtil;
import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
import org.apache.causeway.extensions.commandlog.applib.app.CommandLogMenu;
@@ -69,6 +74,7 @@
import org.apache.causeway.extensions.commandlog.applib.job.RunBackgroundCommandsJob;
import org.apache.causeway.extensions.commandlog.applib.spi.CommandReplayMappingListener;
import org.apache.causeway.extensions.commandlog.applib.spi.CommandReplayMappingListenerInMemory;
+import org.apache.causeway.extensions.commandlog.applib.spi.CommandReplayReferenceDataService;
import org.apache.causeway.extensions.commandlog.applib.spi.CommandReplayReferenceDataServiceForRefData;
import org.apache.causeway.extensions.commandlog.applib.spi.RunBackgroundCommandsJobListener;
import org.apache.causeway.extensions.commandlog.applib.subscriber.CommandLogPauseState;
@@ -191,11 +197,20 @@ public static void honorSystemEnvironment() {
final CommandExecutorService commandExecutorService,
final ClockService clockService,
final java.util.List<CommandReplayMappingListener> commandReplayMappingListeners,
+ final Scratchpad scratchpad,
+ final MetaModelService metaModelService,
+ final CausewayConfiguration causewayConfiguration,
+ final List<CommandReplayReferenceDataService> commandReplayReferenceDataServices,
final SpecificationLoader specificationLoader) {
return new ReplayContext(
repositoryService, interactionService, transactionService,
commandLogEntryRepository, commandExecutorService, clockService,
- commandReplayMappingListeners, specificationLoader);
+ commandReplayMappingListeners,
+ scratchpad,
+ metaModelService,
+ causewayConfiguration,
+ commandReplayReferenceDataServices,
+ specificationLoader);
}
}
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerAbstract.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerAbstract.java
index a11fc7dcbeb..a32d81d8439 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerAbstract.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerAbstract.java
@@ -18,10 +18,11 @@
*/
package org.apache.causeway.extensions.commandlog.applib.dom.replay;
+import java.sql.Timestamp;
+
import org.apache.causeway.applib.ViewModel;
import org.apache.causeway.applib.services.command.CommandRecordingSuppressed;
public abstract class CommandManagerAbstract implements HasBaseline, CommandRecordingSuppressed {
-
}
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport.java
index 48b6c718a07..f9877ea502a 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport.java
@@ -69,10 +69,6 @@ public static abstract class ActionDomainEvent<T>
ReplayContext replayContext;
- @Inject Scratchpad scratchpad;
- @Inject MetaModelService metaModelService;
- @Inject CausewayConfiguration causewayConfiguration;
- @Inject List<CommandReplayReferenceDataService> commandReplayReferenceDataServices;
@Inject
public CommandManagerExport(
@@ -208,8 +204,8 @@ private static boolean sameInteractionId(
}
private boolean isRecordingSupportEnabled() {
- return causewayConfiguration != null
- && causewayConfiguration.getExtensions().getCommandLog().getRecordingSupport().isEnabled();
+ return replayContext.causewayConfiguration() != null
+ && replayContext.causewayConfiguration().getExtensions().getCommandLog().getRecordingSupport().isEnabled();
}
private CommandExportKnownTargetValidator validator() {
@@ -218,12 +214,12 @@ private CommandExportKnownTargetValidator validator() {
private boolean isExportRootOrReferenceData(final Bookmark bookmark) {
return isExportRoot(bookmark)
- || CommandReplayReferenceDataService.isReferenceData(commandReplayReferenceDataServices, bookmark);
+ || CommandReplayReferenceDataService.isReferenceData(replayContext.commandReplayReferenceDataServices(), bookmark);
}
private boolean isExportRoot(final Bookmark bookmark) {
- return metaModelService != null
- && metaModelService.lookupLogicalTypeByName(bookmark.getLogicalTypeName())
+ return replayContext.metaModelService() != null
+ && replayContext.metaModelService().lookupLogicalTypeByName(bookmark.getLogicalTypeName())
.map(logicalType -> logicalType.correspondingClass().isAnnotationPresent(org.apache.causeway.applib.annotation.DomainService.class))
.orElse(false);
}
@@ -241,11 +237,11 @@ private boolean isReplayable(final CommandLogEntry entry) {
}
private ReplayableCommand replayableCommandInExportManagerContext(final CommandLogEntry entry) {
- return scratchpad != null
+ return replayContext.scratchpad() != null
? new ReplayableCommand(
entry.getInteractionId(),
replayContext,
- scratchpad)
+ replayContext.scratchpad())
: new ReplayableCommand(
entry.getInteractionId(),
replayContext,
@@ -264,8 +260,8 @@ private static boolean isExcludedCommand(final CommandLogEntry entry) {
}
private void putCurrentExportManagerOnScratchpad() {
- if (scratchpad != null) {
- scratchpad.put(SCRATCHPAD_KEY, this);
+ if (replayContext.scratchpad() != null) {
+ replayContext.scratchpad().put(SCRATCHPAD_KEY, this);
}
}
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport_exportSelected.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport_exportSelected.java
index f39b7393a92..fbbbaecba81 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport_exportSelected.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport_exportSelected.java
@@ -106,7 +106,6 @@ public boolean defaultFilenameTimestamp() {
@MemberSupport
public List<ReplayableCommand> defaultSelected() {
- syncInjectedServicesToManager();
return commandExportManager.getCommands().stream()
.filter(command -> Boolean.TRUE.equals(command.getExportable()))
.collect(Collectors.toList());
@@ -136,16 +135,9 @@ private List<CommandLogEntry> selectedCommandLogEntries(final List<ReplayableCom
private Optional<CommandExportKnownTargetValidator.Failure> validateKnownTargets(
final List<CommandLogEntry> selectedCommandLogEntries) {
- syncInjectedServicesToManager();
return commandExportManager.validateKnownTargets(selectedCommandLogEntries);
}
- private void syncInjectedServicesToManager() {
- commandExportManager.metaModelService = metaModelService;
- commandExportManager.causewayConfiguration = causewayConfiguration;
- commandExportManager.commandReplayReferenceDataServices = commandReplayReferenceDataServices;
- }
-
// TODO: shouldn't be required because of 'choicesFrom', but in v2 there seems to be a MM validation error due to a missing choicesFacet
@MemberSupport
public List<ReplayableCommand> choicesSelected() {
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerReplay.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerReplay.java
index 0554d6ca72d..c1a40bc713d 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerReplay.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerReplay.java
@@ -58,7 +58,6 @@ public static abstract class ActionDomainEvent<T>
extends CausewayModuleExtCommandLogApplib.ActionDomainEvent<T> { }
ReplayContext replayContext;
-
ReplayContext replayContext() {
return replayContext;
}
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayContext.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayContext.java
index e06a5021557..8c10b0adcbe 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayContext.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayContext.java
@@ -25,17 +25,24 @@
import org.apache.causeway.applib.services.clock.ClockService;
import org.apache.causeway.applib.services.command.CommandExecutorService;
import org.apache.causeway.applib.services.iactnlayer.InteractionService;
+import org.apache.causeway.applib.services.metamodel.MetaModelService;
import org.apache.causeway.applib.services.repository.RepositoryService;
+import org.apache.causeway.applib.services.scratchpad.Scratchpad;
import org.apache.causeway.applib.services.xactn.TransactionService;
+import org.apache.causeway.core.config.CausewayConfiguration;
import org.apache.causeway.extensions.commandlog.applib.dom.CommandLogEntry;
import org.apache.causeway.extensions.commandlog.applib.dom.CommandLogEntryRepository;
import org.apache.causeway.extensions.commandlog.applib.spi.CommandReplayMappingListener;
import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
+import org.apache.causeway.extensions.commandlog.applib.spi.CommandReplayReferenceDataService;
+
import org.springframework.lang.Nullable;
import lombok.Value;
import lombok.experimental.Accessors;
+import javax.inject.Inject;
+
/**
* Bundles dependencies for the replay logic.
*/
@@ -48,7 +55,12 @@ public final class ReplayContext {
CommandExecutorService commandExecutorService;
ClockService clockService;
List<CommandReplayMappingListener> commandReplayMappingListeners;
- SpecificationLoader specificationLoader;
+ Scratchpad scratchpad;
+ MetaModelService metaModelService;
+ CausewayConfiguration causewayConfiguration;
+ List<CommandReplayReferenceDataService> commandReplayReferenceDataServices;
+
+ SpecificationLoader specificationLoader;
public ReplayContext(
final RepositoryService repositoryService,
@@ -57,7 +69,11 @@ public ReplayContext(
final CommandLogEntryRepository commandLogEntryRepository,
final CommandExecutorService commandExecutorService,
final ClockService clockService,
- final List<CommandReplayMappingListener> commandReplayMappingListeners) {
+ final List<CommandReplayMappingListener> commandReplayMappingListeners,
+ final Scratchpad scratchpad,
+ final MetaModelService metaModelService,
+ final CausewayConfiguration causewayConfiguration,
+ final List<CommandReplayReferenceDataService> commandReplayReferenceDataServices) {
this(
repositoryService,
interactionService,
@@ -66,6 +82,10 @@ public ReplayContext(
commandExecutorService,
clockService,
commandReplayMappingListeners,
+ scratchpad,
+ metaModelService,
+ causewayConfiguration,
+ commandReplayReferenceDataServices,
null);
}
@@ -77,6 +97,10 @@ public ReplayContext(
final CommandExecutorService commandExecutorService,
final ClockService clockService,
final List<CommandReplayMappingListener> commandReplayMappingListeners,
+ final Scratchpad scratchpad,
+ final MetaModelService metaModelService,
+ final CausewayConfiguration causewayConfiguration,
+ final List<CommandReplayReferenceDataService> commandReplayReferenceDataServices,
final SpecificationLoader specificationLoader) {
this.repositoryService = repositoryService;
this.interactionService = interactionService;
@@ -85,6 +109,10 @@ public ReplayContext(
this.commandExecutorService = commandExecutorService;
this.clockService = clockService;
this.commandReplayMappingListeners = commandReplayMappingListeners;
+ this.scratchpad = scratchpad;
+ this.metaModelService = metaModelService;
+ this.causewayConfiguration = causewayConfiguration;
+ this.commandReplayReferenceDataServices = commandReplayReferenceDataServices;
this.specificationLoader = specificationLoader;
}
@@ -93,5 +121,5 @@ public Optional<CommandLogEntry> lookupCommandLogEntry(final @Nullable UUID inte
? commandLogEntryRepository().findByInteractionId(interactionId)
: Optional.empty();
}
-
+
}