Contexto Web x Contexto EJB  XML
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Autor Mensagem
maurenginaldo
JavaEvangelist
[Avatar]

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.
[Email] [WWW] [MSN]
Jair Rillo Junior
Moderador
[Avatar]

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
maurenginaldo
JavaEvangelist
[Avatar]

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.
[Email] [WWW] [MSN]
Jair Rillo Junior
Moderador
[Avatar]

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
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
maurenginaldo
JavaEvangelist
[Avatar]

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.
[Email] [WWW] [MSN]
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
 
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Ir para:   
Powered by JForum 2.1.8 © JForum Team