Lançamento do VRaptor 4 final
Depois de mais de 60 mil downloads diretos do VRaptor 3 (sem contar via maven), mais de dois mil commits, a versão 4.0.0.Final do VRaptor está disponivel para download. Junto com ela um novo site com novidades sobre as atualizações do framework. Você já pode começar a usar baixando o blank-project ou nosso projeto exemplo, o vraptor-musicjungle.
Ou se você utilizava alguma versão anterior, já pode atualizar a dependência em seu projeto:
<dependency> <groupId>br.com.caelum</groupId> <artifactId>vraptor</artifactId> <version>4.0.0.Final</version> </dependency>
E se você nao conhece o VRaptor, pode começar agora pelo guia de 1 e de 10 minutos.
O VRaptor 4 utiliza o CDI 1.1 como container de DI (injeção de dependências), portanto tira proveito das features específicas dessa já conhecida e bastante utilizada especificação do JavaEE 7.
E o melhor, utilizando VRaptor você também pode tirar proveito desses recursos. Caso anda não esteja familiarizado com o CDI, você pode ler como começar com essa especificação, conhecer algumas das features da versão 1.1 e entender como customizar a produção de suas dependências, tudo no blog da Caelum.
Trabalhando com eventos do CDI
Nosso fluxo principal agora é tratado com eventos do CDI, assim nosso código ficou ainda mais desacoplado e extensível. Nessa página da documentação exibimos um mapa dos eventos e seus observers, assim como uma explicação simples sobre o que cada um deles representa.
Você pode facilmente observar os eventos do VRaptor, para isso basta escrever um observer simples como esse:
import javax.enterprise.event.Observes; import br.com.caelum.vraptor.events.ControllerNotFound; public class ControllerNotFoundHandler { public void metodo(@Observes ControllerNotFound evento) { // alguma ação para quando o controller não for encontrado } }
Um novo modelo de Interceptors
Se você precisa de ordenação na execução de seus eventos, considere utilizar Interceptors. O VRaptor 4 possui um novo modelo baseado em anotações! Veja como pode escrever seu interceptor:
@Intercepts public class ApplicationInterceptor { @Accepts public boolean accepts(ControllerMethod method) { return method.containsAnnotation(Audit.class); } @BeforeCall public void before() { // código a ser executado antes da lógica } @AfterCall public void after() { // código a ser executado depois da lógica } @AroundCall public void intercept(SimpleInterceptorStack stack) { // código a ser executado antes da lógica stack.next(); // continua a execução // código a ser executado depois da lógica } }
Um interceptor sem o método anotado com @Accepts
é global, ou seja, vai interceptar todas as requisições. Outra novidade dos interceptors é que você pode utilizar os aceptors customizados como o @AcceptsWithPackage
e @AcceptsWithAnnotations
:
@Interceptor @AcceptsWithAnnotations(Audit.class) public class AuditInterceptor { ... }
A criação de seus próprios custom acceptors é bem simples e está bem detalhada aqui.
Environment integrado ao core
O plugin vraptor-environment foi integrado ao core e ganhou novas features! Você ainda pode receber o Environment
injetado e chamar seu método get
para ler propriedades, dessa forma:
String email = environment.get("email");
Porém agora como alternativa você pode simplesmente pedir a propriedade injetada com o uso da anotação @Property
:
@Inject @Property private String email;
Como neste caso a propriedade tem o mesmo nome da chave, passar o value
é opcional. Mas você poderia fazer algo como:
@Inject @Property(value="email-de-dev") private String email;
… e ainda passar um valor default
, para caso a propriedade não exista:
@Property(value="email-de-dev", defaultValue="dev@caelum.com.br").
E quanto aos nossos plugins?
Dentre diversos outros aqui não listados, os seguintes plugins já possuem uma versão compativel com essa nova versão do framework:
vraptor-time-converters – trabalhar com date time e java time
vraptor-simplemail – já conhecido plugin de envio de emails
vraptor-errorcontrol – controle de erros efetivo com envio de e-mails
vraptor-quartzjob – schedule Quartz para agendamento de tarefas
vraptor-freemarker – trabalhar com templates do freemarker
vraptor-jpa e vraptor-hibernate – produtores e controle de transação
vraptor-brutauth, vraptor-shiro e vraptor-authz – autent. e autorização
vraptor-dash – dashboard com diversar ferramentas pro seu projeto
Você pode ler mais sobre essas e outras novidades no site do framework. O VRaptor 4 é uma evolução da versão 3, portanto grande parte dos conceitos como as convenções, injeção pelo construtor e uso do Result
, continuam da mesma forma. Para te ajudar a migrar de VRaptor 3 para VRaptor 4 criamos esse tutorial.
Agradecemos a todos os desenvolvedores ativos e pessoal da comunidade que contribuem tanto para o crescimento do projeto. Esse é o momento perfeito para usar VRaptor 4 em seus projetos, vários projetos já estão usando em produção, inclusive o guj.com.br que utiliza desde sua primeira versão beta publica.
Programação, Mobile, Front-end, Design & UX, Infraestrutura e Business
um projeto que a caelum nao só cuida como me ajuda muito! parabens!
A Caelum esta de parabéns!!! um grande framework, uma ferramenta muito poderosa, obrigado pelo Vraptor 🙂
Animal !!!
Ja atualizei um de meus projetos , vlw galera.
valeu galera, muito bom artigo mas gostaria de vos pedir caso possivel atulizem a apostila fj28 “vraptor, hibernate”etc…
O VRaptor além de flexível torna o aprendizado bem mais simplificado.
Ficou show de bola! Parabéns pelo excelente trabalho… Que ele se consolide cada vez mais no mercado!!!
O que me incomodou foi a adoção do CDI. Se olharmos no próprio código da aplicação de exemplo (MusicJungle), há várias classes que declaram o construtor padrão somente para aderirem à especificação – e isso não acontecia com Guice/Spring. Acho que por ora vou continuar com o 3. =/
bronx, vamos resolver isso com o CDI 2.0!
Já curto o VRaptor faz um tempo, e acho muito vantajoso usar. A simplicidade dele é fenomenal. Só queria saber se existe alguma funcionalidade nativa para fazer template no VRaptor, hoje eu uso o tiles para para isso e seria uma boa ter algo nativo.
Grande abraço e parabéns pelo grande sucesso que esta versão vai fazer sem dúvida.
Oi Lucas! Ainda não existe nada nativo, mas queremos investir mais no trabalho com a view sim. Novos plugins e funcionalidades integradas ao core devem aparecer muito em breve! Idéias, issues e pull requests são mais do que bem vindos =)
Muito legal o projeto, parabéns. Só uma dúvida, JSP não é mais desenvolvido e foi abandonado pela Oracle, ou estou enganado? Isso não trará problemas ? Porque não utilizar outra solução para a View?
Gostaria que a apostila FJ-21 que possui um apendice falando sobre o VRaptor fosse atualizada. Obrigado !
João, legal que gostou! Quanto a essa descontinuidade da JSP, não tenho certeza. Tem alguma referência? De toda forma, uma das grandes vantagens da integração com CDI é ter tornado o VRaptor ainda mais flexivel e extensivel… dá pra especializar de forma simples os componentes necessarios pra você rodar em alguma outra solução de view.
Ayran, excelente sugestão! Adicionei no meu TODO aqui, logo vamos atualizar sim =)
Sugiro resolver a questão do Bronx dando suporte ao Spring, que é o padrão de mercado de fato para Injeção de dependência, pois, já esta no mercado a muitos anos e não é um bebezinho de menos de um ano de idade ( cdi 2.0). CDI 1 nem falo nada… bugado, ineficiente e não se integra a nada.
Parabéns pelo framework.
Vida longa ao vRaptor!!!
Galera vai ter uma atualização da apostila da caelum para o VRaptor 4? se sim, qual a previsão de lançamento?
Oi Marcelo! Por enquanto não tem previsão, estamos investindo mais na documentação do site, que é aberta e todos podem contribuir. Alguns cursos já estão sendo migrados, como por exemplo o PM-87 que já usa VRaptor 4.
Pessoal, parabéns pelo excelente framework, é simples, funciona muito bem, e deixa o código muito limpo. Até agora a documentação do site esta suprindo 70% das minhas dúvidas, para o restante das dúvidas estou utilizando a documentação do VRaptor3 com adaptações, e o restante no google. Quanto ao uso, não tenho nada a reclamar. Só tive muita dificuldade para instalar o framework, estou acostumando a copiar os JAR’s para os projetos, e perdi vários dias para instalá-lo, tive problemas com incompatibilidade com as versões do CDI, do Hibernate, etc. Quase que desisti de utilizar o framework, ainda bem que insisti. Vocês poderiam disponibilizar todos os JAR’s em um repositório para quem não quer utilizar o MAVEN. Outra sugestão, é um tutorial no site ensinando a criar plugins, do básico mesmo. Até agora não encontrei nada na internet, somente alguns slides teóricos, mas que na prática não tem muita utilidade. Acredito que deve ter muita gente com soluções prontas, que poderiam disponibilizar seus plugins e ajudar a estender mais ainda o framework.
Mas uma coisa, eu vi o Bronx falando a respeito dos construtores, e na documentação também ensina a declarar esses construtores, mas eu estou injetando meus DAO’s nos Controladores, sem utilizar nenhum tipo de construtor e funciona. Isso é normal?
Eu só faço isso e funciona muito bem:
@Controller
public class Usuario Controller {
@Inject
private UsuarioDAO dao;
public salvar(Usuario u) {
dao.salvar(u);
}
}
E no UsuarioDAO sem construtores também, bem simples, apenas inject no EntityManager:
@RequestScoped
public class UsuariosDAO {
@Inject
private EntityManager manager;
public void salvar(Usuario usuario) {
manager.persist(usuario);
}
}
Oi Silas, tudo bem? Legal que está gostando do framework. Já estamos trabalhando nesse ponto de deixar mais fácil criar um projeto do zero, tem até uma issue pra quem quiser trackear: https://github.com/caelum/vraptor4/issues/963. Outra opção bem legal agora é o setupmyproject.com (é bem simples de usar). Muito boa sua sugestão sobre criar plugins, se quiser, abre uma issue lá no nosso github. Quanto ao ponto do construtor, é normal fazer injeção direta sim (field injection). Mas normalmente recomendamos usar o construtor pela facilidade de mockar nos testes, etc. Grande abraço