2012-07-03 8 views
6

En la mayoría de los casos, es posible detectar excepciones en Java, incluso sin marcar. Sin embargo, no es necesariamente posible hacer algo al respecto (por ejemplo, memoria insuficiente).¿Cuándo se debe dejar que una aplicación se cuelgue debido a una excepción en Java (problema de diseño)?

Para otros casos, el problema que estoy tratando de resolver es el principio de diseño. Estoy tratando de establecer un principio de diseño o un conjunto de reglas que indiquen cuándo se debe renunciar a una situación excepcional, incluso si se detecta a tiempo. El objetivo es tratar de no bloquear la aplicación tanto como sea posible.

¿Alguien ya ha hecho una lluvia de ideas y se ha comunicado al respecto? Estoy buscando casos genéricos específicos y posibles soluciones, o reglas generales.

ACTUALIZACIÓN

Sugerencias hasta ahora:

  • dejar de correr si coherencia de los datos puede verse comprometida
  • parada corriendo si los datos se pueden eliminar
  • sigan publicando, aunque no se puede hacer cualquier cosa al respecto (Sin memoria ...)
  • Detener la ejecución si el servicio de clave no está disponible o beco MES disponible y no se puede reiniciar

  • Un método/servicio debe comprobar si puede cumplir con su deber de un estado estable, si no que debe informar al usuario (log) y no hacer nada

  • Si la aplicación debe ser detenido , se degradan con tanta gracia como posibles
  • Use reversiones en las transacciones db
  • excepciones personalizadas se pueden utilizar para dar consejos sobre cómo resolver la situación en handler
  • Entrar tanta información relevante como sea posible
  • Notificar a los desarrolladores
  • estado del coto y coherencia de los datos lo más que puede

  • soluciones rápidas puede ser perjudicial, cuando la depuración, mejor dejar que el bloqueo de la aplicación y analizar en detalle lo que lo causó

+2

Si su aplicación es importante (por ejemplo, el servidor de pilotaje de una planta) su aplicación debe 1) de teléfono de la persona que tendrá que solucionarlo 2) ejecutar la medida en que está seguro de no borrar todo (coherencia de los datos puede casi nunca será comprometida). –

+3

Idealmente, su aplicación nunca debería fallar. Sin embargo, su aplicación debe fallar con elegancia cuando falta un componente como una base de datos o una cámara o no se puede acceder a él. –

+0

Hubiera pensado que, para un montón de RuntimeExceptions serias, no tendrías ninguna opción sobre si dejas que se cuelgue, a menos que envuelvas el código de apertura en un bloque try ... catch. –

Respuesta

1

¿por qué y cuándo dejar que un fallo de la aplicación no tiene reglas particulares ...... dejo que mi caída de la aplicación por las siguientes razones:

1. arreglos rápidos puede poner en la espalda y son poten muy arriesgado NO creo que sea correcto solucionar el error, sin saber cuál fue el motivo real del bloqueo de mi código. Dejar que la aplicación se bloquee me lleva al error en mi código.

2. Dejar que Code crash me ayude a comprender mejor el lenguaje de programación y los errores lógicos.

Esa es mi razón para dejar que la caída de aplicación ..

2

Los creadores de Java y.Net decidió usar el TIPO de un objeto de excepción arrojado para determinar cuándo se debe atrapar y cuándo se debe considerar como resuelto, una decisión de diseño probablemente motivada por la forma en que C++ maneja las excepciones. Aunque el manejo de excepciones C++ fue en muchos sentidos una mejora sobre lo que existía antes, su uso del tipo de objeto de excepción como el principal medio para determinar qué excepciones fueron capturadas no fue una de sus mejores características. Como la captura de excepciones se controla por tipo de excepción, no hay un medio estándar para que la excepción indique si una operación fallida ha alterado el estado de cualquier objeto en el sistema o si el fallo fue causado por objetos corruptos. (a diferencia de un estado que, si bien puede ser inesperado por la persona que llama y no compatible con los parámetros pasados, de otro modo sería considerado por el método llamado como perfectamente legítimo). En muchos casos, si en respuesta a una solicitud del usuario, el sistema llama a un método que intenta hacer algo y no puede hacerlo, pero el método no afecta negativamente al estado de ningún objeto y el problema no es causado por un objeto que tiene una estado dañado, a menudo puede ser mejor simplemente informar al usuario que la acción solicitada no se pudo realizar y continuar. Desafortunadamente, no hay forma de distinguir las excepciones "inofensivas" de los tipos indicados anteriormente, de aquellos que indican problemas graves en todo el sistema. Mientras que el 99% de las excepciones probablemente serán relativamente inofensivas, una pequeña fracción será causada por condiciones que podrían causar corrupción para abrir documentos. Si un documento abierto se ha dañado, puede ser mejor que un programa se bloquee instantáneamente que dejar que reemplace una buena copia en el disco con una corrupta.

Si lanzar excepciones personalizados, puede ser posible incluir las propiedades en el tipo de excepción que permitiría código para decidir algo más útil lo que debe hacerse sobre una excepción. Desafortunadamente, muchas excepciones que se lanzan, ya sean inofensivas o no, no incluirán tales propiedades.

1

Estrellarse la aplicación es algo que depende del nivel crítico de la aplicación y la arquitectura de implementación.

Para un ejemplo de la aplicación no debe bloquearse si se está controlando un cohete desde la tierra (a excepción de situaciones incontrolables y prioridad de los datos).

Cuando las aplicaciones están diseñadas debe diseñar de modo que no hay datos en almacenes de datos son eliminados o alterados.

Concluyendo que no hay manera dura y rápida para determinar el régimen cuando las aplicaciones deben bloquearse.

Cuestiones relacionadas