Ajax no VRaptor: JSON da maneira fácil

Postado em 08. nov, 2006 por 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.

Guilherme Silveira

Tags: , , ,

15 Respostas para “Ajax no VRaptor: JSON da maneira fácil”

  1. 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.

  2. Eu consigo: @Remote :-D

  3. 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 ;)

  4. 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

  5. Fabio Kung

    09. nov, 2006

    @Remote também poderia significar que a view é remota e por isso a engine vai envi serializar os dados.

  6. 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.

  7. 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.

  8. 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).

  9. Luca Bastos

    13. nov, 2006

    Procês o “o” que ficou faltando em netzooid. ;)

  10. 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.

  11. 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á.

  12. 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!”

  13. 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

  14. 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.

  15. Tucano

    31. jan, 2011

    O link do “mais detalhes sobre o AJAX com o VRaptor” direciona para um endereço de página inixistente

Deixar uma Resposta