todas marcadas manejo las heredar heredan excepciones excepcion ejemplo cual comprobadas como clase cachar java-ee exception-handling jboss transactions ejb-3.1

java-ee - marcadas - heredar excepciones java



JavaEE-EJB 3.1: ¿Podemos forzar la reversión de transacciones en excepciones marcadas? (1)

De acuerdo con la especificación ejb 3.1, también es posible especificar el atributo de reversión en el archivo descriptor de despliegue.

14.2.1 Excepciones de aplicación

Una excepción de aplicación no da como resultado marcar la transacción para reversión a menos que la anotación ApplicationException se aplique a la clase de excepción y se especifique con el valor del elemento rollback true o el elemento descriptor de implementación de excepción de aplicación para la excepción especifique el elemento rollback como verdadero.

Aquí puede verificar cómo incluir el elemento de excepción de aplicación en el archivo ejb-jar.xml. Creo que podría verse así:

<assembly-descriptor> <application-exception> <exception-class>java.lang.Exception</exception-class> <rollback>true</rollback> </application-exception> </assembly-descriptor>

Nunca probé esto (y no estoy diciendo que esto sea una buena idea) pero creo que esto debería funcionar ya que está respaldado por las especificaciones.

Sé que si un método EJB arroja una excepción marcada no hay reversión de transacción.

¿Pero hay una forma de forzar la reversión cuando hay una excepción comprobada sin tener que llamar a setRollbackOnly() en cada método o crear mi propia clase de excepción anotada con @ApplicationException(rollback=true) ?

Actualmente, todos nuestros métodos EJB están lanzando Exception ( mymethod() throws Exception ) y nos gustaría aplicar una solución rápida para deshacer la transacción cuando se lanza este tipo de excepción sin tener que modificar la firma de cada método.

¿Es posible modificando un parámetro en el servidor de aplicaciones (actualmente usando Jboss AS 7.1.1), usando una anotación en mis clases EJB o definiendo algún tipo de interceptor?

Gracias por cualquier ayuda ;)