Foros del Web » Programación para mayores de 30 ;) » Java »

Problemas spring/mybatis @Transactional

Estas en el tema de Problemas spring/mybatis @Transactional en el foro de Java en Foros del Web. Buenas a todos, Lo primero de todo soy nuevo por este foro, así que perdonar si cometo algún error de novato. Bueno al tema. Estoy ...
  #1 (permalink)  
Antiguo 06/02/2013, 06:49
 
Fecha de Ingreso: febrero-2013
Mensajes: 1
Antigüedad: 11 años, 3 meses
Puntos: 0
Información Problemas spring/mybatis @Transactional

Buenas a todos,
Lo primero de todo soy nuevo por este foro, así que perdonar si cometo algún error de novato.

Bueno al tema.
Estoy teniendo un problema con la configuración de Spring / MyBatis en las transacciones que maneja Spring (Eso es decisión mia ya que quiero que el contenedor Spring sea el que maneje la transaccionalidad en vez de myBatis)


En el fichero de configuración para myBatis tengo lo siguiente
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:annotation-config />

<!--Las transacciones seran declaradas usando la anotacion "@Transactional" -->
<tx:annotation-driven transaction-manager="transactionManager"/>


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

<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<beans:property name="mapperLocations"
value="classpath:/com/personal/basket/dao/mybatis/*.xml" />
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="transactionFactory" ref="springManagedTransactionFactory" />
</beans:bean>

<beans:bean class="org.mybatis.spring.transaction.SpringManage dTransactionFactory" id="springManagedTransactionFactory">
<beans:constructor-arg index="0" ref="dataSource" />
</beans:bean>


<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<beans:property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<beans:property name="url" value="jdbc:hsqldb:hsql://localhost/testdb" />
<beans:property name="username" value="sa" />
<beans:property name="password" value="" />
<beans:property name="initialSize" value="6"/>
<beans:property name="maxActive" value="10"/>
</beans:bean>


<!-- Mapeo de la tabla -->

<beans:bean id="configuracionMapper" class="org.mybatis.spring.mapper.MapperFactoryBean ">
<beans:property name="mapperInterface" value="com.personal.basket.dao.ConfiguracionMapper " />
<beans:property name="sqlSessionFactory" ref="sqlSessionFactory" />
</beans:bean>

</beans:beans>

Hasta aquí el fichero de configuración de myBatis en Spring.


@Service("catalogoServicio")
public class CatalogoServicios implements ICatalogoServicios{

@Autowired
ConfiguracionMapper configuracionMapper;

@Transactional
public void f1()throws Exception{

......
......
......

ConfiguracionDTO cDTO = new ConfiguracionDTO();
cDTO.setParametro("A");
cDTO.setValor("b");
configuracionMapper.insert(cDTO);

......
......
......
}

}

Pues si elimino del código @Transactional todo funciona bien pero si lo dejo puesto me da un problema al arrancar el servidor de aplicaciones.

GRAVE: StandardWrapper.Throwable
org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'homeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationExce ption: Could not autowire field: com.personal.basket.servicios.CatalogoServicios com.personal.basket.HomeController.catalogoServici o; nested exception is java.lang.IllegalArgumentException: Can not set com.personal.basket.servicios.CatalogoServicios field com.personal.basket.HomeController.catalogoServici o to $Proxy15
at org.springframework.beans.factory.annotation.Autow iredAnnotationBeanPostProcessor.postProcessPropert yValues(AutowiredAnnotationBeanPostProcessor.java: 287)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.populateBean(AbstractAu towireCapableBeanFactory.java:1106)


Al eliminar @Transactional el problema es que si falla una operación dentro del método todo lo anterior si se han realizado insert/update/delete se queda commiteado y eso no puede ser. Así pues, necesito el @Transactional

Un saludo y gracias.
Iván

Etiquetas: ibatis, spring
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:58.