Hola a todos:

Soy nuevo en este foro. Mi nombre es Adolfo.

Tengo un problema con las transacciones de Spring, y lo envío a este foro, para ver si alguien me puede ayudar a solucionarlo.

Estoy atascado en un punto donde no sé salir, pues no me da error, pero no hace lo que se supone que debería hacer.

Tengo un DAO (PersonaDAO) que hereda de HibernateDaoSupport con estos métodos:

  public void save(final Persona p) {
   this.getHibernateTemplate().saveOrUpdate(p);
  }

  public void savePersonas(final List<Persona> personas) {
    for (final Persona persona : personas) {
     this.save(persona);
    }
  }

Y luego en el programa principal, llamo a savePersonas, con un List de objetos de tipo Persona, con uno de ellos mal que salta una excepción al salvarlo.

  final Persona p1 = new Persona();
  p1.setEdad(9);
  p1.setNombre("adolfo");
  personas.add(p1);

  final Persona p2 = new Persona();
  p2.setEdad(9);
  p2.setNombre(null); // va a dar error al insertar y debería hacer rollback
  personas.add(p2);

  dao.savePersonas(personas);

Entiendo que si añado transaccionalidad al método save mediante AOP, debería hacer un rollback y no guardar ninguno de los objetos que le paso en el List.

Pero no lo hace, me guarda el primero (que no da error) y luego salta la excepción y termina el programa.

Adjunto el proyecto entero, con las clases y los ficheros de configuración, tanto de Spring como de Hibernate. He hecho varias pruebas (spring-1.xml y spring-2.xml) y ninguna me ha funcionado.

Las librerías que uso son las siguientes:

  antlr-2.7.7.jar
  aopalliance-1.0.jar
  aspectjrt-1.6.12.jar
  aspectjweaver-1.6.12.jar
  cglib-nodep-2.2.2.jar
  commons-collections-3.2.1.jar
  commons-dbcp-1.4.jar
  commons-logging-1.1.1.jar
  commons-pool-1.6.jar
  dom4j-1.6.1.jar
  hibernate-3.2.7.ga.jar
  jta-1.1.jar
  mysql-connector-java-5.1.19.jar
  spring-aop-2.5.6.SEC03.jar
  spring-beans-2.5.6.SEC03.jar
  spring-context-2.5.6.SEC03.jar
  spring-core-2.5.6.SEC03.jar
  spring-dao-2.0.8.jar
  spring-jdbc-2.5.6.SEC03.jar
  spring-orm-2.5.6.SEC03.jar
  spring-tx-2.5.6.SEC03.jar

A ver si alguien me puedes echar una mano (aunque sea al cuello).

Un saludo.
Adolfo
-
No hay camino hacía el Software Libre. El Software Libre es el camino.
Sígueme en Twitter (@asanzdiego)

AdjuntoTamaño
spring-07-tx.zip12.78 KB

Es un problema de entorno. En ubuntu-10.04 no funciona y en windows-xp parece que sí. En otro momento pondré las versiones del jdk y de mysql que estaba utilizando en ubuntu-10.04 y que hacen que el ejemplo deje de funcionar.

Un saludo.
Adolfo
-
No hay camino hacía el Software Libre. El Software Libre es el camino.
Sígueme en Twitter (@asanzdiego)

Hola!

Lo que yo veo es que estás probando dos cosas, una DataSourceTxManager con un DAO de Hibernate que seguramente no está aplicando las transacciones y un HibernateTxManager que le dice que todas las tranasacciones serán de REQUIRED.

No se si está última surta efecto, sin embargo te recomiendo uses la config de AOP con el MAnager de Hibernate