Problema com @PersistenceContext do JPA

3 respostas
D

Estou tentando utilizar JPA em minha aplicação web mas quando tento obtar o EntityManager utilizando o annotation @PersistenceContext(unitName="default") ele nao funciona (a variável vem nula). Mas se eu utilizar do seguinte modo funciona:
em = jpa.getEMF().createEntityManager();

sendo que o objeto jpa equivale a classe a seguir:

public class JPAResourceBean {

private EntityManagerFactory emf;

/*
 * Lazily acquire the EntityManagerFactory and cache it.
 */
 public EntityManagerFactory getEMF (){
    if (emf == null){
        emf = Persistence.createEntityManagerFactory("default", new java.util.HashMap());
    }
    return emf;
}

}

meu percistence.xml é o seguinte:

&lt?xml version="1.0" encoding="UTF-8"?&gt

<persistence xmlns=“http://java.sun.com/xml/ns/persistence” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://java.sun.com/xml/ns/persistence persistence_1_0.xsd” version=“1.0”>

&lt;persistence-unit name="default" transaction-type="RESOURCE_LOCAL"&gt;
    &lt;provider&gt;oracle.toplink.essentials.PersistenceProvider&lt;/provider&gt;
    
    &lt;class&gt;modelo.pojo.Mensagem&lt;/class&gt;
    
    &lt;properties&gt;
        &lt;property name="toplink.logging.level" value="FINE"/&gt;
        &lt;property name="toplink.jdbc.driver" value="org.postgresql.Driver"/&gt;
        &lt;property name="toplink.jdbc.url" value="jdbc:postgresql://localhost:5432/sac?charsetCode=utf8"/&gt;
        &lt;property name="toplink.jdbc.user" value="postgres"/&gt;
        &lt;property name="toplink.jdbc.password" value="senhateste"/&gt;
    &lt;/properties&gt;
&lt;/persistence-unit&gt;

</persistence>

OBS: nao utilizo EJB.

3 Respostas

danieldestro

Se não me engano, as anotações só podem ser usadas em Servlets e EJBs.

D

as anotacoes estao funcionando a única q nao funciona eh a @PersistenceContext

pplupo

Pois é… esta é uma questão interessante…
Estou usando EJB… no JBoss…
Todas as anotações funcionam! Todas!
Tanto nos Sessions quanto nos Entities.
Nos Entities, todas as anotações de mapeamento (JPA) funcionam.
Nos sessions consigo usar normalmente @EJB para referenciar outros Sessions e @PersistenceContext para referenciar EntityManagers.
Minha pergunta é:

Por que nos Entities, @EJB e @PersistenceContext não funcionam? Nem o lookup via JNDI funciona para pegar uma referência a um Session!!! A única forma que consegui usar para ter uma referência para um EntityManager foi essa aí que o amigo sugeriu:
Persistence.createEntityManagerFactory(“default”, new java.util.HashMap()).createEntityManager();

Alguém pode me explicar/ajudar, POR FAVOR??? Já estou parado nisso há dias!!!

Criado 6 de março de 2007
Ultima resposta 11 de mar. de 2007
Respostas 3
Participantes 3