We have several transaction managers ( WebsphereUOWTransactionManager and DatasourceTransactionManager ) and use Mybatis and NamedParameterJdbcTemplate (outdated code)
The code used to work and the changes made consist of moving @Transactional to the service level and removing sqlsession.commit from mybatis code.
But now there is a problem when the executable code ( JdbcTemplate ) is executed.
Mistake
20170427 19:22:02.045 [SimpleThreadPoolWorker-2] DEBUG osbcrdJdbcStepExecutionDao
I added @Transactional to the InitializingTasklet.execute (...) method
Any help on this is greatly appreciated. Also, if any other code is required, let us know.
thanks
EDIT 3:
serviceBeans.xml
<tx:advice id="txServiceAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="runJob" propagation="REQUIRED" rollback-for="Throwable" isolation="READ_COMMITTED" /> </tx:attributes> </tx:advice> <bean id="txManager" class="org.springframework.transaction.jta.WebSphereUowTransactionManager" /> <tx:annotation-driven transaction-manager="txManager" />
EDIT 2:
I have removed several transaction managers and now I only have WebspereUOWTransactionManager
EDIT
Additional code:
BatchServiceImpl (Added by @Transactional):
@Override @Transactional(value = "transactionManager", rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) public void launchJob(JobLaunchRequest request) throws ServiceException { try { logger.info("Launching job: " + request.getJobParameters().toString()); jobLauncher.runAll(request.getJobParameters()); } catch (Exception e) { throw new RuntimeException(e); } }
Code that calls DAO:
public class ParameterBasedCompositeJobLauncher implements CompositeJobLauncher, InitializingBean { public Collection<JobExecution> runAll(final Collection<JobExecutionParameters> jobParameterSet) throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException { .... jobRunDao.updateJobStatus(batchId, jobRunStatus); .... } }
applicationContext.xml
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRES_NEW" rollback-for="Exception" isolation="READ_COMMITTED" /> <tx:method name="update*" propagation="REQUIRES_NEW" rollback-for="Exception" isolation="READ_COMMITTED" /> </tx:attributes> </tx:advice>
spring -dataSource.xml
<bean id="transactionManager" class="org.springframework.transaction.jta.WebSphereUowTransactionManager" /> <tx:annotation-driven transaction-manager="transactionManager" /> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" c:dataSource-ref="dataSource" />
spring -launch-context.xml
<bean id="jobLauncher" class="com.abc.core.support.ParameterBasedCompositeJobLauncher"> <property name="jobRepository" ref="jobRepository" /> <property name="taskExecutor" ref="taskExecutor"/> <property name="jobLocator" ref="jobRegistry" /> <property name="jobRunDao" ref="jobRunDao"/> <property name="forwardJobClient" ref="integration-forwardJobClient"/> <property name="responseFileGenerator" ref="responseFileGenerator"/> </bean> <bean class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor"> <property name="jobRegistry" ref="jobRegistry"/> </bean> <bean id="jobRepository" p:dataSource-ref="dataSource" p:transactionManager-ref="transactionManager" p:lobHandler-ref="lobHandler" p:tablePrefix="${SCHEMA}.BATCH_" p:isolationLevelForCreate="ISOLATION_READ_COMMITTED" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"/>