2013-05-04 26 views
0

我是JSP新手,這是我想知道的。我只是打印我的HTML網頁上的一些數據:需要關於JPQL,JPA和Glassfish來堅持數據的一些解釋

${movie.title} 

我有一個Movie實體和MovieManager的EntityManager。當我要評論添加到電影(這是另一個實體,Review),我的servlet調用這段代碼在MovieManager:

Movie m = new Movie(//some data...); 
em.persist(m); 

但是當我重定向我的網頁上,這是檢討不刷新和印刷後,但我甚至可能說,也許30秒後。

我嘗試了很多事情,我在網絡上看到了,主要是這一點:

em.getTransaction().commit(); 
em.close(); 

但他們兩人返回這些錯誤:在使用JTA

不能使用EntityTransaction。

和:

EJBException的,java.lang.IllegalStateException近距離。

請給我一些我應該做的事情的建議。

回答

1

servlet是表示層的一部分。它不應該處理JPA。相反,它應該調用服務,將其實現爲EJB幷包含業務邏輯,然後應該調用DAO,也將其實現爲EJB,幷包含持久性邏輯,處理實體管理器。

服務EJB會在每次調用其中一個方法時自動啓動一個事務(這是使用EJB的主要原因),並在方法返回時自動提交。