Pessoal, tenho um aplicativo java que deve rodar em vários clientes numa mesma rede.
Inicialmente implementei a distribuição do mesmo através do Java Web Start, que teoricamente
baixa o aplicativo e o atualiza caso seja necessário. Mas o JWS tem se mostrado muito lento,
tirando como base quando eu copio o jar pra máquina do cliente e o executo diretamente.
Estou pensando em criar um executável que verifica se o aplicativo necessita de atualização e
faça isso caso seja necessário. Ou então deixar o jar numa pasta compartilhada e criar um bat
nos clientes para rodá-lo. O que vocês acham?
Aplicativo java em rede
1 Resposta
Amigo, eu adotei a seguinte estratégia:
No caso temos aplicativos Desktop (client/server) e uma rede local 100mbps.
Criei um processo de atualização das libs de terceiros (que costumam mudar pouco e não todo dia). Este processo executa no script de logon de rede dos usuários. Caso tenham versões de libs novas (por exemplo mudou a versão do jasper ou do driver de conexão), ele atualiza na máquina local.
As libs do programa (os .jar do projeto não chegam a 5Mb, em torno de 3000 classes java), ficam em um diretório de rede (pois sofream atualização quase que diária).
Criei um executável usando o Launch4J e coloquei também na rede, e através do classpath defino se vai pegar local ou da rede.
No caso de linux, criei um .sh que faz o mapeamento da rede para um diretório (/mnt/rede) e o classpath aponta para este diretório, rodando o java a partir do .sh.
Desta forma a performance é muito boa (2 segundos para carregar o aplicativo). Sendo que se colocasse todas as libs na rede estava demorando em torno de 7, 8 segundos… ou seja… teve um ganho principalmente no carregamento inicial. No uso da aplicação o ganho foi pequeno.
Dependendo de sua rede, a estratégia pode ser diferente!
PS: Já criei também executável em C que fazia a atualização e depois invocava a JVM através da jvm.dll (no caso para windows). Não foi necessário neste caso acima pois temos controle total as estações pelo script de logon e são poucos usuários do sistema.