ederfreitas,
neste projeto em que trabalhei, em um determinado momento, deixamos de usar EJB, e passamos a usar somente JPA, controlando as transações manualmente.
Para a questão de mudar dinamicamente os dados de conexão havíamos adotado a estratégia de criar instâncias de EntityManagerFactory com as configurações necessárias, mas isto nos levou a um grande problema de performance no final.
Quando se trata de EntityManagerFactory o ideal é que se tenha apenas uma instância no sistema, pois cada instância costuma ser muito cara em termos de recursos, ocupando muito espaço em memória (isso varia de acordo com o tamanho do banco).
Como criávamos um EntityMaganerFactory para cada usuário do sistema (a cada vez que um usuário realizava o login criávamos a instância personalizada e mantínhamos em um cache) em pouco tempo a memória estava cheia, com os objetos de metadados do banco.
Tentamos personalizar os dados de conexão passando propriedades no momento da criação das instâncias de EntityManager, mas não tivemos sucesso.
Um consultor que tentou nos ajudar, na ocasião, disse que havia uma forma de configurar o JBoss para que o mesmo realizasse a autenticação dos usuários, e com as mesmas credenciais fornecer as conexões ao EntityManager, de acordo com o usuário logado. Bom, a consultoria nunca conseguiu nos mostrar isso, e eu também não consegui encontrar este recurso. (A autenticação dos usuários é beleza, mas me refiro à passagem de conexões personalizadas ao EM).
Na configuração de datasource do JBoss há uma opção que permite especificar para a fábrica de conexões qual usuário e senha utilizar para recuperar conexões, mas não testei ainda para ver como isso poderia ser utilizado com o JPA:
application-managed-security: Se true, o login e senha para conexão serão fornecidos pelo código Java que requisita a conexão ao servidor de aplicações, em vez de pela definição do datasource;
:roll: