Estoy usando CMT en beans de sesión sin estado EJB3. También creé mi propia excepción con la anotación "@ApplicationException (rollback = true)".Retroceso de transacción EJB3
¿Tengo que usar "context.setRollbackOnly()" cuando quiero deshacer la transacción?
¿Puedo simplemente retrotraer la transacción arrojando una excepción dentro del método público en el bean?
Si es así (la respuesta a Q # 2 es sí) ¿Tengo que arrojar la excepción del método declarando la excepción en el método o bastará con arrojar una excepción dentro del método y manejarlo? está dentro del mismo método en sí? (No quiero propagar la excepción al siguiente nivel. Solo quiero deshacer la excepción.)
Gracias de antemano. ;)
"Si detecta una excepción marcada dentro del código, debe usar setRollbackOnly para deshacer la transacción". ¿Se puede lanzar la misma excepción y deshacer la transacción? –
Puede lanzar la misma excepción con la cláusula throws, pero la transacción no se revierte. Si desea deshacer la transacción en este caso, debe agregar @ApplicationException (rollback = true) a su excepción. Otra forma es ajustar la excepción marcada dentro de una excepción no verificada (por ejemplo, RuntimeException). Pero de esta manera no se prefiere realmente, porque si se lanza una RuntimeException, el contenedor descarta la instancia de bean y crea una nueva. – Steve
Solo estaba viendo esta respuesta por razones similares y quiero señalar que el libro al que enlazas ya no se ofrece en su totalidad en ese sitio, y es de 2006, por lo que está terriblemente anticuado y probablemente no sea de mucha utilidad en JEE5 y contextos JEE6. – BillR