Skip to content

Commit

Permalink
Fix TransactionOperations API compat in Kotlin
Browse files Browse the repository at this point in the history
This commit renames the Runnable variant to executeWithoutResult and
uses a Consumer<TransactionStatus> parameter for better consistency
with TransactionCallbackWithoutResult.

Closes spring-projectsgh-23724
  • Loading branch information
sdeleuze committed Sep 28, 2019
1 parent ae22187 commit 454a56d
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 15 deletions.
Expand Up @@ -83,22 +83,22 @@ public void testCustomCacheManager() {

@Test
public void testEvictWithTransaction() {
txTemplate.execute(() -> testEvict(this.cs, false));
txTemplate.executeWithoutResult(s -> testEvict(this.cs, false));
}

@Test
public void testEvictEarlyWithTransaction() {
txTemplate.execute(() -> testEvictEarly(this.cs));
txTemplate.executeWithoutResult(s -> testEvictEarly(this.cs));
}

@Test
public void testEvictAllWithTransaction() {
txTemplate.execute(() -> testEvictAll(this.cs, false));
txTemplate.executeWithoutResult(s -> testEvictAll(this.cs, false));
}

@Test
public void testEvictAllEarlyWithTransaction() {
txTemplate.execute(() -> testEvictAllEarly(this.cs));
txTemplate.executeWithoutResult(s -> testEvictAllEarly(this.cs));
}


Expand Down
Expand Up @@ -79,7 +79,7 @@ public void putTransactional() {
Cache cache = new TransactionAwareCacheDecorator(target);
Object key = new Object();

txTemplate.execute(() -> {
txTemplate.executeWithoutResult(s -> {
cache.put(key, "123");
assertThat(target.get(key)).isNull();
});
Expand All @@ -106,7 +106,7 @@ public void putIfAbsentTransactional() { // no transactional support for putIfA
Cache cache = new TransactionAwareCacheDecorator(target);
Object key = new Object();

txTemplate.execute(() -> {
txTemplate.executeWithoutResult(s -> {
assertThat(cache.putIfAbsent(key, "123")).isNull();
assertThat(target.get(key, String.class)).isEqualTo("123");
assertThat(cache.putIfAbsent(key, "456").get()).isEqualTo("123");
Expand Down Expand Up @@ -135,7 +135,7 @@ public void evictTransactional() {
Object key = new Object();
cache.put(key, "123");

txTemplate.execute(() -> {
txTemplate.executeWithoutResult(s -> {
cache.evict(key);
assertThat(target.get(key, String.class)).isEqualTo("123");
});
Expand All @@ -161,7 +161,7 @@ public void evictIfPresentTransactional() { // no transactional support for evi
Object key = new Object();
cache.put(key, "123");

txTemplate.execute(() -> {
txTemplate.executeWithoutResult(s -> {
cache.evictIfPresent(key);
assertThat(target.get(key)).isNull();
});
Expand All @@ -187,7 +187,7 @@ public void clearTransactional() {
Object key = new Object();
cache.put(key, "123");

txTemplate.execute(() -> {
txTemplate.executeWithoutResult(s -> {
cache.clear();
assertThat(target.get(key, String.class)).isEqualTo("123");
});
Expand All @@ -213,7 +213,7 @@ public void invalidateTransactional() { // no transactional support for invalid
Object key = new Object();
cache.put(key, "123");

txTemplate.execute(() -> {
txTemplate.executeWithoutResult(s -> {
cache.invalidate();
assertThat(target.get(key)).isNull();
});
Expand Down
Expand Up @@ -260,7 +260,7 @@ private void executeSqlScripts(
TransactionDefinition.PROPAGATION_REQUIRED);
TransactionAttribute txAttr = TestContextTransactionUtils.createDelegatingTransactionAttribute(
testContext, new DefaultTransactionAttribute(propagation));
new TransactionTemplate(txMgr, txAttr).execute(() -> populator.execute(finalDataSource));
new TransactionTemplate(txMgr, txAttr).executeWithoutResult(s -> populator.execute(finalDataSource));
}
}

Expand Down
Expand Up @@ -16,8 +16,11 @@

package org.springframework.transaction.support;

import java.util.function.Consumer;

import org.springframework.lang.Nullable;
import org.springframework.transaction.TransactionException;
import org.springframework.transaction.TransactionStatus;

/**
* Interface specifying basic transaction execution operations.
Expand All @@ -40,6 +43,7 @@ public interface TransactionOperations {
* @return a result object returned by the callback, or {@code null} if none
* @throws TransactionException in case of initialization, rollback, or system errors
* @throws RuntimeException if thrown by the TransactionCallback
* @see #executeWithoutResult(Consumer)
*/
@Nullable
<T> T execute(TransactionCallback<T> action) throws TransactionException;
Expand All @@ -59,9 +63,9 @@ public interface TransactionOperations {
* @see #execute(TransactionCallback)
* @see TransactionCallbackWithoutResult
*/
default void execute(Runnable action) throws TransactionException {
default void executeWithoutResult(Consumer<TransactionStatus> action) throws TransactionException {
execute(status -> {
action.run();
action.accept(status);
return null;
});
}
Expand Down
Expand Up @@ -16,8 +16,11 @@

package org.springframework.transaction.support;

import java.util.function.Consumer;

import org.springframework.lang.Nullable;
import org.springframework.transaction.TransactionException;
import org.springframework.transaction.TransactionStatus;

/**
* A {@link TransactionOperations} implementation which executes a given
Expand All @@ -43,8 +46,8 @@ public <T> T execute(TransactionCallback<T> action) throws TransactionException
}

@Override
public void execute(Runnable action) throws TransactionException {
action.run();
public void executeWithoutResult(Consumer<TransactionStatus> action) throws TransactionException {
action.accept(new SimpleTransactionStatus(false));
}

}

0 comments on commit 454a56d

Please sign in to comment.