Announcement Announcement Module
No announcement yet.
Transaction Rollback issue in Spring-IBatis Page Title Module
Move Remove Collapse
Conversation Detail Module
  • Filter
  • Time
  • Show
Clear All
new posts

  • Transaction Rollback issue in Spring-IBatis


    I am trying to do series of inserts in my Java application using Spring/iBatis.
    On exception, transaction rolls back successfully and none of inserts gets committed if i used the following settings in spring xml:

    <bean id="DerbyDBDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver" />
    <property name="url" value="jdbc:derby://localhost:1527/C:/db-derby-;" />
    <property name="initialSize" value="1" />
    <property name="maxActive" value="5" />
    <property name="maxIdle" value="5" />
    <property name="minIdle" value="1" />

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSou rceTransactionManager">
    <property name="dataSource" ref="DerbyDBDataSource"/>

    However if i use the following JNDI datasource settings instead of above datasource configuration, transaction NEVER rolls back. The insert statements always gets committed.

    <bean id="jndiDataSource"
    class="org.springframework.jndi.JndiObjectFactoryB ean">
    <property name="resourceRef"><value>true</value></property>
    <property name="jndiName">
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSou rceTransactionManager">
    <property name="dataSource" ref="jndiDataSource"/>

    My code structre is like this:
    public String insertAll(params){
    txManager = (PlatformTransactionManager) SpringHelper.instance().getBean("transactionManage r");
    DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    def.setPropagationBehavior(TransactionDefinition.P ROPAGATION_REQUIRED);
    // start a transaction
    TransactionStatus transactionStatus = txManager.getTransaction(def);

    Even though control goes to catch block above, whenver there is an exception, rollback method doesn't seem to have any effect. The data is still persisted in my derby database.

    I am using Websphere Application Server 6 + Spring 2.5 + iBatis + Derby (Derby Network Server (XA) Provider that uses the Derby Client)

    Any pointers on why transactions are not getting rolled back when there are exceptions...(NullPointer/sqlexception etc..)? Is it because of Derby database 10.6.2 version OR PlatformTransactionManager or is it because AppServer transaction manager is overriding Spring transaction manager? I also read somewhere that WebsphereUOWTransactionManager can be used but using this transaction manager gives me error: "No JTA UserTransaction available - programmatic PlatformTransactionManager.getTransaction usage not supported".
    So i am forced to use NON-JNDI way of setting the datasource which is not recommended in my organization. Please help.