From 39eafb8b7815448fda4e5466fd695789db3237fd Mon Sep 17 00:00:00 2001 From: dsyer Date: Sat, 3 Apr 2010 10:10:34 +0000 Subject: [PATCH] Fix typo in transactional contains() --- .../transaction/TransactionAwareProxyFactory.java | 14 +++++++++----- .../ConcurrentTransactionAwareProxyTests.java | 12 ++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/support/transaction/TransactionAwareProxyFactory.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/support/transaction/TransactionAwareProxyFactory.java index 74bb63df8..35da256b1 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/support/transaction/TransactionAwareProxyFactory.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/support/transaction/TransactionAwareProxyFactory.java @@ -164,11 +164,15 @@ public class TransactionAwareProxyFactory { } Object result = invocation.getMethod().invoke(cache, invocation.getArguments()); - - String methodName = invocation.getMethod().getName(); - if (appendOnly && result==null && (methodName.equals("get") || methodName.equals("contains"))) { - // In appendOnly mode the result of a get might not be in the cache... - return invocation.proceed(); + + if (appendOnly) { + String methodName = invocation.getMethod().getName(); + if ((result == null && methodName.equals("get")) + || (Boolean.FALSE.equals(result) && methodName.startsWith("contains"))) { + // In appendOnly mode the result of a get might not be + // in the cache... + return invocation.proceed(); + } } return result; diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/support/transaction/ConcurrentTransactionAwareProxyTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/support/transaction/ConcurrentTransactionAwareProxyTests.java index 6ec197f9b..a6fc4c528 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/support/transaction/ConcurrentTransactionAwareProxyTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/support/transaction/ConcurrentTransactionAwareProxyTests.java @@ -17,6 +17,7 @@ package org.springframework.batch.support.transaction; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import java.util.ArrayList; import java.util.HashMap; @@ -84,6 +85,17 @@ public class ConcurrentTransactionAwareProxyTests { testMap(map); } + @Test + public void testTransactionalContains() throws Exception { + final Map> map = TransactionAwareProxyFactory.createAppendOnlyTransactionalMap(); + boolean result = (Boolean) new TransactionTemplate(transactionManager).execute(new TransactionCallback() { + public Object doInTransaction(TransactionStatus status) { + return map.containsKey("foo"); + } + }); + assertFalse(result); + } + private void testSet(final Set set) throws Exception { CompletionService> completionService = new ExecutorCompletionService>(Executors