1

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

我正在尝试构建一个提供数据的 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 -> Entity 这将转换为:

@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时产生一个空指针异常,因为它是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>

在此先感谢您,我期待您的建议!

4

1 回答 1

0

您已经很好地抽象了DAOfrom GuestService,但似乎您忘记了创建DAOEJB@Stateless并将其注入到您的GuestServiceusing@EJB注释中。

@Stateless 
public class DAO {

   @PersistenceContext
   private EntityManager em;
   ...   
}

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

    @EJB
    private DAO dao;
    ...
}

我希望它有帮助!

于 2013-02-13T10:16:37.593 回答