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 2024/06/17 13:22:43 UTC
(causeway) 01/01: CAUSEWAY-3780: introduces EntityChangeTrackerDefault.Configuration as an SPI
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3780
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 2c95ef3636914f7f356d7f329f918e211a52e4a8
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jun 17 14:22:32 2024 +0100
CAUSEWAY-3780: introduces EntityChangeTrackerDefault.Configuration as an SPI
---
persistence/commons/src/main/java/module-info.java | 1 +
.../changetracking/EntityChangeTrackerDefault.java | 46 ++++++++++++++++------
2 files changed, 36 insertions(+), 11 deletions(-)
diff --git a/persistence/commons/src/main/java/module-info.java b/persistence/commons/src/main/java/module-info.java
index 8de9488e1f..bc31c1590b 100644
--- a/persistence/commons/src/main/java/module-info.java
+++ b/persistence/commons/src/main/java/module-info.java
@@ -42,4 +42,5 @@ module org.apache.causeway.persistence.commons {
requires spring.context;
requires spring.core;
requires spring.tx;
+ requires spring.boot.autoconfigure;
}
diff --git a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/changetracking/EntityChangeTrackerDefault.java b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/changetracking/EntityChangeTrackerDefault.java
index d23c87d1ad..5749a3a137 100644
--- a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/changetracking/EntityChangeTrackerDefault.java
+++ b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/changetracking/EntityChangeTrackerDefault.java
@@ -28,14 +28,16 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.LongAdder;
import java.util.function.Function;
-import javax.annotation.PostConstruct;
+import javax.annotation.Priority;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Provider;
import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.core.Ordered;
import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
@@ -116,7 +118,6 @@ implements
private final EntityChangesPublisher entityChangesPublisher;
private final Provider<InteractionProvider> interactionProviderProvider;
private final PreAndPostValueEvaluatorService preAndPostValueEvaluatorService;
- private final CausewayConfiguration causewayConfiguration;
/**
* Contains a record for every objectId/propertyId that was changed.
@@ -142,12 +143,6 @@ implements
private final LongAdder entityChangeEventCount = new LongAdder();
private final AtomicBoolean persistentChangesEncountered = new AtomicBoolean();
- private boolean suppressAutoFlush;
-
- @PostConstruct
- public void init() {
- this.suppressAutoFlush = causewayConfiguration.getPersistence().getCommons().getEntityChangeTracker().isSuppressAutoFlush();
- }
@Override
public void destroy() throws Exception {
@@ -172,7 +167,7 @@ implements
*/
private void runThreadsafeAndSuppressAutoFlushIfRequired(final Runnable runnable) {
synchronized (enlistedPropertyChangeRecordsById) {
- if (suppressAutoFlush) {
+ if (configuration.isSuppressAutoFlush()) {
FlushMgmt.suppressAutoFlush(runnable);
} else {
runnable.run();
@@ -226,7 +221,7 @@ implements
private boolean isEntityExcludedForChangePublishing(final ManagedObject entity) {
- if (!causewayConfiguration.getPersistence().getCommons().getEntityChangeTracker().isEnabled()) {
+ if (!configuration.isEnabled()) {
return true;
}
@@ -458,4 +453,33 @@ implements
}
}
-}
+ /**
+ * SPI to allow this service to be configured through different mechanisms.
+ */
+ public interface Configuration {
+
+ boolean isSuppressAutoFlush();
+
+ boolean isEnabled();
+ }
+
+ @Inject private Configuration configuration;
+
+ @Component
+ @Priority(PriorityPrecedence.LATE)
+ @ConditionalOnMissingBean(Configuration.class)
+ @RequiredArgsConstructor(onConstructor_ = {@Inject})
+ public static class ConfigurationDefault implements Configuration {
+ private final CausewayConfiguration causewayConfiguration;
+
+ @Override
+ public boolean isSuppressAutoFlush() {
+ return causewayConfiguration.getPersistence().getCommons().getEntityChangeTracker().isSuppressAutoFlush();
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return causewayConfiguration.getPersistence().getCommons().getEntityChangeTracker().isEnabled();
+ }
+ }
+}
\ No newline at end of file