Sigo recibiendo esta "sugerencia" de muchos desarrolladores una y otra vez. En mi experiencia, he encontrado que las EJBExceptions son adecuadas para "fin del mundo" desde la perspectiva de la instancia de bean (como cuando algo está tan mal que la instancia de bean no puede recuperarse por sí misma). Si una instancia puede recuperarse, creo que es mejor lanzar una excepción de aplicación.¿Por qué arrojar una EJBException es una práctica "recomendada"?
Aquí es el patrón que me encuentro con una y otra vez:
private SomeResource resource; ejbCreate: resource = allocateResource(...); omMessage: try { ... } catch (JMSException e) { throw new EJBException(e); } ejbRemove: freeResource(resource);
mi humilde opinión este es un anti patrón que causa pérdidas de recursos.
EDITAR: En concreto, la especificación EJB dice que si un grano produce una excepción de tiempo de ejecución (y el error EJBException es una excepción de tiempo de ejecución) del método de negocio, a continuación, el grano se descarta sin llamar ejbRemove en él.
Es éste un ejemplo relevante que no lance un error EJBException? ¿Cuáles son los casos relevantes cuando se debe lanzar EJBException?
@vinny_g: He agregado la explicación de su comentario sobre mi (ahora eliminada) "respuesta". –