簡體   English   中英

使用Java EE保留我的第一個實體

[英]Persisting my first entity using Java EE

試圖讓我了解Java EE (ORM /實體/注釋/ EJB / Servlet等)。 因此,我創建了一個非常簡單的網頁,您可以在其中輸入用戶信息並將其發送到服務器。 我將Apache Tomcat 8.0用作webbserver應用程序,這是持久化實體所需的應用程序文件和內容的所有相關部分:

http://pastebin.com/fwfbnYpU

該應用程序給我第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規范都不包含PersistenceContextInject ,因此您可能在安裝中添加了其他jar。

但是,您將persistence.xml配置為使用Servlet環境中幾乎不支持的JTA事務,這可能導致tomcat完全忽略@PersistenceContext批注,並保留em == null (默認值)。

我已經找到了描述集成的鏈接 ,但是它看起來很復雜,需要編輯內部xml文件,然后繼續使用Spring。 對於初學者來說,其中的每個部分都有可能過分殺傷力。

我建議您從TomEE的副本重新開始,該副本已經完成了所有連接工作,從而為您提供了一個功能齊全的,支持CDI( @Inject )和JPA( @PersistenceContext )的成熟應用服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM