Estratégia para atualização de uma aplicação

Pessoal, estou fazendo uma aplicação em Swing, preciso de um módulo que verifique as atualizações e baixe os novos jars atualizados, alguém tem alguma idéia ou referência para uma política de atualização sem usar o Java Web Start?

Obrigado a todos.

Qual o problema com o Java Web Start? É uma alternativa viável para a finalidade que você quer alcançar.

Se não puder usar o Java Web Start, você pode tentar algo muito complexo, que é o esquema de plugins do Eclipse (mais conhecido como OSGI), ou fazer o seu próprio esquema e ficar lutando com ele pelo resto da vida, que vai dar muitos e muitos problemas.
Conselho: acho mais rápido, mais confiável e mais barato usar o JWS.

Problemas que você tem de enfrentar se for fazer você mesmo:

  • Como disponibilizar os pacotes com segurança
  • Como rodar a aplicação “a quente” (ou seja, com os jars atualizados) - brincar com classloaders é coisa pra não botar defeito
  • Como atualizar o atualizador de versão
  • Como ter versões paralelas conforme seus clientes
    e outras porcarias que podem ocorrer.

Conheço uma pessoa que possui uma aplicação com Java Web Start funcionando legal, mas ele está com um problema…
Ele me falou que o sistema dele precisava ser inteligente o bastante para saber quando o computador alguém fizesse logoff no computador. sabemos da existência do método addShutdownHook(Thread hook), mas a Thread setada nesse método não é executada quando acontece o logoff. Outro fato agravante é que me disseram que esse tipo de “evento” não é capturado pela aplicação caso ela tenha sido iniciada pelo JWS.
Alguém sabe me dizer se isso realmente procede??

[]'s.

Cara,
eu fiz uma esquema desses pra um sistema meu aqui do trabalho. Na verdade eu tenho vários sistemas rodando sobre esse esquema de atualização. Funciona assim:

  • Eu tenho um sistema básico responsável pelo login e pelas atualizações.
  • Quando você loga ele verifica que sistemas você tem permissão de usar.
  • Se você tiver permissão de rodar mais de um sistema
    • manda você selecionar entre os sistemas que possue permissão, qual você quer usar
  • Verifica se as jars necessárias para rodar o sistema selecionado (ou o único que vc tiver permissão) já estão na máquina e na versão correta
    • Se não estão, baixa as jars, atualiza os arquivos de configuração e reinicia
  • Executa o sistema

Como foi mostrado acima, ele resolve o problema, mas sempre que uma atualização é feita o sistema deve ser reiniciado. Isso já está rodando há mais ou menos uns 2 anos e nunca deu problema. As jars eu tô deixando num servidor http mesmo.

Qualquer dúvida estamos aí

Valeu pela força pessoal, eu realmente não quis usar o Java Web Start por não conheçer muito dessa tecnologia, mas depois de ler uma documentação vi que não é um bixo de sete cabeças, realmente resolve todos os problemas nesta questão de atualização remota, quebra um puta galho mesmo! Encontrei um tutorial super bacana, vejam em:

http://weblogs.java.net/blog/lancea/archive/2007/06/using_java_web.html

Valeu galera!

Um dos requisitos é permitir que as atualizações só sejam permitidas mediante autenticação.

Alguém sabe como poderia ser feito isso com Java Web Start?

Olá

Porque não usa UrlConnection (com ajuda de HttpClient) e faz seu próprio programinha de atualização? Garanto que é super fácil. Com um mínimo de imaginação em 10 minutinhos dá para arquitetar. É claro que eu não preciso dizer como.

Você ainda pode incluir a facilidade de NÃO permitir muitas ou todas atualizações ao mesmo tempo que possam ferrar a largura da banda do servidor. É exatamente este o grande problema do Java Web Start. Se você tem uma aplicação para ser usada no horário comercial, no dia em que você colocar uma nova versão no servidor, todo mundo que começa a trabalhar na mesma hora (Brasil inteiro sem horário de verão) tenta baixar a atualização ao mesmo tempo e “equivale” a um DoS (denial of service) no servidor.

[]s
Luca