My reader class pass a list of objects into my writer class. My writer class insert/update many records in db. Suppose if i am throwing a business exception thrown for third record , i want to rollback prevoius two records inserted. This is not happening for me and the job.xml is given below:
Here com.MyReader extends DelegatingItemReader and com.MyWriter implements ItemWriter, ItemStream.Code:<bean id="test" parent="skipLimitStep"> <property name="streams"> <list> <ref bean="headerReader" /> </list> </property> <property name="commitInterval" value="5" /> <property name="skipLimit" value="20"/> <property name="itemReader"> <bean class="com.MyReader"> <property name="itemReader" ref="headerReader" /> <property name="manager" ref="manager" /> </bean> </property> <property name="itemWriter"> <bean class="org.springframework.batch.item.database.HibernateAwareItemWriter"> <property name="sessionFactory" ref="sessionFactory" /> <property name="delegate" ref="myWriter" /> </bean> </property> </bean> <bean id="headerReader" class="org.springframework.batch.item.database.HibernateCursorItemReader"> <property name="queryString"> <value>${SOME_QUERY}</value> </property> <property name="sessionFactory" ref="sessionFactory" /> <property name="saveState" value="false" /> </bean> <bean id="myWriter" class="com.MyWriter"> <property name="manager" ref="manager" /> </bean>
I tried by adding transaction attribute also.
Should i define any transaction boundary using AOP ?
I am using the same simple-job-launcher-context.xml with oracle as db.
Kindly please tell me how can i achieve rollback here?


Reply With Quote