¿Cómo hago que una aplicación Java se actualice automáticamente?

Problema: Tengo una aplicación Java independiente (en adelante conocida como "el agente") que se ejecuta como un servicio en los servidores internos de la empresa. Actúa como un agente remoto para algunos servidores centrales. A medida que el agente se implementa en más lugares, administrarlos se está complicando. Específicamente: empujar actualizaciones es doloroso porque es un proceso bastante manual, y obtener acceso a los registros y otra información sobre los entornos donde se ejecutan los agentes es problemático, lo que dificulta la depuración. Los servidores en discusión son sin cabeza y sin supervisión, lo que significa que este debe ser un proceso totalmente automatizado sin intervención manual, por lo tantoJava Web Start no es una solución viable.

Solución propuesta: Haga que el agente llame a casa (a los servidores centrales) periódicamente para proporcionar el estado del agente y verificar si hay actualizaciones.

Estoy abierto a otras soluciones sugeridas para el problema, pero ya tengo un prototipo funcional para la idea de "estado y actualizaciones automáticas", que es en lo que se enfoca esta pregunta.

Lo que se me ocurrió es en realidad un proyecto separado que actúa como un contenedor para el agente. El envoltorio llama periódicamente al servidor central a través de HTTP para buscar una versión actualizada del agente. Al encontrar una actualización, descarga la nueva versión, apaga el agente en ejecución e inicia la nueva. Si eso parece una solución extraña o indirecta, aquí hay algunas otras consideraciones / limitaciones que vale la pena mencionar:

Cuando el reiniciador obtiene una nueva versión del agente, puede haber nuevas dependencias JAR, lo que significa cambios en la ruta de clases, lo que significa que probablemente desee generar un proceso Java independiente en lugar de jugar con ClassLoaders y correr el riesgo de una pérdida de memoria de generación permanente, que requeriría una intervención manual, exactamente de lo que estoy tratando de alejarme. Esta es la razón por la que terminé con un proceso "contenedor" separado para administrar las actualizaciones del agente en mi prototipo.Algunos servidores donde se implementan los agentes tienen recursos limitados, por lo que cualquier solución debe ser baja en el uso de la CPU y la memoria. Eso me hace querer una solución que no implique girar una nueva JVM y es un golpe en contra de tener un proceso de envoltorio separado.El agente ya está implementado en los servidores Windows y RHEL, por lo que la solución debe ser multiplataforma, aunque no tendría ningún problema en duplicar una cantidad razonable del proceso en lotes y scripts de bash para que todo funcione.

Pregunta: Como se indica, quiero saber cómo realizar una aplicación Java que se actualiza automáticamente. Más específicamente, ¿hay marcos / bibliotecas por ahí que me ayuden con esto? ¿Puede alguien con experiencia en esta área darme algunos consejos?

Respuestas a la pregunta(5)

Su respuesta a la pregunta