[英]Persisting my first entity using Java EE
試圖讓我了解Java EE
(ORM /實體/注釋/ EJB / Servlet等)。 因此,我創建了一個非常簡單的網頁,您可以在其中輸入用戶信息並將其發送到服務器。 我將Apache Tomcat 8.0
用作webbserver應用程序,這是持久化實體所需的應用程序文件和內容的所有相關部分:
該應用程序給我第99行的錯誤:
08-Apr-2014 16:18:10.329 SEVERE [http-nio-8084-exec-93] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [indexServlet] in context with path [/JavaEENackademin] threw exception
java.lang.NullPointerException
我究竟做錯了什么? 該數據庫存在正確的命名表和列名。 但是話又說回來這不是問題,在我解決這個問題之后也許會成為問題:)
代碼的一個問題是,您不應將EntityManager
注入到servlet中。 Servlet通常是單例,因此所有Servlet都將使用相同的EntityManager
。 您應該改為注入EntityManagerFactory
並從中獲取EntityManager
。 您還必須照顧交易。 不知道這是否引起了您的問題,但是應該修復一些問題。
我很驚訝您能夠在pastebin中部署代碼。 特別:
@WebServlet(name = "indexServlet", urlPatterns = {"/indexServlet"})
public class indexServlet extends HttpServlet {
@Inject
LoginValidation validation;
@PersistenceContext(unitName = "JavaEENackademinPU")
private EntityManager em;
//... offending line 99 calls: em.persist()
}
servlet規范都不包含PersistenceContext
和Inject
,因此您可能在安裝中添加了其他jar。
但是,您將persistence.xml
配置為使用Servlet環境中幾乎不支持的JTA事務,這可能導致tomcat完全忽略@PersistenceContext
批注,並保留em == null
(默認值)。
我已經找到了描述集成的鏈接 ,但是它看起來很復雜,需要編輯內部xml文件,然后繼續使用Spring。 對於初學者來說,其中的每個部分都有可能過分殺傷力。
我建議您從TomEE的副本重新開始,該副本已經完成了所有連接工作,從而為您提供了一個功能齊全的,支持CDI( @Inject
)和JPA( @PersistenceContext
)的成熟應用服務器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.