私はGoogleAppEngineをdatanucleusとJPAで使用しています。データストアからデータを読み取ってJSPに渡す方法を理解するのに非常に苦労しています。entitymanagerを使用してPOJOのリストをロードし、それをJSPに渡すと、org.datanucleus.exceptions.NucleusUserExceptionにクラッシュします。オブジェクトマネージャーが閉じられました。
なぜこれが起こっているのか理解しています。明らかに、リストをフェッチしたため、エンティティマネージャーを閉じてJSPに渡します。この時点で、リストが遅延しているため失敗します。size()などを呼び出すなどのハックに頼らずに、リストを怠惰にしないようにするにはどうすればよいですか?
これが私がやろうとしていることです:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("parties", getParties());
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/parties.jsp");
dispatcher.forward(req, resp);
}
private List<Party> getParties(){
EntityManager em = entityManagerProvider.get();
try{
Query query = em.createQuery("SELECT p FROM Party p");
return query.getResultList();
}finally{
em.close();
}
}