Configuração
Algumas aplicações de produção não podem ser paradas, pois o sistema precisa estar disponível 100% do tempo, ou pode ser necessário atualizar a versão de um cliente, mas o cliente nunca fica satisfeito de ter sua aplicação interrompida.
O tomcat7 tem uma funcionalidade (Parallel Deployment) que nos permite realizar a atualização sem que seja necessário parar a aplicação que já está rodando.
Para que funcione perfeitamente seu Host no server.xml do tomcat deve ter as configurações autoDeploy e undeployOldVersions ativadas.
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" undeployOldVersions="true">
-
autoDeploy: O tomcat verificará seu diretório appBase periodicamente, verificando se houve alguma alteração, se houver, ele faz o deploy da aplicação que foi atualizada.
-
undeployOldVersions: Utilizando o versionamento das suas aplicações, ele faz o undeploy automático das aplicações de versões antigas que não são mais utilizadas, para isso ele verifica se não há mais nenhuma sessão ativa na aplicação.
Dessa forma, você pode fazer a atualização e deixar as duas aplicações rodando. O tomcat direcionará as novas conexões para a nova versão e manterá a antiga até que não exista mais nenhuma sessão ativa nela. Assim que todas as sessões forem encerradas, ele faz o undeploy.
Para versionar as aplicações no tomcat, utilize os wars da seguinte maneira:
${NOME_APLICACAO}##${VERSAO}.war
Exemplo:
jobs##4.0.18.war
Dessa forma, a coluna version no manager do tomcat ficará com o nome da versão que você especificar (veja a aplicação de nome "jobs"):
Deploy Terminal
Ex.: Para subir um jobs utilize o war com a versão da aplicação, como na imagem abaixo:
Daí, ao atualizar o jobs coloque no webapps um novo war como na imagem abaixo:
Desta forma, o tomcat fará o deploy da versão 3.1.22 e, assim que não houverem mais sessões abertas na versão 3.1.21, ele fará o undeploy dela, sendo assim, sua aplicação não fica off em nenhum momento.
Deploy HTTP
Para subir uma aplicação utilize o parâmetro version ao enviar o war para o tomcat. Ele é obrigatorio, mesmo que o arquivo do war tenha o numero de versão no nome do arquivo
curl -T ${ARQUIVO_WAR}.war "http://${USUARIO}:${SENHA}@${IP}:${PORTA}/manager/text/deploy?path=/${NOME_APLICACAO}&update=true&version=${VERSAO}"
Exemplo
curl -T jobs-3.1.22.war "http://${USUARIO}:${SENHA}@${IP}:${PORTA}/manager/text/deploy?path=/jobs&update=true&version=3.1.22"