Injeção de EntityManager usando @PersistenceContext

3 respostas
saviobarr

Olá amigos,
Estou tentando criar um EntityManager usando o PersistenceContext, mas o contêiner não injeta o EntityManager. O trecho de código:

@PersistenceContext(unitName=“calculo”)
private EntityManager em //a variavel em não recebe a injeção.

Se eu fizer “manualmente” a criação do EntityManager, funciona perfeitamente:

EntityManagerFactory emf = Persistence.createEntityManagerFactory(“calculo”);
EntityManager em = emf.createEntityManager(); //EntityManager criado com sucesso…

Alguém pode explicar porque a annotation @PersistenceContext não está injetando? Não lança exceção, apenas a variável em fica null.
Estou usando a implementação JPA TopLink e servidor JBoss 4.2

Obrigado a todos

Sávio Barros

3 Respostas

L

Depende, o container só injeta em objetos gerenciados por ele. Para um servidor de aplicações Java EE 5, só ocorre a injeção em: EJB, Managed Bean do Faces e Servlet. Fora isso, depende de containeres de terceiros. Um exemplo notável é o Spring, que também injeta Entity Managers no seus beans, havendo configuração apropriada.

Fora esses casos, principalmente em objetos que VOCÊ instancia, não ocorre a injeção. Mas tem uma coisa, o JBoss não injeta em Servlets, porque não é uma implementação Java EE 5 completa (digamos que só 95%), e mesmo assim, é muito chato injetar EntityManager em Servlets, pois estes são reusáveis entre várias requisições. Em Servlet, quando possível, é preferível injetar EntityManagerFactory e pegar manualmente um EntityManager deste.

saviobarr

Olá,
Estou tentando injetar num ManagedBean do JSF… deveria funcionar, certo?

Sávio

L

Boa noite.

Estou passando pelo mesmo problema, em tetoria está tudo configurado como deve estar, mas o EntityManager sempre vem null.
saviobarr, você conseguiu resolver seu problema?

Obrigado.

Criado 1 de agosto de 2008
Ultima resposta 5 de mai. de 2010
Respostas 3
Participantes 3