¿Hay alguna manera de que un programa Java detecte cuándo el sistema operativo está a punto de quedarse dormido, o al menos detectar un despertador?Detectar eventos de suspensión y activación de SO en Java
El problema real es que en una aplicación en particular se ejecutan varias operaciones de base de datos MySQL en segundo plano. Al probar en una máquina con Windows, estas transacciones de base de datos se interrumpen después de un ciclo de suspensión/activación que causa una tonelada de condiciones de error en el programa. Estos errores suelen ser algo como esto:
java.net.SocketException MESSAGE: Software caused connection abort: recv failed
Si pudiéramos reaccionar a un evento 'va a dormir pronto' podríamos intentar hacer una pausa en operaciones en segundo plano adelantarse al problema. Menos idealmente si pudiéramos reaccionar a un evento 'recién despertado' podríamos al menos suprimir los mensajes de error.
Lástima que no se puede hacer sin JNI, pero el enlace parece un buen comienzo. –
Sí, JNI puede ser un problema para desarrollar y depurar. Hemos descubierto que la clave es mantener la mayor lógica posible en Java, y simplemente usar JNI como puente para realizar llamadas de bajo nivel a la API de C. – rob