Injeção de EntityManager usando @PersistenceContext

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

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.

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

Sávio

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.