2012-03-16 31 views
7

我有一個適度複雜的應用程序使用POJO,現在將它遷移到EJB3.1,以便它可以在線部署,通過REST服務訪問並受益於容器環境(持久性是最重要的,但事務會有用太)。Java EE 6 - 持久域對象模式 - 任何成功?

自從J2EE時代以來,我已經離開了Java EE,並且一直在努力解決實體bean的「損失」問題。我花了一段時間才意識到EJB3.1中的實體實際上並不是舊的Bean中的實體...... :)我已經閱讀了許多EJB3書籍,包括O'Reilly Enterprise JavaBeans 3.1「手冊」,所有這些都解釋EJB3的概念和組件,但不包括實現模式選項。

在我的研究和調查中尋找Java EE 6模式,我寧可採用Adam Bien的方法 - 特別是「持久域對象」(PDO)模式(在他的書中,但也總結爲:http://download.java.net/general/podcasts/real_world_java_ee_patterns.pdf),以提供最小的複雜性和協同作用與我目前的POJO應用程序。 PDO也與傳統的面向對象的哲學和方法緊密結合,真正吸引我。

與其停止對PDO的辯論,我很有興趣聽到已經實施它的人以及哪些方面有效,哪些方面有困難。特別是我想知道你是如何從撥打的JPA實體進入容器中的其他服務(如調用無狀態會話bean等)。

我也很想知道是否有替代PDO模式,允許我維護應用程序結構(使用多態等)而無需爲我的模型中的每個類創建會話bean和JPA實體。 (我不想這樣做,部分原因是重構所有單元和集成測試所需的大量練習,部分原因是 - 據我所見 - 我最終將嘗試複製我的1toMany等對象關係在我的會話bean中也看起來很瘋狂)。

沒有人有任何的經驗分享 - 或者,如果你想指出我是一個白癡,已經錯過了在Java EE 6的一些基本的東西,這將是「歡迎」太:)

TIA

回答

3

沒有回覆,所以也許我是唯一一個這樣做),表示任何人找球,我發現:

  • 對象模型需要重大修改。您無法使用Maps或 與在非JPA應用程序中一樣的接口列表,因爲JPA不能使用 「處理」接口,您需要堅持(抽象)類。 Hibernate有@Any和@ManyToAny註釋,但開銷 (性能,功能和編碼)是(恕我直言)重要。如果 您可以實現一個可怕的抽象類層次結構,那麼你應該。 YUK!

  • 如果您有一個模糊複雜的對象模型(對象之間的關係超過六個),您將在由JPA引擎生成的SQL代碼中使用LOTS JOIN命令。我在某處讀到,> 6 JOIN會給數據庫帶來很高的負載(我確信只是一個經驗法則)。 MySQL有61個連接的硬限制。聽起來很瘋狂,肯定你永遠不會那麼做?!如果你有一個抽象的對象層次結構和對象之間的一些關係,它很快就會加起來!

我還沒有找到解決第一個「問題」的方法。對許多抽象基類而不是接口來說,感覺是錯誤的,但是據我所知,這是不可避免的。請告訴我如果不是!

第二個問題可以通過在對象關係上使用lazy-fetch,或者使用Adam的網關模式和擴展持久性會話(而不是無狀態會話bean在每次調用中加載和保存模型)來管理。到目前爲止,我正在使用後者 - 但還沒有到可以對內存和數據庫使用進行加載測試的程度。我們拭目以待!

+0

恭喜修復!如果可以,請確保將您的答案標記爲「已接受」,以便其他人會看到您的問題已得到解答,並能夠從您的解決方案中學習。乾杯〜 – 2012-03-30 16:16:56