Você está na página 1de 5

Migrando de um projeto com

VRaptor 3
Java 7 e CDI 1.1

Para utilizar o VRaptor necessrio possuir o JDK 7 e um Application Server


ou Servlet Container que possua suporte ao Servlet 3.1.

Beans.xml
Como agora o VRaptor usa o CDI como container, para ele conseguir escanear
suas classes voc precisa adicionar o arquivo beans.xml dentro da pasta METAINF/beans.xml de seu projeto. Se voc usa maven, adicione
em/src/main/resources/META-INF. Voc pode usar como exemplo o
arquivo beans.xml do nosso blank-project.

Containers IoC

A maior alterao do VRaptor de usar o CDI (Context Dependency Injection).


Com isso no necessrio mais usar os providers anteriores (Guice, Pico e
Spring).
O CDI exige que cada classe possua o construtor padro (sem argumentos).
Sendo assim voc dever adicionar o construtor padro em todos os
componentes. E o construtor onde sero injetados os componentes deve
possuir a anotao @Inject.
@Controller
public class MeuController {
private final MeuComponente meuComponente;

/**
* @deprecated CDI eyes only
*/
protected MeuController() {
this(null);
}

@Inject
public MeuController(MeuComponente meuComponente) {
this.meuComponente = meuComponente;
}

Static scanning
Se voc usava este recurso, ele no mais necessrio, pois o scanning de
classes feito de forma otmizada pelo CDI. Basta remover as configuraes do
seu build.

Eventos de inicializao
No VRaptor 3, quando voc anotava um componente com @ApplicationScoped,
o cdigo era executado na inicializao do sistema. Com o uso do CDI, agora
necessrio usar a anotao @Observes:
@ApplicationScoped
public class PrintLog {
public void whenApplicationStarts(@Observes ServletContext context) {
logger.info("My application is UP");
}
}

Alteraes em assinaturas de mtodos e classes


Muitas classes internas foram atualizadas ou removidas. Se voc sobrescreveu
algum comportamento interno do VRaptor, verifique em nossa api docs as
novas assinaturas.
Todos os mtodos anotados com @Deprecated do VRaptor 3 foram removidos.

OGNL
Se voc usava o OGNL, ele no mais suportado no VRaptor 4. Atualmente
suportado apenas o IOGI, que possui todas as funcionalidades do OGNL, alm
de suporte a Set e objetos imutveis.

Validao
A validao fluente foi removida, e agora voc pode usar o Bean Validation.
Para compatibilidade voc pode usar os mtodos Validator.check(boolean,
Message) para efetuar validaes mais simples.
A interface Validator foi alterada de pacote, e agora est localizada
embr.com.caelum.vraptor.validator.Validator.
As classes filhas de Message foram alteradas. A classe ValidationMessage agora
SimpleMessage e o construtor foi alterado para SimpleMessage(String param,
String message, Object... params), mantendo assim compatibilidade com as
demais implementaes.

Converters
Os converters localizados agora fazem parte do pacote padro, e so
registrados automaticamente. Portanto se voc tiver a declarao do
pacote br.com.caelum.vraptor.converter.l10 no seu web.xml, remova-o.
Os converters sofreram alteraes, e agora no recebem mais o
objeto ResourceBundle no mtodo convert. Se voc precisa usar algo baseado
no Locale, voc deve injet-lo no construtor.
A interface Converter foi alterada de pacote, e agora est localizada em
br.com.caelum.vraptor.converter.Converter.

Remoo dos escopos


Ns removemos todos os antigos scopos do core do vraptor. No lugar deles,
voc pode usar os seguintes escopos definidos no
pacote javax.enterprise.context:

@javax.enterprise.context.RequestScoped
@javax.enterprise.context.SessionScoped
@javax.enterprise.context.ApplicationScoped
@javax.enterprise.context.ConversationScoped
@javax.enterprise.context.Dependent

Uma alternativa simples para migrar os escopos fazer um replace


de br.com.caelum.vraptor.ioc parajavax.enterprise.context nos imports.

Fabricando de componentes
A interface ComponentFactory no existe mais. Desta forma voc deve usar
o @Produces do CDI. Veja mais no captulo de componentes.

Sobrescrevendo componentes
No VRaptor3 para sobrescrever os componentes era necessario apenas
implementar ou estender a interface ou classe do componente. Por limitaes
no CDI necessrio agora anotar a sua classe com @Specializes.

@Resource substitudo pelo @Controller


A anotao @Resource foi substituda pela anotao @Controller e possui o
mesmo efeito.

No existe mais a interface Localization


No lugar de receber a Localization e chamar os
mtodos .getLocale() ou .getBundle(), agora voc pode injetar diretamente esses
elementos, algo como:
public class MinhaClasse {
@Inject
private Locale locale;

@Inject
private ResourceBundle bundle;

A maior diferena que onde voc fazia:

localization.getBundle().getMessage("key");

Voc vai chamar diretamente o getString do bundle:


bundle.getString("key");

LinkTo
A funcionalidade LinkTo foi atualizada e agora suporta o uso de mtodos nas
chamadas. Sendo assim voc deve converter todas as chamadas de $
{linkTo[Controller].metodo[0, 1]} para ${linkTo[Controller].metodo(0, 1)}. Veja
mais informaes no captulo sobre Views.
Pra facilitar a migrao deixamos um .sh aqui, que voc pode baixar e executar
um sed de atualizao da sintaxe (para linux e mac, em breve faremos algo pra
windows).

Serializao e deserializao

Para seguir com a especificao do HTML5, todas as datas usadas na


serializao e deserializao usam o formato ISO8601.

Restfulie

No suportado mais no core do VRaptor, mas sim como plugin.