Ajax e Java Fácil - Conhecendo o DWR



Salve salve senhoras e senhores! Depois de um tempo sumido, vamos falar sobre um framework que conheci recentemente e achei bastante interessante. O nome desse cara é meio estranho (Achei isso de cara quando vi), e se chama DWR. Vamos lá!

O DWR é um framework Ajax para Java 100% Open Source, de fácil utilização e implementação. 
O DWR facilita o acesso às classes Java de uma maneira simples e transparente utilizando-se principalmente de JavaScript. Ele também fornece uma maneira simples para a integração com vários frameworks Java do mercado, assim como proporcionar acesso Ajax às suas funcionalidades.

Além de ser considerado um dos melhores frameworks Ajax para Java do mercado, o DWR é muito útil para adicionar funcionalidades Ajax em suas aplicações web, tornando a sua aplicação mais interativa. Caso você deseje adicionar funcionalidades em Ajax em sua aplicação (nova ou legada), com certeza o DWR irá resolver seu problema com facilidade.
O DWR é um framework OpenSource Ajax para Java que está ligado diretamente a camada de controle do seu sistema. Ele ficará responsável pela comunicação Ajax de uma aplicação web, mantendo uma transparência nas chamadas para os seus métodos Java.

Com uma simples configuração e utilização o DWR se mostra muito eficaz e útil na hora de adicionar funcionalidades Ajax à sua aplicação. Possui ainda uma vasta integração com os principais frameworks Java do mercado, facilitando assim o seu uso em aplicações legadas ou não.
O DWR tem as suas principais funcionalidades localizadas no util.js e engine.js, cujo a sua utilização é muito simples e intuitiva.
Métodos como o setValues() e getValues(), onde é possível preencher um formulário a partir de um objeto Java ou receber dados de um formulário apenas com uma linha e enviá-los para a classe Java são funcionalidades marcantes do DWR.
Temos ainda várias outras funcionalidades úteis para o desenvolvimento de aplicações com Ajax. Tudo isso de uma maneira simples e objetiva, fazendo com que o DWR se torne muito produtivo.

Já vimos vários artigos sobre DWR (Direct Web Remoting) espalhados na internet. No meu site existem vários publicados, e temos também no portal DevMedia e na revista da Java Magazine (Edição 48), mas este framework ainda é novidade para muitos; existem desenvolvedores que ainda não entenderam bem o seu objetivo e suas funcionalidades. Apresentaremos neste artigo de uma maneira simples e objetiva como o DWR funciona, como configurá-lo e utilizar as suas principais funcionalidades e facilidades.
Não temos a intenção de mostrar ao leitor com exemplos “reais” (já temos artigos sobre isso) as funcionalidades do DWR. A intenção principal deste artigo é apresentar uma visão aprofundada de como o DWR funciona, suas utilidades e finalidades e o contexto geral do framework, com foco detalhado e objetivo sobre cada funcionalidade.
Para quem ainda imagina que o DWR seja apenas “um a mais”, apresentaremos todas as suas vantagens, funcionalidades e a sua importância e utilidade como um excelente framework Ajax para Java. O DWR é conhecido pela sua facilidade, simplicidade e robustez, isso tudo em uma API que possui uma enorme e funcional integração com a maioria dos frameworks Java do mercado.
O que é o DWR?

É um framework Open Source 100% Java, que foi criado com um único objetivo: facilitar o acesso a uma classe Java utilizando-se de Ajax para a sua comunicação.
Em outras palavras, o DWR faz a comunicação via Ajax de uma classe Java, permitindo você acessar de maneira simples e transparente seus métodos (veja a Figura 1). Dessa forma, torna mais fácil a chamada de JavaScript para Java e Java para JavaScript (ReverseAjax ou COMET).
O DWR conta com uma vasta integração com vários frameworks Java, tais como: Spring, Spring Security (antigo Acegi), EJB 2.x e 3.0, Mentawai, WebWork, Struts 1.x e 2.0 (a validação em Ajax é com o DWR), Hibernate, JSF, dentre outros. E claro, a integração com qualquer framework JavaScript como ExtJS, DOJO, JQuery, Yui e Scriptaculous, alguns dos quais já vêm na API do DWR (DOJO e Scriptaculous).
Outro ponto forte é a facilidade de utilizar Ajax em sua aplicação de uma maneira bem fácil e totalmente cross-browser (funciona em vários browsers), acabando com as preocupações de qualquer programador web que queira utilizar Ajax nas suas aplicações.
Uma das dificuldades que temos ao desenvolver aplicações em Ajax é garantir o mesmo comportamento para vários browsers. Por isso, não seria prudente hoje em dia desenvolver aplicações sem frameworks/API´s que ofereçam este suporte (execução homogênea em diferentes browsers). Com o DWR todas as suas funcionalidades nativas são cross-browsers.
Figura 1. Acesso do JavaScript a uma método da classe Java.
Temos ainda a funcionalidade de ReverseAjax (veja Edição 49) que está disponível desde o DWR 2.0, que consiste em permitir códigos Java em execução no servidor se comunicarem com os clientes (usuários). O DWR pode enviar códigos JavaScript (através da API do próprio DWR, assim como no GWT) ou executar uma determinada função JavaScript no cliente, fazendo com que o servidor se comunique sem a necessidade do usuário disparar a ação. Tudo isso pode ser feito para várias páginas que estão na sessão do servidor (observe a Figura 2).

Figura 2. Classe Java acessando várias páginas de vários browsers.
A técnica utilizada para esse acesso Servidor-Cliente é chamada de COMET, mas o DWR tem seu próprio nome, denominada Reverse Ajax. É uma poderosa técnica que visa atualizar os clientes sem a necessidade dos mesmos dispararem uma ação. O DWR ainda disponibiliza várias técnicas de se fazer Reverse Ajax – todas bem simples.
Como o DWR funciona?

O DWR é constituído por duas partes principais:
·         Um Servlet Java (DwrServlet) em execução que processa pedidos e respostas, e envia de volta para o navegador;
·         JavaScript no navegador que envia os pedidos e pode atualizar a página dinamicamente.
O DWR gera o JavaScript dinamicamente com base em classes Java. Uma chamada JavaScript é executada e o DWR executa seu código no servidor. Logo depois ele encaminha os dados de volta, fazendo assim o Ajax, que ainda pode ser configurado de uma maneira bem simples para modo assíncrono ou síncrono.
Este método que o DWR utiliza é bastante familiar com os mecanismos de RPC (Remote Procedure Call) convencionais como RMI ou SOAP, com a vantagem de que ela será executada sem que seja necessário nenhum plugin ou configurações complexas.
Para quem não gosta de codificar em JavaScript, o DWR vem com várias APIs que os desenvolvedores podem utilizar no lado Java para criar os JavaScripts (algo semelhante ao GWT). Atualmente temos várias APIs em Java integradas com o DWR, entre elas: TIBCO GI (TIBCO General Interface), Dojo Toolkit, Scriptaculous.
Podemos confiar?

O DWR é apadrinhado/patrocinado pela TIBCO e tem uma parceria com a DOJO Foundation, assim como outras que também apostam no framework. Isso garante que o framework continuará sendo ativamente desenvolvido, pois os investimentos e parcerias são constantes.
O seu criador Joe Walker faz parte da OpenAjax Alliance, cuja missão é criar um eco-sistema para aplicações Ajax, incluindo a capacidade de misturar e combinar várias bibliotecas em soluções únicas, explicando assim o porquê do DWR ter essa vasta integração.
Podemos comentar sobre algumas das várias grandes empresas que utilizam este framework, por exemplo: American Arlines, Walmart, Jira e Confluence, DZone, InfoQ, LinkedIn, MasterCard, Citigroup e Dow Jones. No desenrolar deste artigo conheceremos todo o potencial do DWR.
Configurações

O DWR oferece duas opções de configuração: Annotations ou XML. Eu particularmente prefiro configurá-lo via XML, pois evita a intrusão nas classes por causa das Annotations. O XML facilita a remoção ou adição de novas classes Java que serão utilizadas via Ajax sem ter que alterá-las para isso. Vários desenvolvedores tem aversão a arquivos de configuração longos e complexos, eu sou um deles; mas no caso do DWR, a configuração via XML é tão simples que não será um tormento.
Essa é outra vantagem do DWR, pois você poderá integrar/adicionar recursos Ajax em qualquer aplicação Java, sem a necessidade de alterar seu código original no lado Servidor. Assim, se você tem uma aplicação com Struts, por exemplo, e deseja reutilizar certo método para uma chamada Ajax, basta adicionar o DWR, realizar algumas configurações e apontar para a Action desejada, e a sua funcionalidade estará utilizando AJAX, sem alterar o seu código fonte original.
No período da escrita deste artigo a versão atual do DWR é a 2.0.5. Fizemos o download do dwr.jar (http://directwebremoting.org/dwr/download) e o adicionamos à pasta WEB-INF\lib do projeto.
Adicione o servlet do DWR no web.xml (Listagem 1) e logo depois crie o arquivo dwr.xml (Listagem 2), todos eles na pasta WEB-INF/.

Listagem 1. Configurando o DWR no web.xml.
1     <servlet>
2     <servlet-name>dwr-invoker</servlet-name>
3     <display-name>DWR Servlet</display-name>
4     <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
5     <init-param>
6         <param-name>debug</param-name>
7         <param-value>true</param-value>
8     </init-param>
9     </servlet>
10    <servlet-mapping>
11       <servlet-name>dwr-invoker</servlet-name>
12       <url-pattern>/dwr/*</url-pattern>
13    </servlet-mapping>

Listagem 2. Criando o dwr.xml.
1     <!DOCTYPE dwr PUBLIC
2     "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
3     "http://getahead.org/dwr/dwr20.dtd">
4     <dwr>
5     <allow>
6         <create creator="new" javascript="ClasseJava" scope="session">
7            <param name="class" value="com.javamagazine.ClasseJava"/>
8         </create>
9         <convert converter=”bean” match=”com.javamagazine.beans.*”/>
10      </allow>
11    </dwr>


Como mostrado na Listagem 1, é bem simples adicionar o DWR, basta criar um mapeamento comum de um Servlet. E na Listagem 2 é onde iremos definir quais classes queremos ter acesso no JavaScript. Veremos agora as configurações mais detalhadas do dwr.xml.

Allow(<allow>...</allow>)
É onde definimos os creators para as classes que desejamos acessar via JavaScript.

Create(<create...>...</create>)
Tag que fica dentro da allow, onde definimos qual classe iremos acessar no JavaScript. Veja mais algumas configurações do create na Tabela 1.

Tabela 1. Entendendo a tag create do dwr.xml.
Param(<param...>...</param>)
Tag localizada dentro da tag create, onde apontamos qual classe o DWR deve “conhecer” no JavaScript. Veja algumas configurações na Tabela 2.

Parâmetro
Valor
Exemplos
Descrição
name
class
<param name=”class”…/>
Define que o parâmetro será uma classe Java.
value
Endereço da classe
<param … value=”pacote.Classe”/>
Onde é definido o endereço completo da classe que você deseja ter acesso no JavaScript.
Tabela 2. Entendendo a tag param do dwr.xml.
Convert(<convert...>...</convert>)
Essa tag tem como funcionalidade definir o tipo de objeto que será transitado entre o cliente (browser) e o servidor. Poderá ser um JavaBean, POJO, List ou qualquer tipo do Java. Vejamos a sua configuração na Tabela 3.

Parâmetro
Valor
Exemplos
Descrição
converter
bean,servlet,collection,mapdom,dom4j,jdomxom,exception….
<convert converter=”bean”…/>
Define o tipo de objeto que você deseja transitar (converter) entre a camada Java e a JavaScript e vice-versa.
match
Endereço do objeto/classe
<convert ... match=”pacote.Objeto”/>
<convert ... match=”pacote.bean.*”/>
Localização ou endereço do objeto. Se você quer utilizar todos os objetos de um pacote, basta colocar o endereço do pacote e no lugar de adicionar as classes apenas coloque “*”.
Tabela 3. Entendendo a tag converter do dwr.xml.
Seguindo essas configurações percebe-se o quão simples é configurar o DWR, bastando adicionar o servlet no web.xml, e no dwr.xml adicionar a classe Java que você deseja acessar seus métodos com AJAX.
Para você ter uma idéia da facilidade para adicionar o DWR em uma aplicação já existente (utilizando XML), crie uma aplicação em qualquer framework e depois adicione o DWR a uma funcionalidade ou em toda a aplicação. O impacto é mínimo, ou dependendo do tipo da aplicação, é zero."
Então é isso galera, espero que tenham gostado até a próxima!. Referência Java Magazine.

Comentários

Postagens mais visitadas deste blog

E Esse Tal de Nano Service?

Executar Audio em Java Swing

Validando Email em Java Com e Sem expressão Regular