Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Como controlar excepciones correctamente

Buenos días,

tengo una duda sobre lo que es el tratamiento de las excepciones en las distintas capa de una aplicación.

En mi aplicación tengo 3 capas, Actions (de Struts2), capa de manager y capa de servicios.

El flujo de la aplicacion es, el action llama a un metodo del manager, el manager a un metodo del servicio y luego se van devolviendo las llamadas de nuevo hasta el Action. Los metodos de servicio pueden provocar excepciones.

Mi duda es si en caso de una posible excepcion esa excepcion ha de ser propagada hasta la capa de action. ¿Es decir he de tener un try/catch en la capa de Action? ¿O no corresponde? En caso contrario, ¿como deberia de "cortar" esa propagacion?

Gracias!

septiembre 1, 2014 | Unregistered Commenterpedro

Las excepciones se deben propagar, por regla general, en los API, y se deben capturar por el consumidor final, o donde sea necesario saber que se ha lanzado una excepción, por ejemplo, para alimentar un log.

septiembre 1, 2014 | Registered Commenterchoces

Yo como regla general lo que suelo hacer es crearme una excepcion padre y todas las excepciones controladas que tenga mi aplicacion como hijas de esta, para lanzarlas como errores controlados que yo me encargue de lanzar en mi App: Errores de validación de parámetros de entrada, creación de un objeto, etc...

public class MyAppException extends Exception {....

public class MyAppInputParamsValidationException extends MyAppException {..

public class MyAppCreateZoneException extends MyAppException {..

Y yo siempre propagao desde las capas bajas es decir los DAOS, Managers, etc... y capturo en la capa donde debo realizar la respuesta así la puedo customizar. En tu caso los actions.

Por supuesto diferencio entre error controlado y error inexperado.

public class ActionXXXXXX .....
......

try{....

}catch (MyAppExceptionException e){
log.warn("CONTROLLED EXCEPTION ActionXXXXX"+Thread.currentThread().getId()+":"+e.getMessage());
.......

}catch(Exception e){

log.error("Un-Expected Error ActionXXXXX:"+e.getMessage());
e.printStackTrace();

Creo que como política base es suficiente, luego la puedes adaptar a tus necesidades.

septiembre 2, 2014 | Registered Commenterantuansoft