Updates per the code review

This commit is contained in:
Michael Minella
2013-12-07 12:32:24 -06:00
parent 78cf001e9e
commit 074e985b94
2 changed files with 35 additions and 10 deletions

View File

@@ -68,6 +68,7 @@ import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.access.BeanFactoryLocator;
import org.springframework.beans.factory.access.BeanFactoryReference;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.context.ApplicationContext;
@@ -466,7 +467,7 @@ public class JsrJobOperator implements JobOperator, InitializingBean {
batchContext.addBeanFactoryPostProcessor(new JobParameterResolvingBeanFactoryPostProcessor(params));
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition("org.springframework.batch.core.jsr.JobContextFactoryBean").getBeanDefinition();
beanDefinition.setScope("singleton");
beanDefinition.setScope(BeanDefinition.SCOPE_SINGLETON);
batchContext.registerBeanDefinition(JSR_JOB_CONTEXT_BEAN_NAME, beanDefinition);
batchContext.setParent(baseContext);
@@ -494,23 +495,44 @@ public class JsrJobOperator implements JobOperator, InitializingBean {
}
try {
JobContextFactoryBean factoryBean = (JobContextFactoryBean) batchContext.getBean("&" + JSR_JOB_CONTEXT_BEAN_NAME);
factoryBean.setJobExecution(jobExecution);
final Semaphore semaphore = new Semaphore(1);
final List<Exception> exceptionHolder = Collections.synchronizedList(new ArrayList<Exception>());
semaphore.acquire();
taskExecutor.execute(new Runnable() {
@Override
public void run() {
JobContextFactoryBean factoryBean = null;
try {
factoryBean = (JobContextFactoryBean) batchContext.getBean("&" + JSR_JOB_CONTEXT_BEAN_NAME);
factoryBean.setJobExecution(jobExecution);
final Job job = batchContext.getBean(Job.class);
semaphore.release();
// Initialization of the JobExecution for job level dependencies
jobRegistry.register(job, jobExecution);
job.execute(jobExecution);
jobRegistry.remove(jobExecution);
}
catch (Throwable t) {
throw new JobStartException(t);
catch (Exception e) {
exceptionHolder.add(e);
} finally {
if(factoryBean != null) {
factoryBean.close();
}
if(semaphore.availablePermits() == 0) {
semaphore.release();
}
}
}
});
semaphore.acquire();
if(exceptionHolder.size() > 0) {
semaphore.release();
throw new JobRestartException(exceptionHolder.get(0));
}
}
catch (Exception e) {
jobExecution.upgradeStatus(BatchStatus.FAILED);
@@ -574,7 +596,7 @@ public class JsrJobOperator implements JobOperator, InitializingBean {
batchContext.addBeanFactoryPostProcessor(new JobParameterResolvingBeanFactoryPostProcessor(params));
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition("org.springframework.batch.core.jsr.JobContextFactoryBean").getBeanDefinition();
beanDefinition.setScope("singleton");
beanDefinition.setScope(BeanDefinition.SCOPE_SINGLETON);
batchContext.registerBeanDefinition(JSR_JOB_CONTEXT_BEAN_NAME, beanDefinition);
batchContext.setParent(baseContext);
@@ -612,8 +634,9 @@ public class JsrJobOperator implements JobOperator, InitializingBean {
@Override
public void run() {
JobContextFactoryBean factoryBean = null;
try {
JobContextFactoryBean factoryBean = (JobContextFactoryBean) batchContext.getBean("&" + JSR_JOB_CONTEXT_BEAN_NAME);
factoryBean = (JobContextFactoryBean) batchContext.getBean("&" + JSR_JOB_CONTEXT_BEAN_NAME);
factoryBean.setJobExecution(jobExecution);
final Job job = batchContext.getBean(Job.class);
semaphore.release();
@@ -625,6 +648,10 @@ public class JsrJobOperator implements JobOperator, InitializingBean {
catch (Exception e) {
exceptionHolder.add(e);
} finally {
if(factoryBean != null) {
factoryBean.close();
}
if(semaphore.availablePermits() == 0) {
semaphore.release();
}
@@ -635,11 +662,10 @@ public class JsrJobOperator implements JobOperator, InitializingBean {
semaphore.acquire();
if(exceptionHolder.size() > 0) {
semaphore.release();
throw exceptionHolder.get(0);
throw new JobStartException(exceptionHolder.get(0));
}
}
catch (Exception e) {
e.printStackTrace(System.err);
if(jobRegistry.exists(jobExecution.getId())) {
jobRegistry.remove(jobExecution);
}

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This job should parse fine but the objects won't build -->
<job id="job1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0">
<step id="step1">
<batchlet ref="org.springframework.batch.core.jsr.launch.JsrJobOperatorTests$LongRunningBatchlet"/>