同様の問題に関する多くの質問があることは知っていますが、問題の解決策を抽出することができませんでした。
JPA (EclipseLink 2.4) を使用して提供され、Glassfish 3.1.2.2 で実行される、データを提供する RESTful Web アプリケーションを構築しようとしています。
テストのために、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であるため、nullpointer 例外が発生します。私の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>
事前に感謝します。あなたの提案を楽しみにしています!