IN PROGRESS - BATCH-857: map daos need to be truly transactional for correct restart
use transactional collection wrappers in map daos
This commit is contained in:
@@ -1,17 +1,17 @@
|
||||
package org.springframework.batch.core.repository.dao;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.batch.core.JobExecution;
|
||||
import org.springframework.batch.core.StepExecution;
|
||||
import org.springframework.batch.item.ExecutionContext;
|
||||
import org.springframework.batch.support.transaction.TransactionAwareProxyFactory;
|
||||
|
||||
public class MapExecutionContextDao implements ExecutionContextDao {
|
||||
|
||||
private static Map<Long, ExecutionContext> contextsByStepExecutionId = new HashMap<Long, ExecutionContext>();
|
||||
private static Map<Long, ExecutionContext> contextsByStepExecutionId = TransactionAwareProxyFactory.createTransactionalMap();
|
||||
|
||||
private static Map<Long, ExecutionContext> contextsByJobExecutionId = new HashMap<Long, ExecutionContext>();
|
||||
private static Map<Long, ExecutionContext> contextsByJobExecutionId = TransactionAwareProxyFactory.createTransactionalMap();
|
||||
|
||||
public static void clear() {
|
||||
contextsByJobExecutionId.clear();
|
||||
|
||||
@@ -3,7 +3,6 @@ package org.springframework.batch.core.repository.dao;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -11,6 +10,7 @@ import java.util.Set;
|
||||
|
||||
import org.springframework.batch.core.JobExecution;
|
||||
import org.springframework.batch.core.JobInstance;
|
||||
import org.springframework.batch.support.transaction.TransactionAwareProxyFactory;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
@@ -18,7 +18,7 @@ import org.springframework.util.Assert;
|
||||
*/
|
||||
public class MapJobExecutionDao implements JobExecutionDao {
|
||||
|
||||
private static Map<Long, JobExecution> executionsById = new HashMap<Long, JobExecution>();
|
||||
private static Map<Long, JobExecution> executionsById = TransactionAwareProxyFactory.createTransactionalMap();
|
||||
|
||||
private static long currentId = 0;
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.batch.core.JobExecution;
|
||||
import org.springframework.batch.core.JobInstance;
|
||||
import org.springframework.batch.core.JobParameters;
|
||||
import org.springframework.batch.support.transaction.TransactionAwareProxyFactory;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
@@ -17,7 +17,7 @@ import org.springframework.util.Assert;
|
||||
*/
|
||||
public class MapJobInstanceDao implements JobInstanceDao {
|
||||
|
||||
private static Collection<JobInstance> jobInstances = new HashSet<JobInstance>();
|
||||
private static Collection<JobInstance> jobInstances = TransactionAwareProxyFactory.createTransactionalSet();
|
||||
|
||||
private static long currentId = 0;
|
||||
|
||||
|
||||
@@ -18,13 +18,13 @@ package org.springframework.batch.core.repository.dao;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.batch.core.Entity;
|
||||
import org.springframework.batch.core.JobExecution;
|
||||
import org.springframework.batch.core.StepExecution;
|
||||
import org.springframework.batch.support.transaction.TransactionAwareProxyFactory;
|
||||
import org.springframework.dao.OptimisticLockingFailureException;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
@@ -33,7 +33,8 @@ import org.springframework.util.Assert;
|
||||
*/
|
||||
public class MapStepExecutionDao implements StepExecutionDao {
|
||||
|
||||
private static Map<Long, Map<String, StepExecution>> executionsByJobExecutionId = new HashMap<Long, Map<String, StepExecution>>();
|
||||
private static Map<Long, Map<String, StepExecution>> executionsByJobExecutionId = TransactionAwareProxyFactory.createTransactionalMap();
|
||||
|
||||
private static long currentId = 0;
|
||||
|
||||
public static void clear() {
|
||||
@@ -47,7 +48,7 @@ public class MapStepExecutionDao implements StepExecutionDao {
|
||||
|
||||
Map<String, StepExecution> executions = executionsByJobExecutionId.get(stepExecution.getJobExecutionId());
|
||||
if (executions == null) {
|
||||
executions = new HashMap<String, StepExecution>();
|
||||
executions = TransactionAwareProxyFactory.createTransactionalMap();
|
||||
executionsByJobExecutionId.put(stepExecution.getJobExecutionId(), executions);
|
||||
}
|
||||
stepExecution.setId(new Long(currentId++));
|
||||
|
||||
Reference in New Issue
Block a user