From 60d0b9c428c9bf7e9bac4fceda00b99e2196dad4 Mon Sep 17 00:00:00 2001 From: Thomas Risberg Date: Wed, 12 Oct 2011 10:54:20 -0400 Subject: [PATCH] DATACMNS-73 - Created dedicated cross-store package. Adding back/moving missing classes --- ...geSetBackedTransactionSynchronization.java | 60 +++++++++++++++++++ .../HashMapChangeSet.java | 3 +- 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 spring-data-commons-core/src/main/java/org/springframework/data/crossstore/ChangeSetBackedTransactionSynchronization.java rename spring-data-commons-core/src/main/java/org/springframework/data/{persistence => crossstore}/HashMapChangeSet.java (90%) diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/crossstore/ChangeSetBackedTransactionSynchronization.java b/spring-data-commons-core/src/main/java/org/springframework/data/crossstore/ChangeSetBackedTransactionSynchronization.java new file mode 100644 index 000000000..13d394f1e --- /dev/null +++ b/spring-data-commons-core/src/main/java/org/springframework/data/crossstore/ChangeSetBackedTransactionSynchronization.java @@ -0,0 +1,60 @@ +package org.springframework.data.crossstore; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.transaction.support.TransactionSynchronization; + +public class ChangeSetBackedTransactionSynchronization implements TransactionSynchronization { + + protected final Log log = LogFactory.getLog(getClass()); + + private ChangeSetPersister changeSetPersister; + + private ChangeSetBacked entity; + + private int changeSetTxStatus = -1; + + public ChangeSetBackedTransactionSynchronization(ChangeSetPersister changeSetPersister, ChangeSetBacked entity) { + this.changeSetPersister = changeSetPersister; + this.entity = entity; + } + + public void afterCommit() { + log.debug("After Commit called for " + entity); + changeSetPersister.persistState(entity, entity.getChangeSet()); + changeSetTxStatus = 0; + } + + public void afterCompletion(int status) { + log.debug("After Completion called with status = " + status); + if (changeSetTxStatus == 0) { + if (status == STATUS_COMMITTED) { + // this is good + log.debug("ChangedSetBackedTransactionSynchronization completed successfully for " + this.entity); + } else { + // this could be bad - TODO: compensate + log.error("ChangedSetBackedTransactionSynchronization failed for " + this.entity); + } + } + } + + public void beforeCommit(boolean readOnly) { + } + + public void beforeCompletion() { + } + + public void flush() { + } + + public void resume() { + throw new IllegalStateException( + "ChangedSetBackedTransactionSynchronization does not support transaction suspension currently."); + } + + public void suspend() { + throw new IllegalStateException( + "ChangedSetBackedTransactionSynchronization does not support transaction suspension currently."); + } + +} diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/persistence/HashMapChangeSet.java b/spring-data-commons-core/src/main/java/org/springframework/data/crossstore/HashMapChangeSet.java similarity index 90% rename from spring-data-commons-core/src/main/java/org/springframework/data/persistence/HashMapChangeSet.java rename to spring-data-commons-core/src/main/java/org/springframework/data/crossstore/HashMapChangeSet.java index 703115e52..7a88807bd 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/persistence/HashMapChangeSet.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/crossstore/HashMapChangeSet.java @@ -1,11 +1,10 @@ -package org.springframework.data.persistence; +package org.springframework.data.crossstore; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.springframework.core.convert.ConversionService; -import org.springframework.data.crossstore.ChangeSet; /** * Simple ChangeSet implementation backed by a HashMap.