Hi,
I am trying to run the job in the transactional method. The method is as below :
The application transactional attributes are handled byCode:@Transactional private void runJob(CbValidationJob jb) { System.out.println("In For rubJob()"); JobParametersBuilder parameters = new JobParametersBuilder() .addString("inputResource", jb.getInputResource()) .addString("user", jb.getUserId()).addString("bu", jb.getBu()) .addString("batch_type", jb.getCardType()) .addString("client_ip", jb.getClientIp()) .addDate("date", new Date()); try { JobExecution jobExecution = jobLauncher.run(job, parameters.toJobParameters()); logger.info("Job ID : " + jobExecution.getId() + "Started with file :" + jb.getInputResource()); jb.setJobStatus("SHEDULED"); jb.setJobNo(jobExecution.getId()); cbValidationJobDao.merge(jb); } catch (Exception e) { logger.info(e.getMessage()); e.printStackTrace(); } }
The error isCode:<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />
The jobrepository is configured using :Code:2013-02-12 14:47:20,076 [scheduler-1] INFO shedular - Existing transaction detected in JobRepository. Please fix this and try again (e.g. remove @Transactional annotations from client). java.lang.IllegalStateException: Existing transaction detected in JobRepository. Please fix this and try again (e.g. remove @Transactional annotations from client). at org.springframework.batch.core.repository.support.AbstractJobRepositoryFactoryBean$1.invoke(AbstractJobRepositoryFactoryBean.java:164) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy83.createJobExecution(Unknown Source) at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:111) at in.mahadiscom.batch.ValidationJobSchedular.runJob(ValidationJobSchedular.java:75) at in.mahadiscom.batch.ValidationJobSchedular.scheduleJob(ValidationJobSchedular.java:55) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:64) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:53) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722)
If the @Transactional attribute is removed the Job runs , but not able to update database status in the database.Code:<bean id="jobRepository" init-method="" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="transactionManager" ref="transactionManager" /> <property name="isolationLevelForCreate" value="ISOLATION_DEFAULT" /> <property name="databaseType" value="sybase" /> <property name="tablePrefix" value="billing.BATCH_" /> <property name="lobHandler" ref="lobHandler" /> </bean>
Any alternative configuration is required.
Thanks
Narendra Dhande


Reply With Quote