2012-02-03 9 views
5

Cuando se ejecuta JVM (escrito en Scala en realidad, pero tiendo a creer que la solución va a ser prácticamente la misma para Groovy, Clojure o Java puro) el programa de consola de la mía se termina por el usuario presionando Ctrl + C (o por la secuencia de apagado del sistema, no sé si hay alguna diferencia para un programa), cómo me aseguro de que los recursos externos modifique la aplicación (bases de datos, archivos, recursos abstraídos del servicio web) quedan en un estado predecible, no corrupto de manera lógica?¿Cómo lidiar con^C en aplicaciones de consola JVM?

Respuesta

7

Eche un vistazo a Runtime.addShutdownHook.

se utilizan normalmente como así:

Runtime.addShutdownHook(new Thread() { 
    public void run() { 
     // do your clean up here. 
    } 
}); 
3

Puede atrapar esta señal y cerrar los recursos. La mayoría de los servicios no necesitan estar cerrados correctamente, sin embargo, los archivos que usted escribe suelen hacerlo.

Es posible simplemente agregar un gancho de apagado es todo lo que necesita. Pero probaría esto para tu situación.

10

se puede tratar de poner en práctica un gancho de cierre como otros señalaron PERO:

En raras ocasiones la máquina virtual puede abortar, es decir, deje de funcionar sin apagarlo limpiamente. Esto ocurre cuando la máquina virtual finaliza externamente, por ejemplo con la señal SIGKILL en Unix o la llamada TerminateProcess en Microsoft Windows. La máquina virtual también puede abortar si un método nativo falla al, por ejemplo, corromper las estructuras internas de datos o intentar acceder a memoria inexistente. Si la máquina virtual aborta, entonces no se puede garantizar si se ejecutarán o no los ganchos de cierre.

Supongo que tendrías que introducir contexto transaccional en tu aplicación, creo. Para las bases de datos que es bastante fácil, para el sistema de archivos puede buscar en Apache Commons Transaction

+0

+1 también la única manera de proteger un programa contra el apagón y el bloqueo del sistema. – josefx

Cuestiones relacionadas