Ajax no VRaptor: JSON da maneira fácil
Postado em 08. nov, 2006 por Guilherme Silveira em Java
Vamos falar um pouco de web antes que o Paulo Silveira transforme esse blog em um livro de Hibernate!
O Fabio Kung deu a idéia de usar JSON para fazer a estrutura básica de Ajax do VRaptor. O Paulo, que detesta(va) trabalhar com JavaScript e interfaces com o usuário, gostou bastante da maneira simples de se representar objetos com JSON. Ele correu atrás de diversas bibliotecas como a JSON-tools e a JSON-lib mas achou que uma dependência apenas para isso seria muita coisa, já que não haveria a necessidade de consumir JSON como Java, apenas produzir. Ele encontrou um código na internet bem simples, mas quando foi usar descobriu uma série de testes que falhariam, então ele, juntamente com o Nico Steppat, mexeu e criou o próprio JSONWriter do VRaptor, junto com um longo test case.
JSON é uma notação simples para definir uma variável em JavaScript que pode ser facilmente traduzida para um objeto de outras linguagens. Muitos frameworks para AJAX, como o Dojo e o Prototype, consomem mensagens JSON. E agora no VRaptor, dada uma simples classe como essa:
@Component
public class ContatoController {
private List<User> users = new ArrayList<User>();
@Remotable
public void lista() {
// puxaria do banco
users.add(new User(1,"Paulo"));
users.add(new User(2,"Guilherme"));
}
public List<User> getUsers() {
return users;
}
}
Basta você anotar o método como @Remotable e acessar contato.list.ajax.logic pela URL, que o resultado será:
{"users":[{"nome":"Paulo","id":1},{"nome":"Guilherme","id":2}]}
Pronto para ser consumido por um browser! Você pode ver no site mais detalhes sobre o AJAX com o VRaptor.
O Paulo ficou empolgado com a remotabilidade, e agora está implementando o RESTful do VRaptor da mesma maneira: contatos.lista.xml.logic vai te renderizar os mesmos objetos só que em XML! Já está no CVS e estará presente uma versão básica na versão 2.2.4 (assim como integração com Spring). Isso será não só útil para expor serviços, mas também para integrar seus componentes VRaptor com consumidores de XML como o Adobe Flex e o OpenLaszlo. O próximo passo é aceitar as requisições XML e JSON, não só apenas produzi-los.
Dei hoje uma palestra sobre esse assunto no SouJava, fazendo analogias com SOA e Service Component Architecture que o Paulo tanto elogia no Apache Tuscany. Ele quer dirigir o desenvolvimento do VRaptor para esse lado: poder expor facilmente seus componentes web como serviços, facilitando a futura integração e manutenção, dois pontos que nós desenvolvedores sofremos muito atualmente com os sistemas legados.
ASSINE NOSSO RSS




Luca Bastos
09. nov, 2006
Assisti a palestra. Gostei muito da facilidade do JSON e da resposta RESTful. A anotação @Remotable é muito legal. O nome não me agrada 100% mas eu não consegui imaginar algo melhor.
Michael Nascimento Santos
09. nov, 2006
Eu consigo: @Remote
Thiago Senna
09. nov, 2006
Olá Guilherme,
muito legal este recurso. Mas assim como o Luca Bastos, também não achei o nome @Remotable muito legal. No meu caso, ao ver essa annotation, de bate e pronto veio a memória a mesma annotation utilizada no framework Genesis, do Michael.
Parabéns pelo novo recurso
Luca Bastos
09. nov, 2006
Michael
Só que @Remote continua com cheiro de RPC e é nisto que o nome não me agrada. Acho que esta feature do VRaptor também serve para trocar documentos.
Na verdade o nome deveria significar que a transformação é RESTful, algo mais parecido com @RESTfulmode, @RESTfulstuff ou @RESTfulway
Fabio Kung
09. nov, 2006
@Remote também poderia significar que a view é remota e por isso a engine vai
enviserializar os dados.Francerjo
10. nov, 2006
Se o objetivo é “…poder expor facilmente seus componentes ‘web’ como ‘serviços’…”, por que não utilizar somente @WebService ou simplesmente @Service ? Talvez fique mais claro.
Rafael de F. Ferreira
10. nov, 2006
Acho que remotable é bem adequado. Eu não gosto da idéia de usar uma annotation com REST no nome porque isso não tem nada a ver com REST, que é um estilo arquitetural (por natureza abstrato) centrado no conceito de recurso. Usando esse mecanismo do VRaptor dá facilmente para fazer sistemas não-REST. Se a saída fosse só em xml @POX seria legal.
Luca Bastos
13. nov, 2006
Vale a pena ver como o Xfire/CXF está encarando a questão de serviços via REST/JSON lá no blog do Dan Diephouse (http://netzoid.com/blog)
Quanto mais estudo Web services, mais fã fico das soluções REST (e porque não dizer, JSON).
Luca Bastos
13. nov, 2006
Procês o “o” que ficou faltando em netzooid.
Paulo Silveira
13. nov, 2006
Ok ok! O nome da anotacao parece nao ter saido a melhor do mundo. Talvez @Service ou @Serviceable (?) ficasse melhor.
Luca Bastos
13. nov, 2006
ser·vice·a·ble
)
adj.
1. Ready for service; usable: serviceable equipment.
2. Able to give long service; durable: a heavy, serviceable fabric.
.
Fonte: http://www.thefreedictionary.com/serviceable
.
(O The Free Dictionary é REST
.
A discussão agora precisaria de um linguista.
.
Eu gosto mais de @Serviceable mas depois de tanto papo já não sei mais se vale a pena trocar de nome, até porque reparei que na versão atual 2.2.3 a annotation @Remotable já está lá.
Diego Pires Plentz
26. nov, 2006
Por mais que já esteja lá Luca, um refactoring sempre cai bem.
“Se é para o bem e felicidade da nação, digam que refatoro!”
Thiago Roberto Gaspar Pinto
10. out, 2007
Por favor, eh soh um nome… Sabemos q @Remotable irá disponibilizar informação de maneira remota e pronto, seja em json ou xml… levar seus criadores a um refactory seria frescura demais pessoal…
Tah ótimo @Remotable
Neyvo
23. jul, 2008
No vraptor tem algum propriedade para alterar o tamanho do upload do MultipartRequestInterceptor? Tive que alterar o codigo fonte do vraptor para poder alterar esse valor.
Tucano
31. jan, 2011
O link do “mais detalhes sobre o AJAX com o VRaptor” direciona para um endereço de página inixistente