2011-12-15 11 views
0

Spring Batchが呼び出しているejbsと同じトランザクションで実行されているようです。したがって、ejbsでロールバックを取得すると、Spring Batchはデータベース内の状態を更新することができません。SpringバッチがRollbackExceptionのために状態を更新できません

我々が得る例外は次のとおりです。

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 Batchのバグですか、何か間違ったことはありますか?

答えて

-2

私たちのjoblaunchersの設定に問題があるようです。

他のプロセスを起動するプロセスがいくつかあり、同じtaskExecutorインスタンスを使用した場合、ロールバックによってタスク自体がロールバックされます。

これはエラーを修正したものだった場合は100%わからないが、それは今:-)

-1

バッチもejb内で実行されていますか? ejbsのトランザクション設定とは何ですか? BMTまたはCMT?バッチ内のどこからEJBを呼び出すのですか?リーダー、プロセッサ、ライター?リスナー?スキップまたは再試行、あなたのコードで定期的なキャッチ(例外e)を介してejbのロールバックを引き起こす例外を処理しようとしていますか?

+0

を働いているが、我々はすべての後のプロセスをいくつかを停止していたように思えます。私たちは作家でejbsを呼び出しています。いいえ、私たちはすべての例外を処理しているわけではありません。それらを失敗させて、しばらくしてからもう一度プロセスを再起動します。 – olemartin

関連する問題