2009-09-07 21 views
9

Desarrollé una aplicación de escritorio Swing y estoy pensando en la mejor manera de proporcionar la función de actualización automática. Sé que JavaWebStart proporciona esto, pero creo que no se ajusta a mis necesidades porque necesito leer archivos locales, así que tendría que firmar el contenedor. Además, JWS requiere trabajo adicional para implementar en el servidor, mientras que ahora solo necesito subir el .jar.Función de actualización automática en una aplicación de escritorio Java Swing

He estado pensando acerca de este enfoque:

  • Una primera JAR (que nunca necesita ser actualizado) carga la pantalla de bienvenida, comprueba la versión actual en un config.xml y lo compara con la configuración del servidor. xml.

  • Si la versión del servidor es más reciente, pregúntele al usuario si desea actualizar. En ese caso, descargue el nuevo "main.jar", el nuevo "config.xml" y el nuevo icono/splash, marque MD5SUM y reemplace los archivos antiguos por los nuevos.

  • Ejecute "main.jar".

No sé Si estoy tratando de reinventar la rueda o si hay un patrón mejor que el que he puesto arriba.

+3

Estás confirmando la rueda y ya lo sabes, ya que mencionas Java WebStart. La implementación en el servidor es mínima, solo necesita publicar algunos archivos, no hay necesidad de un componente activo en el servidor. –

+0

Sugiero usar un certificado en lugar de verificar un hash desde https. Con la técnica de hash, un servidor https comprometido significa poner en peligro a todos los clientes de actualización automática./También verifique que está instalando una versión más actual para evitar ataques de degradación./WebStart proporciona una interfaz limitada para el uso de archivos, aunque el control/personalización del buscador de archivos es limitado. –

+0

Creo que no es tan mínimo. Necesito desplegarlo en un servidor que no controlo en absoluto. No puedo cambiar los tipos miméticos, por ejemplo. Además, como he dicho, necesitaría acceder a los archivos locales, así que tendría que firmarlo. – ktulur

Respuesta

5

Hicimos algo similar. Acabamos de obtenerlo a través de https y descargamos el jar. Para saber si necesita uno nuevo, simplemente verificamos el tamaño en la transmisión. En teoría, eso puede no funcionar, pero en la práctica sí lo hizo. Nos volvimos aún más elegantes obteniendo el directorio en el que se ubicaban los archivos jar, analizándolo y descargando cada contenedor, por lo que el nombre del contenedor tampoco estaba codificado. Sin embargo, hay un par de puntos desagradables.

Primero fue el lanzamiento de un nuevo proceso de jvm para iniciar el nuevo jar no es tan simple.

En segundo lugar, debe asegurarse de no dañar su jar si su actualización falla en el medio.

Por último, no hay forma de actualizar el contenedor de arranque con este proceso.

+0

En caso de que alguien busque un ejemplo sobre cómo hacerlo, construí prácticamente lo mismo en los últimos días: https://github.com/UrsKR/updates-r-simple –

Cuestiones relacionadas