Tengo un proyecto en el que estoy utilizando spring 1.2, ibatis 2.3 y Tomcat 6
Estoy configurando las transacciones para que se manejen mediante Spring, sin embargo, no esta funcionando correctamente.
Lo que quiero es que las transacciones esten a nivel de servicio y no a nivel DAO (para no poner toda la lógica de negocio en el DAO).
El problema es que esta generando dos transacciones distintas para cada inserción, por tanto, si genero un error, no hace el rollback y si lo dejo que ponga el read uncommited, da un error de restricción de integridad (no existe la Foreign key de la primera inserción)
Abajo mi código:
transaction-context:
Código XML:
Ver original
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean> <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes"> <props> <prop key="insert*"> PROPAGATION_REQUIRED, ISOLATION_READ_UNCOMMITTED,-BDException,-TablonException </prop> </props> <!--siguientes prop keys...--> </property> </bean> <!-- datasource --> <bean id="dataSource" class="com.ibatis.common.jdbc.SimpleDataSource" destroy-method="close"> <constructor-arg> <map> <entry key="JDBC.Driver"> <value>${jdbc.driverClassName}</value> </entry> <entry key="JDBC.ConnectionURL"> <value>${jdbc.url}</value> </entry> <entry key="JDBC.Username"> <value>${jdbc.username}</value> </entry> <entry key="JDBC.Password"> <value>${jdbc.password}</value> </entry> <entry key="JDBC.DefaultAutoCommit"> <value>false</value> </entry> </map> </constructor-arg> </bean>
en persistence-comu-context:
Código XML:
Ver original
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation"> <value> /WEB-INF/config/sqlMapConfig.xml </value> </property> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean> <!-- DAOS: --> <bean id="UnDAOTarget" class="myPackage.dao.impl.UnDAOImpl" > <property name="sqlMapClient"> <ref bean="sqlMapClient " /> </property> <property name="dataSource" ref="dataSource" /> </bean>