From 9f990f47c46a763fba1cea3006965ba16a3ad96d Mon Sep 17 00:00:00 2001 From: Philippe Marschall Date: Thu, 30 Jul 2015 19:12:46 +0200 Subject: [PATCH] BATCH-2408 Use ArrayList instead of Stack Stack is a pre Java 1.2 class that is slower than ArrayList as it incurs additional synchronization overhead. - replace Stack with ArrayList where it's not public API Issue: BATCH-2408 --- .../ResourcelessTransactionManager.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/support/transaction/ResourcelessTransactionManager.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/support/transaction/ResourcelessTransactionManager.java index 8073206bc..19300b4a3 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/support/transaction/ResourcelessTransactionManager.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/support/transaction/ResourcelessTransactionManager.java @@ -16,7 +16,8 @@ package org.springframework.batch.support.transaction; -import java.util.Stack; +import java.util.ArrayList; +import java.util.List; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionException; @@ -42,17 +43,17 @@ public class ResourcelessTransactionManager extends AbstractPlatformTransactionM @Override protected Object doGetTransaction() throws TransactionException { Object transaction = new ResourcelessTransaction(); - Stack resources; + List resources; if (!TransactionSynchronizationManager.hasResource(this)) { - resources = new Stack(); + resources = new ArrayList(); TransactionSynchronizationManager.bindResource(this, resources); } else { @SuppressWarnings("unchecked") - Stack stack = (Stack) TransactionSynchronizationManager.getResource(this); + List stack = (List) TransactionSynchronizationManager.getResource(this); resources = stack; } - resources.push(transaction); + resources.add(transaction); return transaction; } @@ -66,8 +67,7 @@ public class ResourcelessTransactionManager extends AbstractPlatformTransactionM @Override protected boolean isExistingTransaction(Object transaction) throws TransactionException { if (TransactionSynchronizationManager.hasResource(this)) { - @SuppressWarnings("unchecked") - Stack stack = (Stack) TransactionSynchronizationManager.getResource(this); + List stack = (List) TransactionSynchronizationManager.getResource(this); return stack.size() > 1; } return ((ResourcelessTransaction) transaction).isActive(); @@ -79,9 +79,7 @@ public class ResourcelessTransactionManager extends AbstractPlatformTransactionM @Override protected void doCleanupAfterCompletion(Object transaction) { - @SuppressWarnings("unchecked") - Stack list = (Stack) TransactionSynchronizationManager.getResource(this); - Stack resources = list; + List resources = (List) TransactionSynchronizationManager.getResource(this); resources.clear(); TransactionSynchronizationManager.unbindResource(this); ((ResourcelessTransaction) transaction).clear();