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
Eche un vistazo a Runtime.addShutdownHook.
se utilizan normalmente como así:
Runtime.addShutdownHook(new Thread() {
public void run() {
// do your clean up here.
}
});
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.
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
- 1. Abrir aplicaciones de consola en powershell
- 2. Ejecutar aplicaciones de consola en otro monitor
- 3. ¿Por qué no Rhino para aplicaciones JVM?
- 4. Boson vs Thor para aplicaciones de consola
- 5. ¿Diseño MVC para aplicaciones de consola?
- 6. Consola del cargador de aplicaciones Apple
- 7. Consideraciones arquitectónicas en el diseño de aplicaciones de consola?
- 8. Resultado de la consola desde aplicaciones web en Visual Studio
- 9. depuración remota Java JVM Eclipse con una consola habilitada
- 10. Aplicaciones de consola abierta de Eclipse en ventana separada
- 11. Formas de implementar aplicaciones de consola en C#
- 12. ¿Cómo lidiar con escenarios de "disco lleno"?
- 13. ¿Es posible escribir aplicaciones de consola en el esquema?
- 14. ¿Cómo lidiar con fugas de memoria en RMagick en Ruby?
- 15. ¿La mejor manera de lidiar con el tiempo de espera de la sesión en aplicaciones web?
- 16. Consola de salida.WriteLine de WPF Aplicaciones de Windows a la consola real
- 17. ¿Cómo lidiar con la transmisión de datos en PHP?
- 18. matar limpiamente una aplicación de consola desde el interior de un grupo de aplicaciones de consola
- 19. Iniciando y comunicándose con aplicaciones de consola desde una GUI
- 20. ¿Cómo lidiar con bloqueos (JPA)?
- 21. RegEx en Java: cómo lidiar con newline
- 22. ¿Cómo lidiar con archivos temporales en ASP.NET?
- 23. cómo lidiar con unicode en mako?
- 24. Cómo lidiar con un error en System.Data.DataTableExtensions.CopyToDataTable()
- 25. ¿Construir aplicaciones de consola sin CRT y encabezados predeterminados?
- 26. agregar opciones de jvm en tomcat
- 27. ¿Hay una consola de administración de aplicaciones para Jetty?
- 28. ¿Cómo se diferencian las "JVM modernas" de las JVM antiguas?
- 29. Cómo lidiar con el estado de la aplicación en Gtk2Hs
- 30. Java gotoxy (x, y) para aplicaciones de consola
+1 también la única manera de proteger un programa contra el apagón y el bloqueo del sistema. – josefx