Tengo un @Stateless
EJB con una interfaz @WebService
, usando transacciones administradas por contenedor, lo que significa que las transacciones son automáticamente confirmadas por el contenedor después de que se ha llamado a un método si no lanza una excepción del sistema.¿Cómo puedo detectar excepciones de la confirmación de transacciones gestionadas en contenedores?
Si trato de EntityManager.persist(...)
dos objetos con el mismo valor para una columna con una restricción única en él, el contenedor arrojará un PersistenceException
al cliente en la confirmación fuera de mi código. ¿Cómo atrapo esta excepción para que pueda volver a lanzar mi propia excepción de aplicación?
¿Debo comprometer la transacción manualmente en mis métodos para detectar excepciones en la confirmación? (¿Y es EntityManager.flush()
la forma correcta de hacerlo?) En caso afirmativo, ¿de qué sirve tener transacciones gestionadas en contenedores?
Gracias por responder. Lo resolví haciendo 'EntityManager.flush()' en un interceptor '@ AroundInvoke'. –
Eso podría funcionar a veces, pero tenga cuidado con los niveles de aislamiento. A menos que serialice todo, aún es posible obtener fallas cuando el tx se compromete. –