Gestionar actualizaciones de software (java)

smintcs

Hola

Estoy buscando alguna manera de hacer lo tipico de mirar si hay actualizaciones nuevas y en caso de haberlas descargarlas e instalarlas, pero no se ni por donde empezar. He pensado meter en algun lado el numero de la ultima version, y desde la aplicacion mirar si es mas reciente que el actual y abrir la pagina de descarga, pero me interesaria realmente algo que actualize los .class directamente o similar, que el usuario simplemente tenga que decidir actualizar la aplicación y ella sola lo haga, que no tenga que andar descargando e instalando.

Agradeceria un poco de luz sobre este tema.

4 meses después
smintcs

refloto esto, a ver si tengo mas suerte esta vez

ALONSOesDIOS

yo tambien estoy interesado en eso; me gusaría escuchar opiniones

HoTiTo

Nunca lo he hecho, pero me imagino que eso se resolvería haciendo un algoritmo que cada X tiempo o al inicio del programa compruebe si hay una actualización.

Este algoritmo lo que hará es una consulta a una BD en algún hosting. Se compararán las versiones del programa, si es una versión mayor -> se le da la opción de descargar la nueva versión al cliente.

En el caso de mac, que es la plataforma que uso, habría que llamar después de eso a otro algoritmo que descargue el ejecutable, cierre el programa, borre el ejecutable viejo y copie el nuevo a donde estaba el viejo.

En el caso de win/linux supongo que sería estilo cvs/subversion. Se bajan los archivos, cierras el programa, borras los viejos, copias los nuevos al mismo directorio y borras los nuevos de donde los hayas descargado.

Insisto en que hablo totalmente desde el desconocimiento, pero esto es lo que se me ocurre así en una divagación rápida.

Si usas alguna api en especial para la interfaz gráfica, puede que tenga ya algún procedimiento para ayudarte en esto. Qt por ejemplo tiene muchos de estos procedimientos usuales en la mayoría de aplicaciones ya hechos para que los uses.

radykal

Yo he hecho hace poco un programita de gestión para un cliente y te explico como controlo lo de las actualizaciones:

En la base de datos del programa guardo un timestamp (da igual como si queires guardar la fecha exacta) en la que el programa comprueba la actualizacion y cada vez que arranca mira esa fecha y si han pasado X dias te pregunta si quieres comprobar actualizaciones, responda lo que responda actualizo el campo con la fecha del dia.

Para comprobar si hay version nueva guardo en el hosting donde alojan la web un fichero txt con la version del ejecutable de la ultima version. Abro el fichero y comparo la version con la del propio ejecutable que tenga instalado, si ve que la version difiere abro un segundo fichero donde contiene el nombre del instalador de la nueva versión.

Entonces el propio programa con una ruta pre-establecida y el nombre del ejecutable de la nueva versión lo descarga, una vez acaba se cierra el programa y lanza el instalador.

Así cada vez que hago algún cambio en la aplicación subo los 3 ficheros al hosting (archivo de version, archivo con nombre del instalador y el instalador) y ya está.

No se si es una forma muy ortodoxa, pero no domino demasiado de programar (bueno, soy mas bien un piltrafilla que conozco lo básico para lo que he necesitado) y me funciona que es lo importante :)

PD: El mio no es en java, es en VB.NET pero vamos que la teoria la tienes ahi.

EDITO: Si el programa no tiene base de datos el dato del timestamp puedes guardalo en algún fichero, y si en vez de un instalador solo subes el programa pues en vez de ejecutar el instalador tendrás que hacer un segundo ejecutable que se encargue de borrar el fichero del ejecutable viejo, renombrar el descargado (que tendrá un nombre temporal) y de volver a lanzar el ejecutable (vamos, 3 lineas de codigo ese segundo ejecutable).

EDITO2: Para descargar el instalador lo hago en segundo plano a través de una conexión ftp (el hacerlo mediante la URL por navegador lo vi demasiado cutre hasta para mi).

mohon_drive

Creo que las 2 propuestas anteriores son buenas. La idea es que tu programa tenga alojado en algún lugar (como un fichero de texto) un número de versión, fecha, etc... y que cada X tiempo o por petición del usuario, se acceda a un servidor para obtener el fichero de texto con la version actual de ese programa, si al compararlas, no coinciden, se necesita actualización.

Deathtime

Hola a todos.

Estais complicandoos la vida, al menos en .NET. Desde mi ignorancia en Java dado que no lo conozco ni lo controlo puede que exista algo parecido tambien. Explico.

Para guardar la versión es tan facil como darle número de versión al assembly. En las propiedades del proyecto en la pestaña "Aplicación" hay un botón "Assembly information". Aquí podeis definir la información y la versión de vuestro proyecto. Incluso si vuestro proyecto utilizara varios assemblies, cada uno puede tener su propia versión.

Los campos para añadir versión usan el standar: Major X Minor X Build X Revision X

De esta forma es mucho más facil acceder a la información sin tener que estar mareando con archivos o bases de datos.

Lo segundo y más complicado es actualizar. En aplicaciones de windows existe ya como opción esto de actuallizar la aplicación sóla. En las propiedades del proyecto, pestaña "Publicación" podeís configurar opciones como la ruta donde debe acceder para actualizar, cada cuanto tiempo debe hacerlo, cuando (si al iniciar o al cerrar la aplicación), y lo mejor de todo, la versión minima para actualizarse (sobretodo usado en tiempos de desarrollo).

Luego ya para actualizar hay muchas formas de realizarse. Puede ser automático o manual usando un proyecto instalador de actualización.

Para aplicaciones web es diferente, ya que no tiene estas opciones pero hace poco sacaron el "Web Proyect Platform Installer" que sin entrar en detalles es algo parecido a la página de plugins de Firefox donde pinchas y te instala o actualiza un plugin.

Espero que os sirva de ayuda.

Saludos y perdón si hay faltas que tengo prisa.

Usuarios habituales

  • Deathtime
  • mohon_drive
  • radykal
  • HoTiTo
  • ALONSOesDIOS
  • smintcs