versión verificar instalar descargar cómo actualizar java deployment installer auto-update automatic-updates

verificar - java actualizar



¿Cómo puedo hacer que una aplicación Java se actualice automáticamente? (5)

No hay necesidad de wrapper (guardar memoria) o java web start (agrega más restricciones a su aplicación), simplemente deje que un hilo en su aplicación revise periódicamente las actualizaciones (por ejemplo, desde la nube) y descargue actualizaciones si están disponibles, luego codifique estas dos llamadas en usted solicitud:

  1. Inicie un script de shell ( .sh o .cmd ) para actualizar sus artefactos y ejecute su aplicación después de unos segundos de pausa en el script (para evitar tener dos instancias de su aplicación al mismo tiempo).
  2. Termine su aplicación (primera instancia)

El script puede sobrescribir los artefactos necesarios y relanzar su aplicación.

¡disfruta!

Problema : tengo una aplicación Java independiente (en lo sucesivo denominada "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 completamente automático sin intervención manual, por lo tanto, Java Web Start no es una solución viable .

Solución propuesta : haga que el teléfono del agente llegue 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 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 extraña o indirecta, aquí hay algunas otras consideraciones / restricciones que vale la pena señalar:

  1. Cuando el contenedor 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 quiera engendrar un proceso Java separado en lugar de jugar con ClassLoaders y correr el riesgo de una pérdida de memoria de generación permanente, que requeriría intervención manual, exactamente de lo que estoy tratando de 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.
  2. 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 en contra de tener un proceso de envoltura separado.
  3. El agente ya está implementado en los servidores de 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 de lotes y bashs para que las cosas funcionen.

Pregunta : Como dije, quiero saber cómo hacer una aplicación Java autoejecutable. 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?


Parece que Webstart es la única forma de hacerlo en este momento.


Solución diferente: use (y pague) install4j. Echa un vistazo a las características de actualización automática aquí


Echa un vistazo a Java Web Start.

Es tecnología que ha sido parte de Java desde ... 1.5? tal vez 1.4? y permite la implementación e instalación de aplicaciones autónomas basadas en Java a través de una red de búsqueda web. También le permite ejecutar siempre la última aplicación.

http://www.oracle.com/technetwork/java/javase/overview-137531.html

http://en.wikipedia.org/wiki/JNLP#Java_Network_Launching_Protocol_.28JNLP.29

también vea esta pregunta: ¿Cuál es la mejor manera de agregar una característica de auto actualización a una aplicación Java Swing?


Si su aplicación está basada en OSGi, puede dejar que OSGi maneje las actualizaciones del paquete por usted. Es similar al enfoque de envoltura que sugiere, ya que el contenedor OSGi en sí mismo es "el contenedor" y parte de él no se actualizará. Aquí hay una discusión sobre esto