Spring Batch не удалось обновить свое состояние из-за RollbackException - PullRequest
0 голосов
/ 15 декабря 2011

Кажется, что Spring Batch работает в той же транзакции, что и ejbs, которые он вызывает.Поэтому, когда мы получаем откат в ejbs, Spring Batch не может обновить свое состояние в базе данных.

Исключение, которое мы получаем:

    org.springframework.batch.core.step.FatalStepExecutionException: JobRepository failure forcing exit with unknown status
    at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:418)
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
    at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:262)
    at org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:76)
    at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:367)
    at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:214)
    at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:143)
    at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:248)
    at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:195)
    at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:135)
    at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:61)
    at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:60)
    at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:144)
    at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:124)
    at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:135)
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:281)
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:120)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Error in allocating a connection. Cause: javax.transaction.RollbackException

Как мы можем убедиться, что SpringПакет способен обновить свое состояние даже при неудачном шаге?Это ошибка в Spring Batch или мы сделали что-то не так?

Ответы [ 2 ]

0 голосов
/ 16 декабря 2011

Похоже, проблема была в нашей конфигурации модулей запуска заданий.

У нас есть некоторые процессы, запускающие другие процессы, и когда они использовали один и тот же экземпляр taskExecutor, откат выполнял откат самой задачи.

НеНа 100% уверен, что именно это и исправило ошибку, но теперь работает: -)

0 голосов
/ 15 декабря 2011

Пакет также работает внутри ejb? Какова настройка транзакции для ejbs? BMT или CMT? Откуда в вашей партии вы вызываете EJB? Читатель, процессор, писатель? Слушатель? Вы пытаетесь обработать исключение, которое вызывает откат ejb с помощью обычного catch (Exception e) в вашем коде, пропустить или повторить попытку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...