Pessoal,
estou tentando achar uma forma de passar dados "contextuais" para um EJB. Seria mais ou menos assim:
- O usuário do sistema faz o login e neste momento seleciona algumas informações - empresa, filial, etc.
Quero utilizar estas informações dentro dos meus EJBs (EJB 3.1), porém não quero ter que refatorar todas as assinaturas e chamadas de métodos.
Gostaria de passar essas informações no contexto da chamada e depois poder utilizar elas dentro dos EJBs. Veja o pseudo codigo:
/** criado quando o usuario faz login */
public class ContextoDeSessaoDoUsuario {
private Usuario atual;
private Empresa empresa;
// getters e setters
}
/** controlador JSF */
@ManagedBean // at web tier
public class ListPessoasController {
@EJB
PessoasRepository pessoas; // some remote interface
// getters / setters
private String nome; // preenchido na interface com o usuario
/** utilizado em um componente datatable qualquer */
public List<Pessoa> listaTodos(){
return pessoas.listaTodosComNomeOuRazaoSocial(nome); // Aqui nao vou passar os dados do contexto
}
}
/** EJB que vai precisar do contexto */
@Stateless
public PessoasEJB implements PessoasRepository {
@Inject
ContextoDeSessaoDoUsuario contexto; // injetado antes da chamada, por uma factory qualquer do CDI
public List<Pessoa> listaTodosComNomeOuRazaoSocial(String nomeOuRazaoSocial){
TypeQuery<Pessoa> consulta = ... // consulta padrao + filtros dos parametros
consulta.setParameter("empresa",contexto.getEmpresa());
return consulta.getResultList();
};
}
Alguém já passou por esta situação? Qual a solução? Usar ThreadLocal? E se não estiver na mesma JVM?
Obrigado pela ajuda.