我正在尝试使用JBOSS EAP 7.1实现Java批处理。当我尝试在批处理中获取执行ID时,它为多个作业/提供了错误的ID /相同的执行ID。我的XML文件如下。我正在循环调用我的作业操作员。然后,我的批处理将一些数据插入表中。当我检查我的表时,它显示了错误的执行ID。 Job_execution和步骤执行表包含每个作业的正确数据不同ID。请帮助我走上正确的道路。提前致谢。我的XML文件如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<job id="simpleBatchLet" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/jobXML_1_0.xsd"
version="1.0">
<step id="firstStep" >
<batchlet ref="batchletOne"/>
</step>
</job>
这是我的工作人员
public void startSeqBatch() {
try {
Long bId = com.getSeq("BAT_SEQ_TEST");
Properties jobParameters = new Properties();
jobParameters.setProperty("bId", bId.toString());
JobOperator jobOperator = BatchRuntime.getJobOperator();
Long executionId = jobOperator.start("simpleBatchLet", jobParameters);
JobExecution jobExecution = jobOperator.getJobExecution(executionId);
} catch (JobStartException ex) {
FileLogger.error(getClass(), Func.prepareException4Log(ex));
} catch (NoSuchJobException ex) {
FileLogger.error(getClass(), Func.prepareException4Log(ex));
} catch (JobSecurityException ex) {
FileLogger.error(getClass(), Func.prepareException4Log(ex));
} catch (Exception ex) {
FileLogger.error(getClass(), Func.prepareException4Log(ex));
}
}
这是我的批次
@Named("batchletOne")
@Stateless
public class batchletOne extends AbstractBatchlet {
@PersistenceContext
EntityManager em;
CommonRemote com;
@Inject
private JobContext jobContext;
@Override
public String process() throws Exception {
try {
executeTask(1L);
} catch (Exception ex) {
FileLogger.err("1_error_new_batch_process", ex.getMessage());
return BatchStatus.FAILED.toString();
}
return BatchStatus.COMPLETED.toString();
}
public void executeTask(Long stepId) {
try {
JobOperator operator = BatchRuntime.getJobOperator();
Long execId = jobContext.getExecutionId();
Long bId = Func.toLong(operator.getParameters(execId).get("bId"));
BatSeqTest c = new BatSeqTest();
c.setId(com.getSeq("BAT_SEQ_TEST_2"));
c.setbid(bId);
c.setStepid(stepId);
c.setExecid(execId);
c.setExecuteddate(new Date());
c.setStatus(Func.toString(Thread.currentThread().getId()));
em.persist(c);
} catch (Exception ex) {
FileLogger.err("1_error_new_batch_process", ex.getMessage());
}
}
}