попробовал это на Ubuntu и другом linux varian, SELECT @@version
и отлично работает.
Вы можете обнаружить пробуждение, периодически сравнивая текущее системное время с предыдущим системным временем.
Изменить: вот пример, который выглядит так, что это поможет вам определить, когда машина будет спать: http://www.codeguru.com/cpp/wp/system/messagehandling/article.php/c6907
Вы могли бы просто JNI или JNA улавливать события сна / пробуждения из ОС.
Из Windows Power Events (MSDN) вам нужно было бы создать обработчик окна и нулевое окно для получения событий WM_POWERBROADCAST. Эта процедура окна может затем вызвать функцию события в вашем Java-коде, чтобы пузырить сообщение вверх.
Я знаю, что это не совсем то, что вы ищете, но, возможно, правильным ответом является попытка написать код с предположением, что ваши сокеты не обязательно будут оставаться на месте. Существует множество причин, по которым может произойти сбой в соединении, например, поскольку БД снимается для обслуживания или потому, что кто-то сработал по вашему кабелю Ethernet. Я думаю, что у вас были бы подобные проблемы с ошибками, если кто-то вытащил сетевой кабель во время работы вашего приложения, и это не неслыханные условия, поэтому, возможно, это лучший подход, чтобы попытаться обработать эти условия изящно.