我知道有很多关于类似问题的问题,但我无法为我的问题提取解决方案。
我正在尝试构建一个提供数据的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>
提前致谢,我期待着您的建议!
答案 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}}
我希望它有所帮助!