Como posso atualizar o software java com segurança?

2

Eu executo um aplicativo java que está ocupado a maior parte do tempo. Quando preciso atualizá-lo, envio uma mensagem para sair da próxima oportunidade disponível, atualizar os arquivos de classe e reiniciá-lo. O que eu realmente gostaria de poder fazer é atualizar os arquivos de classe, e então ter o programa chutando-se na próxima boa oportunidade, mas o que eu encontrei (isso é solaris) é que se você modificar os arquivos no disco Enquanto um programa está sendo executado, às vezes, coisas ruins acontecem. Eu presumo porque nem todos os arquivos de classe estão vivos no jvm o tempo todo, então às vezes ele precisa recarregar do disco, ou talvez o solaris esteja carregando partes do arquivo do disco que não correspondem ao antigo binário. Eu vi isso fazer isso com binários C também. Alguma sugestão? Seria mais seguro fazer um movimento e copiar para que as mesmas informações de disco não sejam gravadas, mas um novo inode é criado para o novo arquivo?

    
por Stu 02.06.2009 / 15:14

2 respostas

2

Procure também automatizar o uprade usando o webstart (que possui restrições adicionais) ou integrar a atualização no script de inicialização, por exemplo, algo assim: 1. verifique se há arquivos em novo / copie-os em produção 2. inicie a aplicação

Desta forma, tudo o que você precisa é de um reinício. E você pode copiar, rsync, ftp, ...

    
por 02.06.2009 / 17:02
0

Substituir frascos / classes não funciona. O motivo é simples: você pode ter uma classe carregada na memória, depois descarregada devido à pressão da memória e depois recarregada novamente. Se você alterar o arquivo de classe subjacente, você receberá uma nova classe com um sistema antigo, o que significa problema.

Sua melhor aposta é criar uma implementação a quente no aplicativo (ou fazer com que os desenvolvedores o criem) usando soluções como:

  • carregamento de classe personalizado;
  • OSGI;

ou o que melhor lhe convier.

    
por 02.06.2009 / 15:28

Tags