Compartilhar referencia para Statefull Session Bean  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
Ferryman
JavaGuru
[Avatar]

Membro desde: 26/10/2006 16:30:23
Mensagens: 220
Offline

Bom dia pessoal,

Estou com o seguinte problema.

Uso EJB3 e gostaria de criar um stateful session bean com o usuario logado. O problema que tenho é :
Toda vez que eu faço lookup do stateful, uma nova instancia do stateful é criado. Não desejo armazenar o statefull na sessão http, gostaria de recuperar do container a instancia já existente.

Existe alguma maneira de fazer isso?

Valeu
[]s

Rafael Farias Silva (@rafaferry)

Jsigner - Engenharia reversa automática através do maven. Acesse http://code.google.com/p/jsigner
[Email] [WWW]
pozzo
JavaEvangelist

Membro desde: 08/04/2006 11:07:20
Mensagens: 331
Localização: Curitiba
Offline

Sempre usei a sessão http mesmo. Outra forma seria persistir os dados no banco, mas ai não tem porquê usar stateful.
odair.bonin
JavaBaby
[Avatar]

Membro desde: 08/02/2007 13:34:18
Mensagens: 80
Offline

Eu colocaria na sessao http e colocaria o tempo de destruir o statefull igual ao tempo da sessao http.

SCJP 5.0
[Email] [MSN]
Ferryman
JavaGuru
[Avatar]

Membro desde: 26/10/2006 16:30:23
Mensagens: 220
Offline

O problema é que eu não quero pegar o usuario (e outras informações referentes ao login) do meu stateful na camada web, e ter que ficar passando ele como parametro pra camada de negocio.

Gostaria que a camada de negocio pudesse buscar essa informação que está no Statefull que já existe no container.

[]s


Rafael Farias Silva (@rafaferry)

Jsigner - Engenharia reversa automática através do maven. Acesse http://code.google.com/p/jsigner
[Email] [WWW]
odair.bonin
JavaBaby
[Avatar]

Membro desde: 08/02/2007 13:34:18
Mensagens: 80
Offline

Vc esta usando um statefull só pra persistir o usuário logado ??

Acho q pra fazer o que vc quer, tem q ser diferente.

O statefull faz um lookup local para algum stateless passando o usuario que já esta logado. E não o cliente (web) passar o cliente que já esta logado como parâmetro.

É só uma idéia.

SCJP 5.0
[Email] [MSN]
Ferryman
JavaGuru
[Avatar]

Membro desde: 26/10/2006 16:30:23
Mensagens: 220
Offline

Na verdade meu problema eh o seguinte:

Na tela de login, o usuario entra com nome de usuario, senha e o local onde está logado.
O Local onde o usuario está logado irá ser utilizado em praticamente todas as funcionalidades do sistema, e eu não gostaria de ficar passando isso por parametro da camada de visualização para a camada de negócio.

Então eu pensei em deixar isso em um contexto onde minha camada de negócio pudesse obter essa informação, sem receber por parametro. Como não é possivel inserir informação no SessionContext, eu pensei em manter isso em um Stateful, onde quem precisasse dessa informação faria um lookup.

Porém, a cada lookup, o container me devolve uma nova instância do stateful, e por isso não estou conseguindo recuperar essa informação dentro da camada de negócio sem receber como parametro da camada web.

Ficou claro o problema agora?

[]s

Rafael Farias Silva (@rafaferry)

Jsigner - Engenharia reversa automática através do maven. Acesse http://code.google.com/p/jsigner
[Email] [WWW]
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

Acho que tornar isso persistente ou um simples mapa no lado do servidor é mais produtivo... o problema é que se não quiser tornar persistente vai virar um singleton.

Qual a sua arquitetura? O Jboss Seam faz isso pelo application context. Acho que o Spring também faz algo parecido...

Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
Ferryman
JavaGuru
[Avatar]

Membro desde: 26/10/2006 16:30:23
Mensagens: 220
Offline

As tecnologias utilizadas são basicamente servlet + velocity/ Ejb3 / JPA.

Resolvi o problema tornando o local de ultimo login persistente.
Eu gostaria de utilizar spring no projeto, porém, por uma questão de falta de conhecimento da equipe, optamos por ejb.

Fiquei decepcionado por não conseguir fazer isso com ejb, pois eu acreditava que o container injetaria a mesma instancia de stateful para a mesma sessão de usuário, porém, lendo a spec, percebi que não é isso o esperado. Ao fazer lookup o container sempre cria uma nova instancia, e você é responsável por manter a referência para o Stateful.

Valeu a ajuda pessoal.

[]s



Rafael Farias Silva (@rafaferry)

Jsigner - Engenharia reversa automática através do maven. Acesse http://code.google.com/p/jsigner
[Email] [WWW]
pozzo
JavaEvangelist

Membro desde: 08/04/2006 11:07:20
Mensagens: 331
Localização: Curitiba
Offline

Você prode resolver tudo isso utilizando a própria estrutura de segurança que o seu container EJB.
Inclusive você pode customizar o teu Principal, adicionando o "local onde está logado".

Veja o link http://www.jboss.org/community/wiki/UsingCustomPrincpalsWith
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team