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!
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.
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…
[code]
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;
}
}[/code]
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.