Trabalhando com Session no DWR - Parte 2.2

 

Dando continuidade a parte 1 do nosso artigo sobre Session no DWR, vamos falar de uma implementação bem elegante e recomendada para o uso do DWR com Session.

 

Preparando o ambiente e ferramentas

 

Segue abaixo o nosso ambiente:

 

IDE: MyEclipse 6.0

ContainerWeb: Tomcat 5.5.17

DWR: Versão 2.0.1

JAVA: JKD5.0 ou superior.

 

Informações Iniciais

Para você acompanhar melhor esse artigo você deve ler a primeira parte do artigo localizado neste link, para que você tenha um bom entendimento do que será apresentado.

 

Vou mostrar aqui outra maneira de se utilizar do objeto WebContext do DWR, para facilitar a sua implementação.

 

Criando a Classe Session e SessionFaface.

Vamos inicialmente criar uma Interface Session, que nada mais é do que uma implementação do objeto HTTPSession.

 

Você poderia até estender a classe HTTPSession, mas esse não é o objetivo e sim implementar alguns métodos do HTTPSession como outros que você deseje fazer sem utilizar diretamente o objeto HTTPSession.

 

Interface Session

Segue o código que iremos utilizar para criar essa classe.

 

public interface Session {

 

      Object getAttribute(String attribute);

      Enumeration getAttributeNames();

      long getCreationTime();

      String getId();

      long getLastAccessedTime();

      int getMaxInactiveInterval();

      void invalidate();

      boolean isNew();

      void removeAttribute(String arg0);

      void setAttribute(String attribute, Object arg1);

      void setMaxInactiveInterval(int arg0);

}

 

Criamos nessa interface alguns dos métodos que pretendemos utilizar, se você observar esses métodos são os mesmos do objeto HTTPSession.

 

Classe SessionFacade que implementa a interface Session

Segue o código que iremos utilizar para criar essa classe.

 

public class SessionFacade implements Session{

 

      private WebContext wc;

     

      public SessionFacade(){

            this.wc = WebContextFactory.get();

      }

     

      public Object getAttribute(String attribute) {

            return this.wc.getHttpServletRequest().getSession().getAttribute(attribute);

      }

 

      public Enumeration getAttributeNames() {

            return this.wc.getHttpServletRequest().getSession().getAttributeNames();

      }

 

      public long getCreationTime() {         

            return this.wc.getHttpServletRequest().getSession().getCreationTime();

      }

 

      public String getId() {

            return this.wc.getHttpServletRequest().getSession().getId();

      }

 

      public long getLastAccessedTime() {

            return this.wc.getHttpServletRequest().getSession().getLastAccessedTime();

      }

 

      public int getMaxInactiveInterval() {

            return this.wc.getHttpServletRequest().getSession().getMaxInactiveInterval();

      }                

 

      public void invalidate() {

            this.wc.getHttpServletRequest().getSession().invalidate();      

      }

 

      public boolean isNew() {

            return this.wc.getHttpServletRequest().getSession().isNew();

      }    

 

      public void removeAttribute(String arg0) {

            this.wc.getHttpServletRequest().getSession().removeAttribute(arg0);

      }    

 

      public void setAttribute(String arg0, Object arg1) {

            this.wc.getHttpServletRequest().getSession().setAttribute(arg0, arg1);

      }

 

      public void setMaxInactiveInterval(int arg0) {

            this.wc.getHttpServletRequest().getSession().setMaxInactiveInterval(arg0);

      }

 

}

 

Observe que utilizamos o objeto WebContext do DWR, pois é com ele que iremos gerenciar os objetos da Sessão e também do Request, que não entra nesse exemplo.

Você viu também que apenas replicamos os códigos padrões do objeto HTTPSession, tais como: setAttribute, getAttribute etc. Mas que nada impede que você crie seus próprios métodos.

 

Abaixo segue o trecho do código que iniciamos o objeto WebContext.

 

private WebContext wc;

     

      public SessionFacade(){

            this.wc = WebContextFactory.get();

      }

 

 

Utilizando a nova implementação.

Para se utilizar dessa nova implementação não precisaremos alterar nada do lado do javaScript, iremos apenas alterar o código da classe SessionFacade

 

JAVA(SessionFacade)

 

Método antes da nova implementação:

 

public String exampleSession1(String attribute){

    WebContext wc = WebContextFactory.get();

            

     String valueSession = "";

            

     if(wc.getHttpServletRequest().getSession().getAttribute(attribute)!= null){

 

valueSession = wc.getHttpServletRequest().getSession().getAttribute(attribute).toString();

 

     }else{

        valueSession = "Session is null";

     }

                   

     return valueSession;

}

 

Método após a nova implementação:

 

public String exampleSession1(String attribute){

          Session session = new SessionFacade();

                 

           String valueSession = "";

                 

           if(session.getAttribute(attribute)!= null){

 

             valueSession = session.getAttribute(attribute).toString();

 

           }else{

              valueSession = "Session is null";

           }

                       

           return valueSession;

      }

 

Como você pode observar eu diminui consideravelmente o código do método e o deixei bem mais legível e simples de se entender. Apenas criei uma instância da classe Session que eu criei e utilizei ele normalmente, sem nada muito mágico.

 

Caso seja necessário ou você deseje, poderá também utilizar a classe SessionFacade diretamente no JavaScript, basta mapear no dwr.xml e colocar no scope como session e você poderá chamar diretamente objetos da sessão no JavaScript.

 

Conclusão

Essa forma de trabalhar com a Session usando o DWR é muito simples e bem prática. O exemplo passado aqui é apenas uma das formas como você pode implementar o Objeto WebContext do DWR e ela também poderá ser utilizada normalmente com o objeto HTTPRequest, da mesma forma como foi utilizado para o HTTPSession.

 

Você viu também como é simples, prático e muito fácil de fazer.

 

Espero que este artigo tenha ajudado ao entendimento e caso tenham a vir alguma dúvida entrem em contato.

 

As classes Session e SessionFacade podem ser baixadas nos links abaixo:

 

Session

SessionFacade

 

Obrigado e Boa Sorte.

 

Handerson Frota

handersonbf@gmail.com

www.handersonfrota.com.br