Gwt 2.0

3 respostas
D

Pessoal, estou pesquisando faz alguns dias e ainda não encontrei um material interessante sobre o assunto GWT + Sessions.
Estou querendo testar uma simples tela de login que fiz utilizando em GWT 2.0 + Hibernate e não estou conseguindo armazenar a sessão.
Alguém já passou por isso e tem alguma dica ou material de estudo?

Obrigado!

3 Respostas

davidtiagoconceicao

Encontrei algumas informações sobre sessões em gwt no site developerlife.com.
Não tenho como pesquisar qual a página mais especificamente, mas acho que navegando neste site você deve encontrar o artigo.

De qualquer forma, você pode obter uma referência para sessão de forma semelhante ao que faz em um servlet:

HttpSession session = getThreadLocalRequest().getSession();

A partir daí, o objeto pode ser manipulado como seria em um servlet.

D

Certo, neste caso seria melhor criar uma classe dentro do pacote server para a session?
Estou confuso com a jeito do GWT trabalhar isso, já consegui fazer a consulta com o Hibernate e validar o login.
Mas ainda não estou certo de ondo colocar o HttpSession session = getThreadLocalRequest().getSession();
Estou utilizando esta classe para obter a list de usuários...

package br.com.company.application.server;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpSession;

import net.sf.gilead.core.PersistentBeanManager;
import net.sf.gilead.core.hibernate.HibernateUtil;
import net.sf.gilead.core.store.stateless.StatelessProxyStore;
import net.sf.gilead.gwt.PersistentRemoteService;

import org.hibernate.Session;

import br.com.company.application.client.ApplicationService;
import br.com.company.application.model.Usuario;

public class ApplicationServiceImpl extends PersistentRemoteService implements ApplicationService {

	private HibernateUtil gileadHibernateUtil = new HibernateUtil();

	public ApplicationServiceImpl() {
		gileadHibernateUtil.setSessionFactory(br.com.company.application.util.HibernateUtil.getSessionFactory());
		PersistentBeanManager persistentBeanManager = new PersistentBeanManager();
		persistentBeanManager.setPersistenceUtil(gileadHibernateUtil);
		persistentBeanManager.setProxyStore(new StatelessProxyStore());
		setBeanManager(persistentBeanManager);
	}

	@Override
	public List<Usuario> getUsuarios() {
		Session session = gileadHibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<Usuario> usuarios = new ArrayList<Usuario>(session.createQuery("from Usuario").list());
		session.getTransaction().commit();
		return usuarios;
	}

}
davidtiagoconceicao

O que exatamente você quer fazer?
Quer implementar o controle de sessão dentro do serviço remoto?

Em um trabalho de faculdade recente efetuamos o controle de sessão setando um atributo da sessão, mais ou menos assim:

HttpSession session = getThreadLocalRequest().getSession();
session.setAttribute(ServerConstants.SESSION_ATTRIBUTE_NAME, sessionId);

No nosso caso, existia um controle de sessão desenvolvido por nós mesmos. O id deste controle de sessão era armazenado na sessão do gwt e, a cada invocação de método remoto, nós recuperávamos o id da sessão do gwt e validávamos o mesmo.

Para simplificar, você pode setar algum outro atributo (representando se o usuário está logado, por exemplo) e verificar o valor do mesmo a cada invocação de método remoto.

Criado 23 de dezembro de 2009
Ultima resposta 23 de dez. de 2009
Respostas 3
Participantes 2