| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/10/2008 08:08:52
|
maurenginaldo
JavaEvangelist
![[Avatar]](/images/avatar/d82d678e9583c1f5f283ec56fbf1abb7.png)
Membro desde: 26/04/2006 18:16:41
Mensagens: 435
Localização: Belo Horizonte-MG
Offline
|
Oi pessoal,
Quero saber se existe uma forma de armazenar um objeto no contexto EJB igual eu faço no contexto Web (HttpSession)?
O meu problema é o seguinte: o usuário loga na aplicação web, coloco ele na sessão, blz. Nos meus ejb's estão os metódos para realizar a persistência (persist, merge, remove...). Esses métodos são monitorados por um @EntityListeners para que grave um log sempre que são executados (@PosPersiste, @PreUpdate, @PreRemove, ...). Quando esses métodos callback são executados, eu quero que grave também o usuário que realizou a chamada, porém esse usuário está na sessão da camada Web e eu não posso ir lá, pois assim meu módulo EJB dependeria do módulo Web, quebrando a indepêndencia das minhas camadas.
Alguém tem uma idéia de como resolveria esse problema?
Obrigado a todos.
|
Mauren Ginaldo Souza
______________________________________________________________
"Quis Custodie Ipsos Custodes." Quem guardará os guardiões. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/10/2008 08:29:55
|
Jair Rillo Junior
Moderador
![[Avatar]](/images/avatar/31b3b31a1c2f8a370206f111127c0dbd.jpg)
Membro desde: 29/04/2003 21:19:53
Mensagens: 2524
Localização: São Paulo / Campinas
Offline
|
Uma solução simples e funcional que eu vejo é o seguinte:
Quando seu WEB Module chamar um sessionBean (para fazer as operações no BD), mande também qual o usuário logado.
|
Jair Rillo Junior
http://www.jairrillo.com/blog | Twitter | SCJA, SCJP, SCWCD, SCBCD, IBM SOA Associate |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/10/2008 08:47:40
|
maurenginaldo
JavaEvangelist
![[Avatar]](/images/avatar/d82d678e9583c1f5f283ec56fbf1abb7.png)
Membro desde: 26/04/2006 18:16:41
Mensagens: 435
Localização: Belo Horizonte-MG
Offline
|
Oi Jair,
sua idéia seria uma solução se os métodos para gravar log fossem chamados pelo programador. Porém esses métodos são métodos callback, eles não são invocados via programação, é o próprio container que os invoca.
Por isso a minha idéia de colocar o usuário em um contexto onde todos os ejb's pudessem acessar.
|
Mauren Ginaldo Souza
______________________________________________________________
"Quis Custodie Ipsos Custodes." Quem guardará os guardiões. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/10/2008 09:03:34
|
Jair Rillo Junior
Moderador
![[Avatar]](/images/avatar/31b3b31a1c2f8a370206f111127c0dbd.jpg)
Membro desde: 29/04/2003 21:19:53
Mensagens: 2524
Localização: São Paulo / Campinas
Offline
|
Não me atentei a esse detalhe, principalmente porque os callbacks rodam em uma transação diferente do business method.
Realmente não conheço uma outra alternativa a esse problema, infelizmente
|
Jair Rillo Junior
http://www.jairrillo.com/blog | Twitter | SCJA, SCJP, SCWCD, SCBCD, IBM SOA Associate |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/10/2008 19:53:40
|
andre_salvati
GUJ Ranger
Membro desde: 02/06/2005 16:28:38
Mensagens: 931
Offline
|
maurenginaldo wrote:Oi Jair,
sua idéia seria uma solução se os métodos para gravar log fossem chamados pelo programador. Porém esses métodos são métodos callback, eles não são invocados via programação, é o próprio container que os invoca.
Por isso a minha idéia de colocar o usuário em um contexto onde todos os ejb's pudessem acessar.
Pegue o usuário com getCallerPrincipal() no contexto do EJB.
|
Ajude na criação do StackOverflow em português!!!
http://area51.stackexchange.com/proposals/23539/software-development-in-portuguese?referrer=tI8Uon7RDszY236h5e0UuA2
http://www.empresadigital.inf.br
http://twitter.com/afsalvati |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/10/2008 20:24:27
|
maurenginaldo
JavaEvangelist
![[Avatar]](/images/avatar/d82d678e9583c1f5f283ec56fbf1abb7.png)
Membro desde: 26/04/2006 18:16:41
Mensagens: 435
Localização: Belo Horizonte-MG
Offline
|
Taz wrote:
Pegue o usuário com getCallerPrincipal() no contexto do EJB.
Como seto essa propriedade?
Se meu ejb é um stateless session bean e seto esse CallerPrincipal no EJBContext, quando meu @EntityListeners acessar o EJBContext vai conseguir recuperar esse usuário, mesmo com várias pessoas acessando concorrentemente?
|
Mauren Ginaldo Souza
______________________________________________________________
"Quis Custodie Ipsos Custodes." Quem guardará os guardiões. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/10/2008 12:30:49
|
andre_salvati
GUJ Ranger
Membro desde: 02/06/2005 16:28:38
Mensagens: 931
Offline
|
maurenginaldo wrote:
Taz wrote:
Pegue o usuário com getCallerPrincipal() no contexto do EJB.
Como seto essa propriedade?
Se meu ejb é um stateless session bean e seto esse CallerPrincipal no EJBContext, quando meu @EntityListeners acessar o EJBContext vai conseguir recuperar esse usuário, mesmo com várias pessoas acessando concorrentemente?
O container seta para vc. Dê uma estudada em JAAS.
|
Ajude na criação do StackOverflow em português!!!
http://area51.stackexchange.com/proposals/23539/software-development-in-portuguese?referrer=tI8Uon7RDszY236h5e0UuA2
http://www.empresadigital.inf.br
http://twitter.com/afsalvati |
|
|
 |
|
|