Когда запускаемая JVM (на самом деле написанная на Scala, но я склонен полагать, что решение будет примерно таким же для Groovy, Clojure или чистой Java), моя консольная программа завершается пользователем, нажимающим Ctrl + C (или по последовательности выключения системы, я не знаю, есть ли какая-либо разница для программы), как мне убедиться, что внешние ресурсы, которые изменяет приложение (базы данных, файлы, абстрагированные ресурсы веб-службы) остаются в предсказуемом, нелогически поврежденном состоянии?