Pular para o conteúdo principal

Hot swapping no Eclipse usando DECVM

Recentemente, após um amigo avisar que a versão final do framework VRaptor4 estava disponível, resolvi atualizar o projeto que acabávamos de começar e que utilizava a versão anterior desse framework. Após alguns dias sofrendo com a migração para a nova versão, finalmente, tudo estava funcionando e continuamos o desenvolvimento.

A nova versão do VRaptor trouxe mudanças significativas, a principal delas foi a utilização do CDI 1.1 como container de DI (Dependency Injection).  Como estávamos utilizando o Tomcat 8 tivemos que habilitar o suporte ao CDI utilizando o Weld. Logo vimos que o tempo de inicialização do servidor estava muito demorado, cerca de 30 segundos, e a cada modificação realizada um restart do servidor acontecia e lá se iam mais 30 segundos. Ao final do dia, o tempo perdido com o redeploy da aplicação era bastante considerável, gastávamos cerca de 1/5 do dia só esperando as modificações realizadas surtirem efeito.

Não conformado, resolvi buscar uma forma de diminuir o tempo perdido, foi então que lembrei de uma conversa que tive a cerca de um ano atrás com outro amigo. Nela ele havia me falado de uma JVM que realizava um hotswapping mais eficiente do que o disponibilizado na versão padrão, tratava-se do JRebel, entretanto, ao verificar o valor da licença, descartei de imediato essa possibilidade. Então, o jeito foi procurar alguma solução open source que realizasse a mesma função.

Não demorou muito até que encontrei o projeto DynamicCode Evolution VM, que segundo a descrição do produto “possibilita um número ilimitado de redefinições de classes em tempo de execução”. Resolvi então fazer o download do binário e testar.

Logo de cara tive problemas de compatibilidade. A versão disponibilizada no site oficial estava desatualizada. Mais algumas buscas no Google até que encontrei um fork do projeto original no Github, fiz o download dos novos binários e dessa vez tudo funcionou corretamente. O processo de instalação é bem simples e não existem configurações a serem realizadas. Os testes realizados mostraram que o hotswapping realmente funciona, possibilitando um enorme ganho de produtividade para toda a equipe.

Para quem tiver interesse em utilizar a DCEVM, segue um passo a passo para um ambiente de desenvolvimento utilizando o Eclipse Luna, JDK 8 e Tomcat 8.

1. Faça o download do binário correspondente ao seu sistema operacional em https://dcevm.github.io/ , no meu caso a versão baixada foi Light Java 8 update 5, build 52. 
2. Abra o terminal e digite:

java -jar installer.jar

Caso esteja usando o Windows com o JDK instalado no diretório padrão você deverá inciar o cmd com privilégios de administrador, pra isso clique com o botão direito no ícone e selecione Executar como Administrador.

3. A seguinte tela irá aparecer:



Nela você poderá visualizar todas as instalações encontradas, podendo ainda adicionar uma nova instalação através do botão Add instalation directory, caso a versão desejada não tenha aparecido na listagem.

Para instalação tudo que você deve fazer é selecionar a instalação desejada e clicar em Replace by DCEVM. No meu caso, realizei a substituição do jdk1.8.0_05. Após a substituição a listagem deverá conter as seguintes informações:


Agora vamos configurar o Eclipse para utilizar a versão da DCEVM.

1. Abra o Eclipse e vá em Windows > Preferences > Java > Installed JREs
2. Caso a versão na qual foi realizada a substituição não esteja nesta listagem clique em Add.., escolha a opção Standard VM e informe a localização da instalação.
3. Marque-a como padrão (Figura abaixo).



4. O próximo passo é configurar o servidor Tomcat, para isso vá em Windows > Server > Runtime Environments.


5. Caso a versão desejada não esteja na lista clique em Add.., selecione a versão desejada (no meu caso foi a Apache Tomcat v8.0) e informe o diretório de instalação do tomcat.
6. Logo abaixo selecione a JRE escolhida no passo 2. Clique em finalizar.


7. Na view Servers, clique com o botão direito e vá em New > Server e adicione o servidor configurado no passo anterior.
8. Logo após, dê um clique duplo no servidor adicionado no passo anterior e na aba Publishing deixe marcada a opção Automatically publish when resourcess change.


9. Na parte inferior, clique em Modules e para cada um dos módulos existentes clique em Edit... e desmarque a opção Auto reloading enabled.


Pronto!

Comentários

Unknown disse…
Este comentário foi removido pelo autor.
Unknown disse…
Parabéns pelo excelente post!

As informações que obtive por ele estão sendo muito úteis.

Muito obrigado.
Eduardo disse…
Bom dia,

Estou procurando alternativa para o JRebel utilizando o Vraptor 4, o JRebel não funciona bem quando alteramos o nome da função na controller ou a anotation, por exemplo: caso eu altere a anotation de @Get para @Post, o JRebel não consegue atualizar e continua no @Get, porderia me informar se com no DECVM essa alteração funciona?

Obrigado
Reginaldo disse…
Obrigado pelo conteudo. Estou fazendo um curso de Java com Spring, utilizando o JRebel, mas passou a ser pago e expira em pousos dia. Deu certo usando este que vc indicou.

Valeu

Postagens mais visitadas deste blog