Declarative Transaction while using JOTM
Hi,
I have having some problem while using Declarative transaction. I am
using JOTM as we have to deal with 2 different resources ASA / Oracle.
My bussiness Object looks like:
------ Replication.java --------------------
public void replicateTable(pram1,pram1.) throws DataAccessException{
runPreprocess(procedureName)
doDataTransfer(srcTable,dstTable);
runPostProcess(procedureName);
}
private runPreprocess(procedureName) throws DataAccessException{
result = asaDao.runProcess(procedureName);
if (result == o) throw new DBException("Pre process Failed");
}
private doDataTransfer(tabName1,tabName2) throws DataAccessException{
asaDao.readData(tabName1);
oracleDao.writeData(tabName2);
}
private runPostProcess(procedureName) throws DataAccessException{
result = oracleDao.runProcess(procedureName);
if (result == o) throw new DBException("Pre process Failed");
}
----END of Replication.java --------------------
--------------Dao -------------------------
public List readData(tableName) throws DataAccessException{
JdbcTemplate jdbc = new JdbcTemplate(this.dataSource);
return jdbc.query(sql,params,new myHandler());
}
public int[] writeData(tableName,data) throws DataAccessException{
JdbcTemplate jdbc = new JdbcTemplate(this.dataSource);
jdbc.batchUpdate(sql,new BatchSetter(data));
}
public String runProcess(processName) throws DataAccessException{
JdbcTemplate jdbc = new JdbcTemplate(this.dataSource);
Process pr = new Process(this.dataSource,processName);
return pr.execute();
}
------------END of DAO ----------------------
------------------jReplication.xml -----------------
<bean id="asaDao" class="com.osg.jreplication.dao.impl.ReplicationDa o">
<property name="dataSource">
<ref local="asaDataSource"/>
</property>
</bean>
<bean id="oraDao" class="com.osg.jreplication.dao.impl.ReplicationDa o" >
<property name="dataSource">
<ref local="oracleDataSource"/>
</property>
</bean>
<bean id="jReplication" class="com.osg.jreplication.process.Replication">
<property name="asaReplicationDao">
<ref bean="asaDao"/>
</property>
<property name="oraReplicationDao">
<ref bean="oraDao"/>
</property>
<property name="oraSetUpDao">
<ref bean="setUpDao"/>
</property>
<property name="rowsUpperLimit">
<value>${maxRow.limit}</value>
</property>
</bean>
<bean id="repTransactionManager" class="org.springframework.transaction.jta.JtaTran sactionManager">
<property name="userTransaction">
<ref bean="jotm"/>
</property>
</bean>
<bean id="repBusinessObject" class="org.springframework.transaction.interceptor .TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="repTransactionManager"/>
</property>
<property name="target">
<bean class="com.osg.jreplication.process.Replication"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="replicateTable">PROPAGATION_REQUIRED,-DataAccessException,-DBException</prop>
</props>
</property>
</bean>
-------------- END of jReplication.xml -------
My problem is Declarative transaction is not working. In above code when
PostProcess fails, data written is not rolled back.
Is there any thing wrong in above configuration, or am I am over looking some thing here.?
Please help. Any suggestion will be much appreciated.
Thanks in advance.
Sanjeev[/list]