RESOLVED - issue BATCH-912: Thread safety issue in JobRegistryBackgroundJobRunner
Fixed
This commit is contained in:
@@ -18,6 +18,7 @@ package org.springframework.batch.core.launch.support;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
@@ -79,7 +80,7 @@ public class JobRegistryBackgroundJobRunner {
|
|||||||
|
|
||||||
final private String parentContextPath;
|
final private String parentContextPath;
|
||||||
|
|
||||||
private static List<Exception> errors = new ArrayList<Exception>();
|
private static List<Exception> errors = Collections.synchronizedList(new ArrayList<Exception>());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param parentContextPath
|
* @param parentContextPath
|
||||||
@@ -103,7 +104,9 @@ public class JobRegistryBackgroundJobRunner {
|
|||||||
* @return the errors
|
* @return the errors
|
||||||
*/
|
*/
|
||||||
public static List<Exception> getErrors() {
|
public static List<Exception> getErrors() {
|
||||||
return errors;
|
synchronized (errors) {
|
||||||
|
return new ArrayList<Exception>(errors);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void register(String[] paths) throws DuplicateJobException, IOException {
|
private void register(String[] paths) throws DuplicateJobException, IOException {
|
||||||
@@ -183,11 +186,15 @@ public class JobRegistryBackgroundJobRunner {
|
|||||||
while (launcher.parentContext == null && errors.isEmpty()) {
|
while (launcher.parentContext == null && errors.isEmpty()) {
|
||||||
Thread.sleep(100L);
|
Thread.sleep(100L);
|
||||||
}
|
}
|
||||||
if (!errors.isEmpty()) {
|
|
||||||
logger.info(errors.size() + " errors detected on startup of parent context. Rethrowing.");
|
|
||||||
throw errors.get(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
synchronized (errors) {
|
||||||
|
if (!errors.isEmpty()) {
|
||||||
|
logger.info(errors.size() + " errors detected on startup of parent context. Rethrowing.");
|
||||||
|
throw errors.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
errors.clear();
|
||||||
|
|
||||||
// Paths to individual job configurations.
|
// Paths to individual job configurations.
|
||||||
final String[] paths = new String[args.length - 1];
|
final String[] paths = new String[args.length - 1];
|
||||||
System.arraycopy(args, 1, paths, 0, paths.length);
|
System.arraycopy(args, 1, paths, 0, paths.length);
|
||||||
|
|||||||
Reference in New Issue
Block a user