Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

patrones:excepciones [2012/10/01 23:06]
admin [Pasar el problema hacia arriba]
patrones:excepciones [2016/07/03 20:02] (actual)
Línea 169: Línea 169:
 La solución a este problema consiste simplemente en leerse la documentación para ver cuando se lanza una excepción unchecked , que debería haber sido Checked, para capturarla y hacer el correcto tratamiento con ella. La solución a este problema consiste simplemente en leerse la documentación para ver cuando se lanza una excepción unchecked , que debería haber sido Checked, para capturarla y hacer el correcto tratamiento con ella.
  
-Mas información sobre la excepción <javadoc jee6>javax.validation.ConstraintViolationException|ConstraintViolationException</javadoc> y como solucionar el problema lo tenemos en [[unidades:07_arquitectura:03_excepciones]]+Mas información sobre la excepción <javadoc jee6>javax.validation.ConstraintViolationException|ConstraintViolationException</javadoc> y como solucionar el problema lo tenemos en [[unidades:07_arquitectura:02_excepciones]]
 ===== Formas erróneas de tratar las excepciones ===== ===== Formas erróneas de tratar las excepciones =====
 Veamos ahora una serie de errores que se cometen al tratar las excepciones. Veamos ahora una serie de errores que se cometen al tratar las excepciones.
Línea 192: Línea 192:
  
 ==== Crear una excepción inutil ==== ==== Crear una excepción inutil ====
-Otro segundo error es crear una nueva excepción que no aporta nada respecto a ''RuntimeException'' y usarla en vez de ''RuntimeException''+Otro segundo error es crear una nueva excepción **generica** (( No me refiero a excepciones concretas que tienen significado específico como ''NullPointerException'' )) que no aporta nada respecto a ''RuntimeException'' (( Lo mismo se aplica a Exception )) y usarla en vez de ''RuntimeException''
  
 <code java 1> <code java 1>
Línea 243: Línea 243:
 Vemos en la línea 4 como no se realiza ninguna acción al capturar la excepción, por lo tanto la ejecución seguirá como si no hubiera pasado nada. Vemos en la línea 4 como no se realiza ninguna acción al capturar la excepción, por lo tanto la ejecución seguirá como si no hubiera pasado nada.
  
-==== Trazas ==== +==== Log ==== 
-Acabamos de ver en el apartado anterior que nunca (( Siempre hay excepciones para todo )) se debe ignorar la excepción. Una forma de ignorarla pero que aparenta ser mejor solución es mostrar la traza del error pero sin hacer nada mas.+Acabamos de ver en el apartado anterior que nunca (( Siempre hay //excepciones// para todo )) se debe ignorar la excepción. Una forma de ignorarla pero que aparenta ser mejor solución es guardar en el log la excepción que se ha producido pero sin hacer nada mas.
  
 <code java 1> <code java 1>
Línea 254: Línea 254:
 </code> </code>
  
-En la línea 4 guardamos en el log la traza de la excepción.+En la línea 4 guardamos en el log la excepción pero el programa sigue ejecutándose. Como ya hemos comentado no debería seguir la ejecución del programa puesto que los datos pueden haber quedado en un estado erróneo. 
 + 
 +La idea de guardar en el log la excepción es buena por si misma. Sin embargo no suele ser necesario guardarla explícitamente ya que en muchas ocasiones ya se guarda automáticamente. Por ejemplo en aplicaciones Web , el propio contenedor al detectar ((Siempre que no la detengamos antes )) una excepción guardará en el log la excepción que se ha producido. 
 + 
 +==== Consola  ==== 
 +Otra forma erronea de guardar las excepciones consiste en mostrar la traza del error por la consola.
  
 <code java 1> <code java 1>
Línea 264: Línea 269:
 </code> </code>
  
-En la línea 4 mostramos por pantalla la traza de la excepción.+En la línea 4 mostramos por la consola la traza de la excepción pero el programa sigue ejecutándose. Como ya se ha dicho no debería seguir la ejecución del programa puesto que los datos pueden haber quedado en un estado erróneo.
  
-Es ambos casos otra vez estamos ignorando la excepción ya que la ejecución del programa continua a pesar de haber habido un problema. Y como ya hemos comentado no debería seguir la ejecución del programa puesto que los datos pueden haber quedado en un estado erróneo.+En aplicaciones Web o aplicaciones de Ventanas , esta opción tiene menos sentido aun que la opción del log, ya que guardando la traza en un fichero de log está mucho más accesible para poder averiguar el origen del problema que mostrándolo por consola ya que la consola la puede cerrar el usuario y perder toda la traza o simplemente que no tengamos acceso a la consola. 
 + 
 +==== Imprimirla ==== 
 +Por último pero no por ello menos usada está la //técnica// de imprimir el mensaje de la excepción. 
 + 
 +<code java 1> 
 +try { 
 +    double c=matematicas.dividir(-1.6, 0); 
 +} catch (RuntimeException ex) { 
 +    System.out.println("Falló al dividir"); 
 +
 +</code>
  
-Por otro lado en las aplicaciones Web no suele ser necesario guardar en el log la excepción ya que lo suele hacer automáticamente el servidor de aplicaciones.+Esta forma tiene los mismos problemas del anterior de imprimirla por consola pero ésta es aun peor, hemos perdido toda la información de la excepción.
  
 ===== Mejoras en el tratamiento de excepciones ===== ===== Mejoras en el tratamiento de excepciones =====
Línea 449: Línea 465:
  
 Por fin con este ultimo truco hemos conseguido simplificar la traza con todas las excepciones. Por fin con este ultimo truco hemos conseguido simplificar la traza con todas las excepciones.
- 
-<note> 
-Puede parecer un poco exagerado querer limpiar la traza para dejarla mas clara , pero en programas muy extensos se acumulan muchas excepciones dentro de otras excepciones y al final queda poco claro que ha ocurrido viendo la traza. 
- 
-Pero si no quieres complicar el código, usa simplemente la solución anterior a ésta que queda todo más estándar. 
-</note> 
  
 ===== Referencias ===== ===== Referencias =====
Línea 463: Línea 473:
   * [[http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html|The Java Tutorials.Unchecked Exceptions—The Controversy]]   * [[http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html|The Java Tutorials.Unchecked Exceptions—The Controversy]]
   * [[http://www.gamlor.info/wordpress/2010/02/throwing-checked-excpetions-like-unchecked-exceptions-in-java/|Throwing Checked Exceptions Like Unchecked Exceptions in Java]]   * [[http://www.gamlor.info/wordpress/2010/02/throwing-checked-excpetions-like-unchecked-exceptions-in-java/|Throwing Checked Exceptions Like Unchecked Exceptions in Java]]
 +  * [[http://www.manageability.org/blog/stuff/exceptional-exception-handling-techniques|13 Exceptional Exception Handling Techniques]]
patrones/excepciones.1349125600.txt.gz · Última modificación: 2016/07/03 20:18 (editor externo)
Ir hasta arriba
CC Attribution-Noncommercial-Share Alike 3.0 Unported
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0