La pregunta SCBCD del día: Application Exceptions

(Imagen: Paul Cézanne - Jugadores de cartas)


Which is the correct way of defining a runtime exception as an EJB 3.0 application exception?

  • public class MyAppException extends javax.ejb.EJBException
  • @ApplicationException public class MyAppException extends java.rmi.RemoteException
  • public class MyAppException extends java.lang.RuntimeException
  • @ApplicationException public class MyAppException extends java.lang.RuntimeException

Una excepción de aplicación se lanza en respuesta a un error de lógica de negocio,y no a un error de sistema. Las excepciones de aplicación son siempre  enviadas al cliente sin ser "envueltas" en excepciones del tipo EJBException(la primera no es!). Por defecto, no provocan rollback en la transacción. En este caso, el cliente tiene la oportunidad de recuperarse después de que la excepción de aplicación ha sido lanzada. Las excepciones de aplicación no heredan de RuntimeException o de RemoteException (What?!... paciencia, esto lo explicamos luego)

La anotación @javax.ejb.ApplicationException se puede usar para forzar a una excepción de aplicación a dar rollback a la transacción automáticamente (@ApplicationException(rollback=true)). Esta anotación también puede usarse en subclases de java.lang.RuntimeException y java.rmi.RemoteException. Nos sirve para evitar que una excepción RuntimeException sea "envuelta" en una EJBException,o para que una subclase de RemoteException no de rollback a la transacción, por ejemplo.

Entonces, nos quedamos con la cuarta....no?


Pregunta tomada de ExamWorx

Publicar un comentario