Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > Control de trasaccion

Hola
HAsta ahroa en mi aplicacion tenia la siguiente arquitectura:
1.- EJB 3.1 (servia solametne de interface, acceso y controlaba la trasaccionalidad global del metodo)
2.- BO: donde tenia todo el negocio
3.- DAO: donde tenia solamente acceso a bbdd, sin nada de logica

El tema es que en los BO, en un solo metodo, tenia por ejemplos varios acceso a DAO para dependiendo del resultado hacer n inserciones o updates en bbdd
la transaccionalidad de esto al tenia controlada con anotaciones en el EJB para así, por ejemplo, invalidar todo si habia un error etc.
Ahora me han quitado esta capa de EJB y no e como controlar la transaccion, es decir:
suongamos que tengo un metodo BO que hace 3 consultas a 3 metodos de dao (en cada uno de estos hay una conexion a bbdd) y 5 inserciones y updates a bbdd. como en los DAO tengo la conexion no tengo un sitio conde controlar el commit y rollback.
Que soloucion se os ocurriria para controlar la trasaccion de tal maenra que si una llamada a los DAO desde el BO falle echar atrás el resto?

Gracias

julio 31, 2014 | Unregistered CommenterJanfry

Yo lo veo así:

En el BO te abres la conexión a la base de datos.
A los DAO les tienes que pasar la conexión como parámetro,(por ejemplo en el constructor)
El BO es el que se tiene que encargar de hacer el commit de la conexion o el rollback si toca.

Y MUY,MUY importante, en el BO tienes que tener un finally para cerrar la conexion o devolverla al pool (como lo tengas implementado)
Si no haces cuando salte una exception dentro de tu BO podrías dejarte la conexión abierta, lo que a la larga dejaría tirado tu servidor por falta de conexiones disponibles.

agosto 6, 2014 | Unregistered CommenterDavid

efectivamente como dice @david, la transaccionalidad la tienes que controlar tú, es decir tienes que encargarte de establecer la conexión y cerrarla en el BO y pasar ese objecto conexión a los DAOS que es donde se hacen las operaciones.

No sé si lo que usas es una aplicación web pero yo establecería la conexión cuando el usuario hace el primer acceso con un singleton y mantendría ese objeto para no instaciarlo cada vez que ese usuario se conecta que es lo que más penaliza crear las conexiones.

Una vez establecida la conexión haría lo mismo con los DAOS, tendría un DaoManager donde crearía una instancia de ellos en modo singleton pasando la conexión como parámetro y ya podría usarlos en los BO tranquilamente a través de métodos

agosto 6, 2014 | Registered Commenterantuansoft