BATCH-2126: Added synchronization around formatters in DefaultJobParametersConverter

This commit is contained in:
Michael Minella
2014-02-20 15:54:11 -06:00
parent ef0823938c
commit cc3c7593c8

View File

@@ -51,7 +51,7 @@ import org.springframework.util.StringUtils;
* strategies, augmented if necessary by the custom editors provided.
*
* <br/>
*
*
* If you need to be able to parse and format local-specific dates and numbers,
* you can inject formatters ({@link #setDateFormat(DateFormat)} and
* {@link #setNumberFormat(NumberFormat)}).
@@ -114,13 +114,15 @@ public class DefaultJobParametersConverter implements JobParametersConverter {
if (key.endsWith(DATE_TYPE)) {
Date date;
try {
date = dateFormat.parse(value);
}
catch (ParseException ex) {
String suffix = (dateFormat instanceof SimpleDateFormat) ? ", use "
+ ((SimpleDateFormat) dateFormat).toPattern() : "";
throw new IllegalArgumentException("Date format is invalid: [" + value + "]" + suffix);
synchronized (dateFormat) {
try {
date = dateFormat.parse(value);
}
catch (ParseException ex) {
String suffix = (dateFormat instanceof SimpleDateFormat) ? ", use "
+ ((SimpleDateFormat) dateFormat).toPattern() : "";
throw new IllegalArgumentException("Date format is invalid: [" + value + "]" + suffix);
}
}
propertiesBuilder.addDate(StringUtils.replace(key, DATE_TYPE, ""), date, identifying);
}
@@ -164,13 +166,15 @@ public class DefaultJobParametersConverter implements JobParametersConverter {
* Delegate to {@link NumberFormat} to parse the value
*/
private Number parseNumber(String value) {
try {
return numberFormat.parse(value);
}
catch (ParseException ex) {
String suffix = (numberFormat instanceof DecimalFormat) ? ", use "
+ ((DecimalFormat) numberFormat).toPattern() : "";
throw new IllegalArgumentException("Number format is invalid: [" + value + "], use " + suffix);
synchronized (numberFormat) {
try {
return numberFormat.parse(value);
}
catch (ParseException ex) {
String suffix = (numberFormat instanceof DecimalFormat) ? ", use "
+ ((DecimalFormat) numberFormat).toPattern() : "";
throw new IllegalArgumentException("Number format is invalid: [" + value + "], use " + suffix);
}
}
}
@@ -196,10 +200,14 @@ public class DefaultJobParametersConverter implements JobParametersConverter {
Object value = jobParameter.getValue();
if (value != null) {
if (jobParameter.getType() == ParameterType.DATE) {
result.setProperty(key + DATE_TYPE, dateFormat.format(value));
synchronized (dateFormat) {
result.setProperty(key + DATE_TYPE, dateFormat.format(value));
}
}
else if (jobParameter.getType() == ParameterType.LONG) {
result.setProperty(key + LONG_TYPE, longNumberFormat.format(value));
synchronized (longNumberFormat) {
result.setProperty(key + LONG_TYPE, longNumberFormat.format(value));
}
}
else if (jobParameter.getType() == ParameterType.DOUBLE) {
result.setProperty(key + DOUBLE_TYPE, decimalFormat((Double)value));
@@ -218,7 +226,9 @@ public class DefaultJobParametersConverter implements JobParametersConverter {
*/
private String decimalFormat(double value) {
if (numberFormat != DEFAULT_NUMBER_FORMAT) {
return numberFormat.format(value);
synchronized (numberFormat) {
return numberFormat.format(value);
}
}
return Double.toString(value);
}