JPA EntityManager Nullpointer在多个类中拆分功能时的异常(Glassfish,EclipseLink)

时间:2013-02-13 10:07:48

标签: rest jpa glassfish nullpointerexception eclipselink

我知道有很多关于类似问题的问题,但我无法为我的问题提取解决方案。

我正在尝试构建一个提供数据的RESTful Web应用程序,它使用JPA(EclipseLink 2.4)提供,并在Glassfish 3.1.2.2上运行。

为了测试我在mysql中设置了一个留言簿数据库并创建了这个一体化的解决方案:

// imports etc...
// Guestbook class has @Entity

@Stateless
@Path("guestbook")
public class GuestService {

    @PersistenceContext
    private EntityManager em;

    @GET
    public Response entry() {
        Guestbook entry = em.find(Guestbook.class, someid);
        return Response.ok(entry.getMsg()).build();
    }
}

这非常有效,但是我想把它分成几层,如下所示:REST - > DAO - >实体 哪个会转变为:

@Stateless
@Path("guestbook")
public class GuestService {

    private DAO dao;

    @GET
    public Response entry() {
        Guestbook entry = dao.getEntry(someid);
        return Response.ok(entry.getMsg()).build();
    }
}

// ...

public class DAO {
    @PersistenceContext
    private EntityManager em;

    public Guestbook getEntry(int someid) {
        return em.find(Guestbook.class, someid);
    }
}

因此,当访问getEntry()中的 em 时,这将产生一个nullpointer异常,因为它是 null 。 我的persistence.xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="..." xmlns:xsi="..." xsi:schemaLocation="...">
    <persistence-unit name="guestbook" transaction-type="JTA">
        <jta-data-source>jdbc/mysqldatasource</jta-data-source>
        <class>model.Guestbook</class>
    </persistence-unit>
</persistence>

提前致谢,我期待着您的建议!

1 个答案:

答案 0 :(得分:0)

您已经从DAO抽象GuestService就好了,但似乎您忘了将DAO @Stateless EJB并将其注入GuestService @EJB 1}}使用@Stateless public class DAO { @PersistenceContext private EntityManager em; ... } @Stateless @Path("guestbook") public class GuestService { @EJB private DAO dao; ... } 注释。

{{1}}

我希望它有所帮助!