Identificarte

Versión Completa : Modelo de Fallos de un Software


Sponsored links
.




RogerJose
febrero 3, 2007, 08:52
Saludos amigos laneros :),

Mi idea con este tema es que discutamos sobre las mejores practicas para manejar las excepciones en java.

Por ejemplo: Al intentar realizar una consulta a la base de datos se puede producir una SQLException, pero esta pudo haber sido originada por diferentes causas, algunas de las mas comunes son:

- Perdida de conexion al servidor de Base de Datos (por x o y motivo).
- Intento escritura de un valor duplicado para un campo unico.
- Daño de la Base de datos.
- Inexistencia de la Base de Datos.

La clase SQLException ofrece el metodo getErrorCode() que devuelve el codigo del error que el vendedor (digase Oracle, PostGres, MySQL, entre otros) ha asociado a un determinado fallo.

Entonces mi duda es como manejar las excepciones para identificar la causa de la excepcion y segun esto reaccionar adecuadamente. Por ejemplo, como hacer para reintentar establecer conexion a la bd en caso que de haber perdido la conexion a la misma.

¿Seria una buena practica que al producirse una SQLException se lea el codigo del error, y segun este, tomar la accion mas adecuada?. El problema que veo es que cada dbms maneja diferentes codigos para los errores.

Alguien sabe donde puedo obtener informacion sobre este tema en particular.

Agradezco de antemano cualquier aporte a este tema.

-

Grissom.
febrero 4, 2007, 11:40
Las exepciones de SQL son fallos del sistema, lo que debería hacerse es mostrar un mensaje de error general en el cliente y hacer un log de la respectiva excepción. Los application servers hace esto automáticamente.

En el log, se mira entonces qué error ocurrió, el código de error es de gran ayuda en algunos casos, otros casos con el simple mensaje se puede deducir que va mal.

Para el código de error, según el motor de base de datos se mira en su documentación a qué corresponde, generalmente los motores traen su tabla de código/error/descripción.

Por razones de seguridad, en aplicaciones como las WEBs los detalles del error no se muestran. Si es una aplicación local los detalles dan una mala impresión, más información de la que necesita el usuario.


Un DAO (Data Access Object) en un application server generalmente tiene un código así:



try {
...
// Código JDBC
...
}

catch (SQLException ex) {
// NOTA: DataAccessException es una exepción
// propia y Unchecked (Descendiente de RuntimeException).
throw new DataAccessException(ex);
}



Existe otro tipo de excepciones que usted si debe gestionar en el cliente, aquellas que van relacionada a la lógica de negocio (Business Logic) ... este tipo de excepciones indican validaciones y controles de la incumbencia del usuario, ejemplo: CuentaSinFondoException, RetiroMayorAlSaldoException ...

RogerJose
febrero 4, 2007, 12:20
Gracias,

Depronto no fui claro con lo queria expresar.

Creo que NO es conveniente presentar un unico mensaje cada vez que se presente una SQLException, osea siempre que se produza presentar algo como No se pudo realizar la operacion, seria mejor personalizar el mensaje deacuerdo a la causa del error.

El punto es como despues de producida la excepcion, identificarla para presentar un mensaje adecuado al usuario. Es decir, seria util darle al usuario una idea del fallo que se ha producido y el porque, ejemplo:

- No se pudo establecer conexion con la base de datos
- El Numero de documento tal ya lo tiene otro Cliente

Asi el usuario tendra idea de que es lo que esta yendo mal con el sistema,y posteriormente tomar la accion adecuada, ya sea comunicarse con el administrador del sistema o rectificar el numero del documento de identidad (ejemplos anteriores).

-