Estoy desarrollando una aplicación web Java de tamaño medio con Struts como framework MVC y JDBC simple en Data Access Layer. He estado buscando las mejores prácticas de manejo de excepciones en una aplicación de este tipo. He encontrado varios artículos, algunos de ellos contradictorios, solo me hacen estar más confundido en lugar de dejar las cosas claras y simples. Algunos dicen que es mejor reutilizar las excepciones existentes en lugar de definir excepciones específicas de la aplicación, mientras que otras presentan una gran jerarquía de excepciones específicas de la aplicación por cada problema menor que pueda ocurrir en el sistema. Algunos dicen que es mejor no manejar excepciones en la capa de acceso a datos y delegarlas en la capa de servicio, otros dicen que las excepciones de la capa de acceso a datos deben capturarse localmente ya que delegarlas en la capa de servicio violaría la abstracción entre las dos capas. Y así.Manejo de excepciones en una aplicación web Java
Agradecería mucho que me informara acerca de los enlaces/nombres a los artículos/libros que presentan soluciones sólidas que le han funcionado en ese escenario. La solución debe borrar al menos los siguientes puntos con justificaciones:
- ¿Dónde se pueden atrapar las SQLExceptions?
- ¿Dónde deberían registrarse las excepciones?
- ¿Deben registrarse las excepciones sin marcar?
- ¿Deben capturarse las excepciones sin marcar en la capa de presentación y deben mostrarse al usuario?
- ¿Cómo se manejan las excepciones controladas, cuál de ellas se mostrará al usuario y cómo?
- ¿Cómo se debe usar una página de manejador de excepción global?
- ¿Cómo se debe usar struts ActionErrors en este contexto?
Gracias
Gracias por la respuesta. En relación con el n. ° 3, ¿cómo podemos detectar una excepción no controlada en Filtro, si el filtro escucha en la página de error? – craftsman
Se almacena como atributo de solicitud con el nombre 'exception'. Por otro lado, también puede manejar la excepción y reenviar a la página de error del filtro colocando 'chain.doFilter (request, response)' dentro de un bloque try/catch. – BalusC