Boa noite,
estou desenvolvendo um projeto WEB com JSF e JPA sem EJB…
Uso o Glassfish 3.1 e o mesmo implanta o projeto normalmente.
As tabelas do banco foram geradas, no entanto, quando tento realizar alguma operação usando o entityManager, ocorre um erro de NullPointerException…
Já li vários tópicos aqui e após vários sugestões o erro persiste.
Se puderem me ajudar, agradeço
O persistence.xml
<persistence version="2.0" 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_2_0.xsd">
<persistence-unit name="Scad" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/scad</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
A classe que contem o EntityManager. Existem várias classes que extendem da ScadJPADAO que estam na mesma unidade de persistencia.
import java.lang.reflect.ParameterizedType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
public abstract class ScadJPADAO<T> extends GenericDAOImpl<T> {
@PersistenceContext(unitName="Scad")
protected EntityManager em;
public EntityManager getEntityManager() {
return em;
}
public void setEntityManager(EntityManager em) {
this.em = em;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public ScadJPADAO() {
Object object = ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
if(object instanceof Class<?>){
classe = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}else{
if(object instanceof Class){
classe = (Class) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
}
}
}
Na classe GenericDAOImpl tem vários métodos de consultas ao banco.
O erro ocorre
Query query = getEntityManager().createQuery(queryString.toString());
O entityManager está nulo.
Já tentei usar isso:
@PersistenUnit
private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("Scad");
@PersistenceContext
protected EntityManager em = emf.createEntityManager();
Mas deu na mesma.
Alguma sugestão?
Agradeço