批处理获取错误的执行ID

时间:2019-01-28 03:54:12

标签: java-ee batch-processing java-ee-7 jsr

我正在尝试使用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());
            }
        }
    }

0 个答案:

没有答案