| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2009 11:55:46
|
Ferryman
JavaGuru
![[Avatar]](/images/avatar/2e3907cbad887e6a1bea84d450b756db.jpg)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2009 12:44:59
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2009 13:47:33
|
odair.bonin
JavaBaby
![[Avatar]](/images/avatar/bd5bbd79ead46e4172253e0d862b5246.jpeg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2009 14:26:16
|
Ferryman
JavaGuru
![[Avatar]](/images/avatar/2e3907cbad887e6a1bea84d450b756db.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2009 14:42:59
|
odair.bonin
JavaBaby
![[Avatar]](/images/avatar/bd5bbd79ead46e4172253e0d862b5246.jpeg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2009 15:44:24
|
Ferryman
JavaGuru
![[Avatar]](/images/avatar/2e3907cbad887e6a1bea84d450b756db.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2009 19:39:44
|
rodrigoy
GUJ Ranger
![[Avatar]](/images/avatar/cf79ae6addba60ad018347359bd144d2.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/08/2009 09:29:02
|
Ferryman
JavaGuru
![[Avatar]](/images/avatar/2e3907cbad887e6a1bea84d450b756db.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/08/2009 13:25:21
|
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
|
|
|
 |
|
|