Java EntityManager为空

Java EntityManager为空,java,eclipselink,entitymanager,glassfish-4,Java,Eclipselink,Entitymanager,Glassfish 4,您好,我正在开发一个web应用程序,它提供RESTful web服务 但是,在我的服务中,实体管理器似乎为空 My persistence.xml: <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSch

您好,我正在开发一个web应用程序,它提供RESTful web服务

但是,在我的服务中,实体管理器似乎为空

My persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence     http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="SoruPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>com.cag.kume.sorubankasi.soru.model.OgretmenDers</class>
    <class>com.cag.kume.sorubankasi.soru.model.SinavTest</class>
   <class>com.cag.kume.sorubankasi.soru.model.SoruDuzeyi</class>
    <class>com.cag.kume.sorubankasi.soru.model.MasterSoru</class>
    <class>com.cag.kume.sorubankasi.soru.model.DersSinif</class>
    <class>com.cag.kume.sorubankasi.soru.model.SoruBasamagi</class>a
    <class>com.cag.kume.sorubankasi.soru.model.SinavTestSoru</class>
    <class>com.cag.kume.sorubankasi.soru.model.Ders</class>
    <class>com.cag.kume.sorubankasi.soru.model.SoruHaritasi</class>
    <class>com.cag.kume.sorubankasi.soru.model.Sinif</class>
    <class>com.cag.kume.sorubankasi.soru.model.Soru</class>
    <class>com.cag.kume.sorubankasi.soru.model.SoruHaritasiTerim</class>
    <class>com.cag.kume.sorubankasi.soru.model.SoruHaritasiSembol</class>
    <class>com.cag.kume.sorubankasi.soru.model.YoneticiTipi</class>
    <class>com.cag.kume.sorubankasi.soru.model.Ogretmen</class>
    <class>com.cag.kume.sorubankasi.soru.model.Yonetici</class>
    <class>com.cag.kume.sorubankasi.soru.model.SoruTuru</class>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
  <property name="javax.persistence.jdbc.url" value="jdbc:jtds:sqlserver://xx.xx.xxx.xxx:xxxx/kume_harita"/>
  <property name="javax.persistence.jdbc.password" value="xxxxx"/>
  <property name="javax.persistence.jdbc.driver" value="net.sourceforge.jtds.jdbc.Driver"/>
  <property name="javax.persistence.jdbc.user" value="xxxxx"/>
</properties>

有人能看到问题吗?提前感谢。

尝试在SoruDuzeyiFacadeREST上添加
@Stateless
注释。这将把类转换成EJB,因为EntityManager注入需要一个像EJB一样的托管类客户机;例如EJB、Web服务、消息驱动bean、JSF支持bean等等。。。这似乎是JAX-RS,所以如果是JEE6或更高版本,它应该可以正常工作。我目前的猜测是persistence.xml位于错误的位置,或者它实际上没有部署到服务器上,因为它被排除在外。
package com.cag.kume.sorubankasi.soru.service;

import java.util.List;
import javax.persistence.EntityManager;


public abstract class AbstractFacade<T> {
    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    public void create(T entity) {
//        getEntityManager().getTransaction().begin();
        getEntityManager().persist(entity);  
//        getEntityManager().flush();
       // getEntityManager().getTransaction().commit();
    }

    public void edit(T entity) {
        getEntityManager().merge(entity);
    }

    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
    }

    public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }

    public List<T> findAll() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }

    public List<T> findRange(int[] range) {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        q.setMaxResults(range[1] - range[0] + 1);
        q.setFirstResult(range[0]);
        return q.getResultList();
    }

    public int count() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
        cq.select(getEntityManager().getCriteriaBuilder().count(rt));
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        return ((Long) q.getSingleResult()).intValue();
    }

}
package com.cag.kume.sorubankasi.soru.service;

import com.cag.kume.sorubankasi.soru.model.SoruDuzeyi;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceUnit;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

@Path("soruduzeyi")
public class SoruDuzeyiFacadeREST extends AbstractFacade<SoruDuzeyi> {

    @PersistenceUnit(unitName = "SoruPU")    
    private EntityManager em;
    public SoruDuzeyiFacadeREST() {
        super(SoruDuzeyi.class);
    }

    @POST
    @Override
    @Consumes({"application/xml", "application/json"})
    public void create(SoruDuzeyi entity) {
        super.create(entity);
    }

    @PUT
    @Path("{id}")
    @Consumes({"application/xml", "application/json"})
    public void edit(@PathParam("id") Integer id, SoruDuzeyi entity) {
        super.edit(entity);
    }

    @DELETE
    @Path("{id}")
    public void remove(@PathParam("id") Integer id) {
        super.remove(super.find(id));
    }

    @GET
    @Path("{id}")
    @Produces({"application/xml", "application/json"})
    public SoruDuzeyi find(@PathParam("id") Integer id) {
        //return new SoruDuzeyi(1, "cenk", "123", true);
        return super.find(id);
    }

    @GET
    @Override
    @Produces({"application/xml", "application/json"})
    public java.util.List<SoruDuzeyi> findAll() {
        return super.findAll();
    }

    @GET
    @Path("{from}/{to}")
    @Produces({"application/xml", "application/json"})
    public java.util.List<SoruDuzeyi> findRange(@PathParam("from") Integer from, @PathParam("to") Integer to) {
        return super.findRange(new int[]{from, to});
    }

    @GET
    @Path("count")
    @Produces("text/plain")
    public String countREST() {
        return String.valueOf(super.count());
    }

    @Override
    protected EntityManager getEntityManager() {
        //return entityManager;
         return em;  
    }

}
java.lang.NullPointerException
    at com.cag.kume.sorubankasi.soru.service.AbstractFacade.findAll(AbstractFacade.java:45)
    at com.cag.kume.sorubankasi.soru.service.SoruDuzeyiFacadeREST.findAll(SoruDuzeyiFacadeREST.java:67)