我有這樣的朋友....如何最好地實現2002年代的J2EE應用程序的現代化?
我有這樣的朋友,誰在Java EE應用程序的工作原理(J2EE)應用始於2000年代初期。目前他們在這裏和那裏添加一個功能,但有一個很大的代碼庫。多年來,該團隊縮小了70%。
[是的,「我有這個朋友是」。這就是我,試圖幽默注入十幾歲的高中輔導員恥辱混進去]
的Java,復古2002
應用程序使用EJB 2.1,支柱1.x中,DAO的等直JDBC調用(混合物存儲過程和準備好的語句)。沒有ORM。爲了緩存,他們使用OpenSymphony OSCache和本地緩存層的混合。
在過去的幾年中,他們花費精力使用ajax技術和庫來實現UI的現代化。這主要涉及JavaScript庫文件 (jquery,yui等)。
客戶端
在客戶端,缺乏從struts1的Struts2的升級路徑遷移到Struts2的勸阻他們。其他網頁框架開始流行(wicket,spring,jsf)。 Struts2並不是「明確的贏家」。將所有現有的用戶界面從Struts1遷移到Struts2/wicket /等似乎並沒有以非常高的成本提供很多邊際收益。他們不希望有技術篤怨婦(在Struts2子系統X,子系統的Y檢票等),使開發者使用Struts 1
服務器端
上書寫新的功能拼湊在服務器方面,他們考慮轉向ejb 3,但從來沒有很大的動力。開發人員都對ejb-jar.xml,EJBHome和EJBRemote感到滿意,即「ejb 2.1原樣」代表了阻力最小的路徑。
關於ejb環境的一個大投訴是:程序員仍然假裝「ejb服務器運行在與servlet引擎不同的jvm上」。沒有應用程序服務器(jboss/weblogic)曾經實施過這種分離。該團隊從未在單獨的應用服務器上部署ejb服務器。
ear文件包含同一個jar文件的多個副本;一個用於'web層'(foo.war/WEB-INF/lib),另一個用於服務器端(foo.ear /)。應用服務器只加載一個罐子。重複造成歧義。
緩存
至於緩存,他們使用多種緩存實現:OpenSymphony的緩存和自主開發的高速緩存。 Jgroups提供集羣支持
現在是什麼?
問題: 該團隊目前有空餘的時間來投資更新應用程序?聰明的投資者在哪裏花費他們?主要標準爲:
1)生產力提高。具體縮短開發新子系統功能和減少維護的時間。 2)性能/可擴展性。
他們不關心時尚或techno-du-jour street cred。
你們都推薦什麼?
在持久性方面 將所有內容(或僅限新開發)切換到JPA/JPA2?
直接休眠? 等待Java EE 6?
在客戶端/網絡框架端: 移植(一些或全部)到struts2? 檢票口? jsf/jsf2?
至於緩存: 兵馬俑? ehcache? 一致性? 堅持他們有什麼? 如何最好地利用64位jvms提供的巨大堆大小?
在此先感謝。
感謝您的有益迴應。你和「進入春天」的職位相互補充,並解決我們關注的問題。 至於'遠程'與'本地'我有點不清楚。在實踐中,所有的電話都是本地的 - 因爲Jboss在本地處理與同一個vm中的ejb電話。我沒有預見過將ejb作爲Web層放在單獨的虛擬機上。 我們將看看我們的'重複jar'問題和部署。 AFAIK和IIRC之前的版本在.war罐子和罐子罐子上是模糊的(Jboss有它的'flatclassloader'模型,它把耳朵/戰爭中的每個罐子視爲平等,但那是另一個主題) – user331465 2010-05-05 15:36:49
也是,Glassfish也有「每個EAR一個類加載器「模型,」每WAR一個「模型是一個選項。當我嘗試在同一個EAR中捆綁兩個WAR時,這是一個真正的問題。 EJB規範沒有以某種方式定義行爲,因此兩種模型都是「兼容」的,但我認爲這是一個漏洞,因爲在兩種不同環境下構建的應用程序並不是真正可互換的,即使兩者都被編碼爲「規格」。 – 2010-05-05 17:13:55
+1,因爲此答案此時只收到1個其他的upvote。 – 2010-09-23 17:00:42