Pessoal,
To querendo começar com JPA e tenho uma dúvida sobre injeção de dependência, é o seguinte:
1 - Gerei os beans de entidade das tabelas do banco;
2 - Criei controllers para cada entidade;
Estou usando netbeans e ele gerou as classes para mim. No caso das classes controler, elas recebem como parâmetro um EntityManagerFactory e à partir dele criam um EntityManager.
Achei que isso não estava legal, então criei um outro construtor que não recebe parâmetros, dentro dele eu instancio o EntityManagerFactory e depois o EntityManager. Não sei se é a melhor solução ou se tem algum reflexo negativo, mas me pareceu ser a forma mais correta (encapsular na classe a operação completa de acesso ao banco).
Depois, pensando melhor, deixar a criação do EMF dentro do controller pode provocar a criação de muitas threads de banco de forma desnecessária, já que eu seu trabalhar com tabelas diferentes dentro de um processo, cada controller irá criar uma nova thread. Por outro lado, se eu passar o EntityManagerFactory no construtor, será apenas uma “conexão” para todos os controlers.
Então eu tenho dois cenários:
1 - Passanado o EntityManagerFactory como parâmetro para o controler. Mas isso passa a responsabilidade de saber criar o EntityManagerFactory para outra classe que não tem nada haver com manipulação de banco de dados;
2 - Instanciar o EntityManagerFactory de dentro do controller. Encapsulo as operações de banco, mas cada controller irá criar uma “conexão” ao invés de compartilhar uma só entre eles.
Para solucionar o problema, pensei em usar injeção de dependência dentro dos controllers, para compartilhar entre eleas a instância de EntityManagerFactory que estiver ativa. Isso é realmente o correto a se fazer? Se sim, como fazer?
Vi a annotation @PersistenceContext(name="aaaa, unitName=“aaaa”) em alguns exemplos, mas nada direcionado à controllers. O caminho é por aí mesmo?