Contexto Web x Contexto EJB

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.

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.

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.

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

[quote=maurenginaldo]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.[/quote]

Pegue o usuário com getCallerPrincipal() no contexto do EJB.

[quote=Taz]

Pegue o usuário com getCallerPrincipal() no contexto do EJB.[/quote]

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?

[quote=maurenginaldo][quote=Taz]

Pegue o usuário com getCallerPrincipal() no contexto do EJB.[/quote]

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?[/quote]

O container seta para vc. Dê uma estudada em JAAS.