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: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.
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
As informações que obtive por ele estão sendo muito úteis.
Muito obrigado.
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
Valeu