Problema: Tengo una aplicación independiente de Java (en adelante, "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 despliega en más lugares, gestionarlos se vuelve cada vez más complicado. Específicamente: empujar las actualizaciones es doloroso porque es un proceso bastante manual, y obtener acceso a los registros y otra información sobre los entornos en los que 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 tiene que ser un proceso totalmente automático sin intervención manual, por lo tanto, Java Web Start no es una solución viable.¿Cómo puedo hacer que una aplicación Java se actualice automáticamente?
Solución propuesta: Poner el teléfono del agente en casa (a los servidores centrales) periódicamente para proporcionar el estado del agente y comprobar 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 centra esta pregunta.
Lo que se me ocurrió es en realidad un proyecto separado que actúa como un contenedor para el agente. El contenedor periódicamente llama 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 el nuevo. Si eso parece una solución par o rotonda, aquí hay algunas otras consideraciones/restricciones pena señalar:
- Cuando la envoltura se pone una nueva versión del agente, puede haber nuevas dependencias JAR, es decir, cambios de ruta de clase, lo que significa que probablemente quiera engendrar un proceso de Java separado en lugar de jugar con ClassLoaders y correr el riesgo de una fuga de memoria de generación permanente, lo que requeriría una intervención manual, exactamente de lo que estoy intentando alejarme. Esta es la razón por la que terminé con un proceso de "envoltura" por 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 tener bajo uso de CPU y memoria. Eso me hace querer una solución que no implique girar una nueva JVM y es un golpe contra tener un proceso de envoltura 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 problemas para duplicar una cantidad razonable del proceso en scripts por lotes y bash para que las cosas funcionen.
Pregunta: Como se ha dicho, quiero saber cómo hacer que una aplicación Java de actualización automática. Más específicamente, ¿hay marcos/bibliotecas por ahí que me ayuden con esto? ¿Alguien con experiencia en esta área me puede dar algunos consejos?
http://stackoverflow.com/questions/305461/automatic-updates-of-java-desktop-application –
ejemplos Ver Jenkins: https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds # Distributedbuilds-LaunchslaveagentviaJavaWebStart –
Su solución no le permite actualizar el contenedor en sí, ¿no? – Miquel