org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus上的java.lang.NullPointerException

org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus上的java.lang.NullPointerException,hibernate,jpa,jakarta-ee,ejb,jax-rs,Hibernate,Jpa,Jakarta Ee,Ejb,Jax Rs,在我的JAX-RS资源中,我可以注入dboberentimplEJB。但是在dbOperationImplbean中,我不能注入JPA EntityManager。这是如何造成的,我如何解决 项目结构: EJB接口: package jpahibernate.service; import entity.BookmatePromoCode; import java.util.List; import javax.ejb.Local; @Local public interface DBOp

在我的JAX-RS资源中,我可以注入dboberentimplEJB。但是在dbOperationImplbean中,我不能注入JPA EntityManager。这是如何造成的,我如何解决

项目结构:

EJB接口:

package jpahibernate.service;

import entity.BookmatePromoCode;
import java.util.List;
import javax.ejb.Local;

@Local
public interface DBOperationInterface {

    public List<BookmatePromoCode> bookmatePromoCodes();

}
包jpahibernate.service;
导入实体.BookmatePromoCode;
导入java.util.List;
导入javax.ejb.Local;
@本地的
公共接口DBOperationInterface{
公共列表BookCodes();
}
EJB实现:

package jpahibernate.impl;

import entity.BookmatePromoCode;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import jpahibernate.service.DBOperationInterface;

@Stateless
@LocalBean
public class DBOperationImpl implements DBOperationInterface {

    @PersistenceContext(unitName = "mypdu")
    private EntityManager em;

    @Override
    public List<BookmatePromoCode> bookmatePromoCodes() {
        System.out.println("mesaj bookmatePromoCodes");
        System.out.println(em);
        Query query = em.createQuery("select b from BookmatePromoCode b");
        List result = query.getResultList();
        System.out.println(result);
        return new ArrayList<BookmatePromoCode>();
    }
}
包jpahibernate.impl;
导入实体.BookmatePromoCode;
导入java.util.ArrayList;
导入java.util.List;
导入javax.ejb.LocalBean;
导入javax.ejb.Stateless;
导入javax.persistence.EntityManager;
导入javax.persistence.PersistenceContext;
导入javax.persistence.Query;
导入jpahibernate.service.DBOperationInterface;
@无国籍
@本地豆
公共类DBOperationImpl实现DBOperationInterface{
@PersistenceContext(unitName=“mypdu”)
私人实体管理者;
@凌驾
公共列表图书编码(){
System.out.println(“mesaj bookmatePromoCodes”);
系统输出打印项次(em);
Query Query=em.createQuery(“从BookmatePromoCode b中选择b”);
List result=query.getResultList();
系统输出打印项次(结果);
返回新的ArrayList();
}
}
JAX-RS资源:

package restfulservices;

import dto.BookmatePromoCodeDTO;
import dto.CustomObjectDTO;
import dto.ErrorDTO;
import dto.ResponseDTO;
import entity.BookmatePromoCode;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless; 
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import jpahibernate.service.DBOperationInterface; 
@Stateless
@Path("/bookmates")
public class BookmateRestfulService {

@EJB
private DBOperationInterface dbOperation;

@GET
@Produces(MediaType.APPLICATION_JSON)
@Consumes("application/json")
public Response bookmates() { 

    ResponseDTO resp = new ResponseDTO();
    try {
        List<BookmatePromoCode> bookmatePromoCodes = dbOperation.bookmatePromoCodes();
        ArrayList<BookmatePromoCodeDTO> bookmatePromoCodeDTOs = new ArrayList<BookmatePromoCodeDTO>();
        for (BookmatePromoCode bpc : bookmatePromoCodes) {
            //data transfer object
            BookmatePromoCodeDTO bpcDTO = new BookmatePromoCodeDTO();
            bpcDTO.setKod(bpc.getCode());
            bookmatePromoCodeDTOs.add(bpcDTO);
        }
        resp.setObject(new CustomObjectDTO(bookmatePromoCodeDTOs));
    } catch (Exception ex) {
            ex.printStackTrace();
            resp.setError(new ErrorDTO(1, "select zamani xeta bash verdi"));
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(resp).build();
    }
        return Response.ok(resp).build();
    } 
}
包restfulservices;
导入dto.bookmatepromotocodedto;
导入dto.CustomObjectDTO;
导入dto.ErrorDTO;
进口dto.ResponseDTO;
导入实体.BookmatePromoCode;
导入java.util.ArrayList;
导入java.util.List;
导入javax.ejb.ejb;
导入javax.ejb.Stateless;
导入javax.ws.rs.*;
导入javax.ws.rs.core.MediaType;
导入javax.ws.rs.core.Response;
导入jpahibernate.service.DBOperationInterface;
@无国籍
@小径(“/书友”)
公营书刊服务{
@EJB
私有数据库操作接口数据库操作;
@得到
@产生(MediaType.APPLICATION_JSON)
@使用(“应用程序/json”)
公众回应{
ResponseDTO resp=新的ResponseDTO();
试一试{
List bookmatePromoCodes=dbOperation.bookmatePromoCodes();
ArrayList bookmatePromoCodeDTOs=新的ArrayList();
对于(BookmatePromoCode bpc:bookmatePromoCodes){
//数据传输对象
bookmatepromotocodedto bpcDTO=新bookmatepromotocodedto();
bpcDTO.setKod(bpc.getCode());
bookmatepromotcodedtos.add(bpcDTO);
}
分别为setObject(新的CustomObjectDTO(BookMatePromoCodeDTO));
}捕获(例外情况除外){
例如printStackTrace();
响应设置错误(新错误到(1,“选择zamani xeta bash verdi”);
返回Response.status(Response.status.INTERNAL_SERVER_ERROR).entity(resp.build();
}
返回Response.ok(resp.build();
} 
}
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="mypdu" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>entity.BookmatePromoCode</class>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <shared-cache-mode>NONE</shared-cache-mode>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/bookmate?characterEncoding=UTF-8&amp;characterSetResults=UTF-8"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.password" value="12345"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        </properties>
    </persistence-unit>
</persistence>

org.hibernate.ejb.HibernatePersistence
entity.BookmatePromoCode
假的
没有一个
我不能注射完整的管理器。我只是得到了NullPointerException。它找不到unitName等。部署应用程序时,出现以下错误:

Warning: Exception while dispatching an event
java.lang.NullPointerException
    at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:76)
    at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:118)
    at org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1602)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:210)
    at org.hibernate.jpa.internal.EntityManagerImpl.<init>(EntityManagerImpl.java:91)
    at org.hibernate.jpa.internal.EntityManagerFactoryImpl.internalCreateEntityManager(EntityManagerFactoryImpl.java:345)
    at org.hibernate.jpa.internal.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:313)
    at org.glassfish.persistence.jpa.JPADeployer$2.visitPUD(JPADeployer.java:451)
    at org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:510)
    at org.glassfish.persistence.jpa.JPADeployer.iterateInitializedPUsAtApplicationPrepare(JPADeployer.java:492)
    at org.glassfish.persistence.jpa.JPADeployer.event(JPADeployer.java:398)
    at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:487)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722)
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
    at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
    at org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:189)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
    at java.lang.Thread.run(Thread.java:745)
警告:调度事件时发生异常
java.lang.NullPointerException
位于org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:76)
位于org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:118)
位于org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149)
位于org.hibernate.jpa.spi.AbstractEntityManagerImpl.Jointransation(AbstractEntityManagerImpl.java:1602)
位于org.hibernate.jpa.spi.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:210)
位于org.hibernate.jpa.internal.EntityManagerImpl.(EntityManagerImpl.java:91)
位于org.hibernate.jpa.internal.EntityManagerFactoryImpl.internalCreateEntityManager(EntityManagerFactoryImpl.java:345)
位于org.hibernate.jpa.internal.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:313)
位于org.glassfish.persistence.jpa.JPADeployer$2.visitPUD(JPADeployer.java:451)
位于org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:510)
位于org.glassfish.persistence.jpa.JPADeployer.iterateInitializedPUsAtApplicationPrepare(JPADeployer.java:492)
位于org.glassfish.persistence.jpa.JPADeployer.event(JPADeployer.java:398)
位于org.glassfish.kernel.event.eventsiml.send(eventsiml.java:131)
位于com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:487)
位于com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
位于org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
位于java.security.AccessController.doPrivileged(本机方法)
位于javax.security.auth.Subject.doAs(Subject.java:360)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
位于java.security.AccessController.doPrivileged(本机方法)
位于javax.security.auth.Subject.doAs(Subject.java:360)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl.docomand(CommandRunnerImpl.java:556)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl.docomand(CommandRunnerImpl.java:1464)
在com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846)
在com.sun
<jta-data-source>java:/yourDataSource</jta-data-source>