ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "bala r" <bala...@gmail.com>
Subject Re: Programmatic Transaction for Spring and Ibatis SqlMapClient
Date Wed, 27 Aug 2008 10:31:05 GMT
Hi,

Passing TransactionStatus to txManager.commit(TransactionStatus), if any
runtime exception occurs it said rollbackOnly to true.
As i mentioned Rollback works fine if i call IbatisDAO directly in the
ServiceLayer(TransactionProcessor), But i put one more Layer
IbatisDAOProcessor between Service and IBatisDAO then the transaction
rollback doesn't work..

I also tried the following code but rollback is not happening.....
}catch( MultipleErrorsException me){
           status.setRollBackOnly();
          txManager.commit(status);
      }


I guess problem here is when i call a additional layer between service and
ibatisDAO, new transaction is created in the addional layer and the  commits
happening right after the IBatisDAO call.
How do i foce to use the same transaction which i created in ServiceLayer to
IbatisDAO?



Thanks
Bala

On Tue, Aug 26, 2008 at 9:00 PM, Richard Yee <ryee@cruzio.com> wrote:

> What is this code doing?
>
>      }catch(MultipleErrorsException me){
>           txManager.commit(status);
>       }
>
> Aren't you committing when an exception occurs?
>
> -R
>
>
>
> bala r wrote:
>
>> Hi,
>>
>> I am using Spring Programmatic transaction in the service layer and
>>  service layer calls IBatisDAO(sqlMapClientTemplate) to insert/update.
>> Transaction Rollback and commit works fine.
>> But if i introduce any new layer between Service and IBatisDAO the
>> transaction rollback is not working...
>>
>> Here is the code sniplet.
>>
>>        DefaultTransactionDefinition def = new
>> DefaultTransactionDefinition();
>>
>>  def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
>>        TransactionStatus status = txManager.getTransaction(def);
>>        try{
>>                ibatisDAO.process(dataMap, processorId);  //This is direct
>> call to ibatisDAO and transaction process works fine.
>>            //ibatisDAOProcessor.process(dataMap);   // This is another
>> layer between Service and IbatisDAO.transaction rollback doesnt work.
>>          }catch(MultipleErrorsException me){
>>            txManager.commit(status);
>>        }
>>        txManager.commit(status);
>>
>>
>> Spring config
>> ------------------------------
>> <bean name="txManager"
>>
>>  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
>>        <property name="dataSource">
>>            <ref bean="inetDs"/>
>>        </property>
>>    </bean>
>>
>> <bean id="sqlMap"
>>          class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
>>        <property name="configLocation">
>>            <value>sqlMapConfig.xml</value>
>>        </property>
>>        <property name="dataSource">
>>            <ref bean="datasource"/>
>>        </property>
>>        <property name="useTransactionAwareDataSource">
>>            <value>true</value>
>>        </property>
>>        <property name="transactionConfigClass">
>>
>>  <value>com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig</value>
>>        </property>
>>        <property name="transactionConfigProperties">
>>            <props>
>>                <prop key="DefaultAutoCommit">false</prop>
>>            </props>
>>        </property>
>>      </bean>
>>
>> Thanks in Advance..
>>
>
>

Mime
View raw message