我想知道什麼是處理在Hibernate/JPA世界中輸入數據表的正確方法。據我所知,以下三種選擇中的一種導致整個卡片房子崩潰,但我不知道哪一個是錯的。將ice/ace:dataTable與JPA和請求範圍bean集成
- 半自動交易和EntityManager的通過自定義JSF PhaseListener在開始和提交周圍的每一個請求
- 把裏面的DataTable
- 編輯組件使用請求範圍的託管bean是從獲取他們的數據事務處理請求範圍的EntityManager(在PrettyFaces的幫助下,通過URL的請求範圍bean設置ID)
- 使用請求範圍的bean而不是視圖或會話範圍的bean來備份dataTable。
我看到an ICEfaces dataTable demo using JPA但它們都是手動管理事務並且默認情況下不顯示編輯組件。您單擊導致對象被提名爲可編輯性的行,然後當您點擊「保存」時,手動將對象重新連接到新的EntityManager,然後手動觸發保存。我在這裏看到了點擊編輯功能,它爲我們提供了一種方法來確保將正確的對象重新附加到當前會話中,並且我不知道如果沒有類似的東西,我們將如何生活。我得到的關於新的ICEfaces 3.0 ace:dataTable(néePrimeFaces 2.0 dataTable)的印象是,它打算用在視圖或會話範圍的bean中,但我看不到如何可以繞過StaleObjectState和/或LazyInitializationExceptions,如果有一個模型對象從請求A和EntityManager A中的DAO出來,然後通過請求B與EntityManager B進行修改或分頁。
我想它可能在Java EE通過某種深厚的功夫,但我沒有把我們從Tomcat 6升級到任何更漂亮的東西的奢望(儘管這是我長期的目的)。我們也不會開始使用Spring或Seam或其他很酷的東西。 ICEfaces對我們來說足夠怪異,老實說可能太奇怪了。
那麼總結一下,哪個是錯誤的選擇?請求範圍的實體管理器,請求範圍的數據表或使用dataTable中的編輯組件?或者在這裏有其他問題呢?
感謝您詳細的解答。如果我有我的druthers,我們將升級到Glassfish;我已經獲得了一些我們的應用程序,可以在它下面成功加載,但沒有任何東西可以在TomEE下實際運行。我完全同意你對情況的分析,我只是沒有強迫組織在這個時候做我想做的事。不過,我想我可以運用你的建議並找到前進的方向。再次感謝! – 2012-02-19 16:29:33
@DanielLyons爲了我們的利益(我在TomEE上工作),你能否提供一些有關TomEE在dev(at)openejb.apache.org上遇到的問題的細節。我們是一個年輕的服務器,我們確實需要所有我們可以獲得的反饋。 – 2012-02-19 22:02:40
本週晚些時候我會告訴你一些細節。我認爲困難是由於它是一個測試版。 – 2012-02-19 23:21:24