title: Tasklet transaction-manager and chunk transaction
body: <p>I specified a tasklet with a chunk orientated procssing.</p>
  <pre><code>          &lt;batch:step id=&quot;midxStep&quot; parent=&quot;stepParent&quot;&gt;
               &lt;batch:tasklet transaction-manager=&quot;transactionManager&quot;&gt;
                      &lt;batch:chunk
                             reader=&quot;processDbItemReaderJdbc&quot;
                             processor=&quot;midxItemProcessor&quot;
                             writer=&quot;midxCompositeItemWriter&quot;
                             processor-transactional=&quot;false&quot;
                             reader-transactional-queue=&quot;false&quot;
                             skip-limit=&quot;${cmab.batch.skip.limit}&quot;
                             commit-interval=&quot;#{jobParameters['toProcess']==T(de.axa.batch.ecmcm.cmab.util.CmabConstants).TYPE_POSTAUSGANG ? '${consumer.global.pa.midx.commitSize}' : '${consumer.global.pe.midx.commitSize}' }&quot;
                             cache-capacity=&quot;20&quot;&gt;
                          &lt;batch:skippable-exception-classes&gt;
                              &lt;batch:include class=&quot;de.axa.batch.ecmcm.cmab.util.CmabProcessMidxException&quot; /&gt;
                              &lt;batch:exclude class=&quot;java.lang.IllegalArgumentException&quot; /&gt;
                          &lt;/batch:skippable-exception-classes&gt;
                          &lt;batch:retryable-exception-classes&gt;
                              &lt;batch:include class=&quot;de.axa.batch.ecmcm.cmab.util.CmabTechnicalMidxException&quot; /&gt;
                              &lt;batch:include class=&quot;de.axa.batch.ecmcm.cmab.util.CmabTechnicalException&quot; /&gt;
                          &lt;/batch:retryable-exception-classes&gt;
                          &lt;batch:retry-listeners&gt;
                              &lt;batch:listener ref=&quot;logRetryListener&quot;/&gt;
                          &lt;/batch:retry-listeners&gt;
                          &lt;batch:listeners&gt;
                              &lt;batch:listener&gt;
                                  &lt;bean id=&quot;midxProcessSkipListener&quot; class=&quot;de.axa.batch.ecmcm.cmab.core.batch.listener.CmabDbSkipListener&quot; scope=&quot;step&quot;&gt;
                                      &lt;constructor-arg index=&quot;0&quot; value=&quot;#{jobParameters['errorStatus']}&quot; type=&quot;java.lang.String&quot;/&gt;
                                  &lt;/bean&gt;
                              &lt;/batch:listener&gt;
                          &lt;/batch:listeners&gt;
                      &lt;/batch:chunk&gt;
                      &lt;batch:transaction-attributes isolation=&quot;SERIALIZABLE&quot; propagation=&quot;MANDATORY&quot; timeout=&quot;${cmab.jta.usertransaction.timeout}&quot;/&gt;
                      &lt;batch:listeners&gt;
                          &lt;batch:listener ref=&quot;midxStepListener&quot;/&gt;
                          &lt;batch:listener&gt;
                              &lt;bean id=&quot;cmabChunkListener&quot; class=&quot;de.axa.batch.ecmcm.cmab.core.batch.listener.CmabChunkListener&quot; scope=&quot;step&quot;/&gt;
                          &lt;/batch:listener&gt;
                      &lt;/batch:listeners&gt;
               &lt;/batch:tasklet&gt;
        &lt;/batch:step&gt;
  </code></pre>
  <p>The tasklet runs with a JtaTransaction manger (Atomikos, name=&quot;transactionManager&quot;).<br/>
  Now my question:<br/>
  Is this transaction manager &quot;delegate&quot; to the chunk-process? <br/>
  Why I'm asking this? If I set the transaction-attributes (see chunk) to propagation level &quot;MANDATORY&quot; the chunk process aborted with the error that no transaction is available.
  Therefore it left me confused because I thought that the tasklet transaction specification implies that the chunk running within this tasklet transaction, too.</p>
  <p>Furthermore I intended to run the application within a cloud system with more than one pod. <br/>The processDbIemReaderJdbs fetches via a StoredProcedureItemReader Items with a &quot;FOR UPDATE SKIP LOCKED&quot; from a PostgresDB.<br/>
  So my intention is to run the <strong>hole</strong> chunk, means also the reader, within <strong>one</strong> transaction in order to block the reader resultSet to other POD-Processes.</p>