WebWork e a sessão do Usuário e Hibernate

6 respostas
marcelomartins

Gostaria de saber como eu faco pra manipular a sessão do usuário no webwork. Eu to usando o webwork e não entendi muito bem como fazer isto porque na Action eu não tenho acesso ao objeto request e por isto não sei como chegar até ele.

Outra coisa é sobre o hibernate, eu to usando uma implementação que gerencia a sessão do hibernate em um filtro no servlet, essa é a melhor implementação do hibernate com o webwork???

Obrigado

Marcelo Martins

6 Respostas

smota

Hummm … primeiro quanto ao Hibernate … no filtro até que não é má idéia mas pra você poder utilizar o próprio framework (e seus recursos com a view, etc. e tal) tente fazer com um interceptor … veja este exemplo.

Quanto a seção, veja o tutorial aqui no GUJ … ele explica como seria um controle de seção, você vai usar pra isso o suporte a IoC do framework.

marcelomartins

valeu cara, te devo uma gelada! :slight_smile: Muito bom o webwork!!

marcelomartins

Samuel, primeiro gostaria de dizer queo teu tutorial sobre webwork é simplesmente o melhor, sem dúvida. Parabéns e obrigado por dispor do teu tempo desenvolvendo tutoriais.

Só agora me apareceu umas dúvidas e uns problemas.

  • Eu segui passo a passo o tutorial, e primeiro eu não achei a implementação da Interface UserSessionAware. Procurei na internet outros tutoriais e achei vários que usavam o mesmo esquema de uma interface Classe+Aware e incrivelmente nenhum deles fala da implementação desta Interface.
  • O erro que deu pra mim é que a classe UserSession é nula quando vou fazer o userSession.setUser() e quando vou comprar pra ver se tem usuario logado com userSession.getUser(). Então nao entendi onde esta classe é instanciada.
  • Em todas as minhas actions (as que extenderam a classe que extende ActionSupport) vou precisar ter User model = new User() e public Object getModel()?? isso é obrigatório? não tem como abstrair??
E é isso, ontem fiquei até muito tarde tentando encontrar onde eu estava errando mas foi bem complicado, e não entendi bem o problema então estou recorrendo novamente ao forum. Qualquer ajuda será bem vinda!!

Obrigado

Marcelo Martins

smota

Primeiro :oops: ... obrigado :D

"marcelomartins":
- Eu segui passo a passo o tutorial, e primeiro eu não achei a implementação da Interface UserSessionAware. Procurei na internet outros tutoriais e achei vários que usavam o mesmo esquema de uma interface Classe+Aware e incrivelmente nenhum deles fala da implementação desta Interface.
Na verdade essa interface apenas define qual o método será usado para setar o componente na action .. o código dela é o seguinte:
public interface UserSessionAware {
	
	public void setUserSession(UserSession usr);
	
	public UserSession getUserSession();
}
(no meu caso eu adicionei o get também pro filtro de login poder se basear nesta interface).

Estamos providenciando pra colocar logo o código do tutorial para download ....

"marcelomartins":
- O erro que deu pra mim é que a classe UserSession é nula quando vou fazer o userSession.setUser() e quando vou comprar pra ver se tem usuario logado com userSession.getUser(). Então nao entendi onde esta classe é instanciada.

A classe é instanciada pelo próprio framework, essa é a função do container de IoC dele ... ele instancia e gerencia o lifecycle do componente (no caso nós dissemos no arquivo de configuração que é pra session, entao o mesmo objeto será usado enquanto exister uma sessão do usuário no server).

"marcelomartins":
- Em todas as minhas actions (as que extenderam a classe que extende ActionSupport) vou precisar ter User model = new User() e public Object getModel()?? isso é obrigatório? não tem como abstrair??

Quando você extende ActionSupport não precisa do model .... só será exigido se sua action implementar a interface ModelDriven .... no caso do tutorial foi definido que todas as actions seriam modelDriven, então nós já implementamos a interface na super classe de todas as actions do exemplo.

Não tem muito lógica abstrair o model porque teoricamente cada action utilizará um modelo de negócio, no login será User, em uma action de ckecout será o carrinho de compras e por ai vai.

Espero ter ajudado

marcelomartins

Ahmmmmmmmmm. entendi! :). Eu tinha feito exatamente isto na interface, mas como não tinha como saber se tava certo achei que poderia ser o problema, certamente o código completo no GUJ irá ajudar muita gente.

Vamos ver o que eu peguei o esquema.

O ModelDriven faz com que o WebWork popule o meu objeto model, com os dados do formulário!! certo??? Ai eu não preciso ter todos os atributos pra simplesmente passar direto pra minha classe de negocio? Muito massa!!!

E ainda continuo com o problema do nullpointerexception quando chega na this.userSession.setUser(model) da o erro. E eu percebi que todos os dados do formulário também não foram repassados para o objeto model!

Mas valeu Samuel!! Eu vou dar mais umas mexidas aqui pra ver onde eu errei!! Te devo uma caixa de gelada!!! Tu bebe Polar??? :slight_smile:

smota

Aeee … tamu chegando lá.

Extamente, isso evita de você mesmo ter que ir populando já que no fim das contas é bem provável que você vai usar um model mesmo.
(caso nao va usar nao implemente essa interface, vc soh tera mais um objeto inutil :wink: )

Vc aplicou todos os interceptors direitim conforme o tutorial?

Tanto a criação do componente (userSession) quanto popular o bean são funções de interceptors do framework … dê uma conferida.

eu nao bebo :shock: … mas aceito uma boa vitamina :wink:

Criado 14 de abril de 2004
Ultima resposta 15 de abr. de 2004
Respostas 6
Participantes 2