Eu tenho os seguintes códigos e estou pegando NullPointerException no meu EntityManager em na classe BaseDAOImpl, por acaso estou fazendo algo errado, pois quando coloco direto no Servlet o @PersistentUnit emf e depois o EntityManager funciona e não vem Null, a partir que abstraio e coloco em um DAO ele começa a dar como NullPointerException, provavelmente estou fazndo algo de errado mas como fazer funcionar no cso de projeto web? Alguém pode me dizer? Precisa do web.xml e persistence.xml? Vou colocar via das dúvidas.
Pra detalhe, estou usando glassfish, as configuirações de senha e tale stá ok, tanto q funciona transação ou consulta no servlet somente quando absatraio que pego NullPointerException…
package com.citespace.citespacerest.dao;
import java.util.List;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.persistence.EntityExistsException;
import javax.persistence.TransactionRequiredException;
@Remote
public interface BaseDAO<T> {
public List<T> listCountry();
}
package com.citespace.citespacerest.dao.impl;
import java.util.List;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;
import com.citespace.citespacerest.dao.BaseDAO;
import com.citespace.cms.model.Country;
@Stateless
public class BaseDAOImpl<T> implements BaseDAO<T>{
@PersistenceUnit(unitName = "citespacePU")
public EntityManagerFactory emf;
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public List<T> listCountry(){
EntityManager em = emf.createEntityManager();
try{
Query q = em.createQuery("Select c from Country c ");
List<Country> c = q.getResultList();
return (List<T>) c;
}finally{
if (em != null && em.isOpen()) {
em.close();
}
}
}
}
package com.citespace.citespacerest;
import java.util.List;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import com.citespace.citespacerest.dao.impl.BaseDAOImpl;
import com.citespace.cms.model.Country;
@Path("/user/")
public class UserResource {
@GET
@Produces("text/plain")
public String registerUser(){
BaseDAOImpl<Country> countryDAO = new BaseDAOImpl<Country>();
List<Country> c = countryDAO.listCountry();
String y = "";
for(Country x: c){
y = y + ":" +x.getName();
}
return "[Lista de Países]:"+y;
}
}
<?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">
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.server.impl.container.servlet.ServletAdaptor</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.feature.Redirect</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>unit:citespacePU</param-name>
<param-value>persistence/citespace</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
<persistence-unit-ref>
<persistence-unit-ref-name>persistence/citespace</persistence-unit-ref-name>
<persistence-unit-name>citespacePU</persistence-unit-name>
</persistence-unit-ref>
<resource-ref>
<res-ref-name>UserTransaction</res-ref-name>
<res-type>javax.transaction.UserTransaction</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="citespacePU" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/TestDS</jta-data-source>
<!-- <jar-file>/home/roan/Desktop/MyWorkspaces/workspace2/lib/citespace-persistence.jar</jar-file> -->
<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.connection.characterEncoding" value="UTF-8"/>
</persistence-unit>
</persistence>