EntityManager null

1 resposta
T

Por favor,
Estou tentando um EJB3 simples, mas quando tento usar o EntityManager ele está vindo sempre null na linha 8 do GerenciarCliente .
Parece que a annotation não está injetando o que deveria.
Vou tentar expor o máximo de detalhes.
Me avisem se quiserem ver mais algum detalhe.
E desde já agradeço.

Classe GerenciarCliente
@Stateless  
public class GerenciarCliente implements GerenciarClienteLocal{  
    @PersistenceContext(unitName="MyPersistenceUnit")   
    private EntityManager em;  
          
    public boolean inserir(Client cliente){  
        boolean retorno = false;  
        em.persist(cliente);  
        return retorno;  
    }  
}
Interface GerenciarClienteLocal
@Local  
public interface GerenciarClienteLocal {  
    public boolean inserir(Client cliente);  
}
application.xml
<?xml version="1.0" encoding="UTF-8"?>  
<application id="Application_ID"   
             version="5"   
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
             xmlns="http://java.sun.com/xml/ns/javaee"  
             xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd"  
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">                               
                                  
    <description>descrição: primeiro ejb</description>  
    <display-name>EARejb03</display-name>  
    <module>  
        <web id="ejb_03">  
            <web-uri>ejb03.war</web-uri>  
            <context-root>/ejb03</context-root>  
        </web>  
    </module>  
</application>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>    
<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 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"   
             version="1.0">  
    <persistence-unit name="MyPersistenceUnit">  
        <jta-data-source>java:/MyPostgreDS</jta-data-source>  
  
        <properties>  
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>   
            <property name="hibernate.hbm2ddl.auto" value="update"/>  
        </properties>  
          
    </persistence-unit>  
</persistence>
web.xml
<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5"  
         xmlns="http://java.sun.com/xml/ns/javaee"  
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  
    <display-name>ejb03</display-name>  
      
    <servlet>  
        <servlet-name>MyServlet01</servlet-name>  
        <servlet-class>web.myservlets.MyServlet01</servlet-class>  
    </servlet>  
    <servlet-mapping>  
        <servlet-name>MyServlet01</servlet-name>  
        <url-pattern>/MyServlet01</url-pattern>  
    </servlet-mapping>  
</web-app>

1 Resposta

E

Provavelmente pq o seu objeto do tipo EntityManager como deveria. Para tentar saber se eh esse o problema, ao invés de usar a anotação @PersistenceContext, vc pode tentar instanciar objeto do tipo EntityManager criando uma classe JpaUtil por exemplo, criando um metodo estatico retornando um objeto do tipo SessionFactory.

private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyPersistenceUnit");
	
	private static ThreadLocal<EntityManager> entityManagerThreadLocal = new ThreadLocal<EntityManager>();
	
	public static EntityManager getEntityManager()
	{
		EntityManager em = entityManagerThreadLocal.get();
		if(em == null || !em.isOpen())
		{
			em = emf.createEntityManager();
			entityManagerThreadLocal.set(em);
		}
		
		return em;
	}
	
	public static void closeEntityManager()
	{
		EntityManager em = entityManagerThreadLocal.get();
		if(em != null && em.isOpen())
		{
			em.close();
			entityManagerThreadLocal.set(null);
		}
	}
	
	private static SessionFactory getSessionFactory()
	{
		return ((EntityManagerFactoryImpl)emf).getSessionFactory();
	}
Criado 13 de julho de 2009
Ultima resposta 14 de jul. de 2009
Respostas 1
Participantes 2