本文來自CSDN博客,原文標題為《Hibernate 之父:是時候升級到Java EE 6了》。
Hibernate 之父Gavin King建議開發者升級到 Java EE 6 平台,並指出,目前各種不願意升級的觀點其實是沒有根據的。
Java EE 6 發布後,我看到了很多反對升級到新平台的觀點。這些反對觀點大多是由 Tomcat / Jetty 以及一些開源框架(例如 Hibernate 與 Spring)的使用者提出。
當然,選擇非標准、開源技術有很多好處。另外,在 Java EE 6 中,你可以使用你感興趣的開源框架,Servlet 3 與 CDI 可以無縫集成第三方框架。因此,沒有理由不使用 EE 6。盡管如此,我還是看到有人說:
升級到 EE 應用服務器很困難
這似乎是具體組織的政治問題,而不是實際的技術問題。當然,升級服務器(例如 GlassFish 或 JBoss)是非常瑣碎的任務。(升級第三方框架就更為痛苦了。)一些組織機構對服務器升級有著非常重量級的過程,而對於服務器內運行的框架的升級過程卻沒有如此重的過程控制。因此,對於開發團隊來說,升級第三方框架反而更容易一些。
我認為開發更有說服力、更好的過程才是最重要的,而不是放棄 Java EE。將你的應用運行在老舊、過時的服務器平台上存在很多風險,過程不應該鼓勵這樣的實踐。
但從實踐角度看,幾乎每一個人都准備最近就升級到 Servlet 3。無論你在使用 Tomcat、Jetty、JBoss、GlassFish、Resin、WebLogic、Oracle 還是 WebSphere,都意味著服務器的升級。這是一個升級到 EE 6 Web Profile 的絕好機會,黃金時機。
EE 應用服務器太龐大了
反對理由是 EE 服務器包含了很多(當前)使用不到的功能。反對者的論據通常涉及到了討論 jar 包大小、Servlet 引擎+第三方框架與 EE 應用服務器所占用的磁盤空間大小的比較。其實,這樣的論據是有問題的:
討論的磁盤占用、磁盤空間用 $ 衡量其實是微不足道的,並且應用 war 包比服務器安裝包的大小重要得多,服務器其實包含了很多功能來盡量降低 war 的大小。
另外,我認為最有說服力的是 Java EE 6 Web Profile 根本不龐大。一旦經過認證的 Web Profile 服務器投放市場,我們就可以在大的 EE 應用服務器與小的 Servlet 容器中間找到一個平衡點。
糟糕的 J2EE 與 EJB2!
隨著 JCP 的標准化進程,這個問題其實早已不存在了:
1. EJB2 從出現到現在已經 8 年了!它依然是你的最佳選擇?
2.不錯的規范已經通過 JCP 不斷的標准化而合並了,可以非常確定地使用其中一些規范。不過,JCP 在規范標准化上也不是100% 成功的。
3. 所有在 EE 6 平台上工作的人都討厭 EJB2 與 J2EE。這就是為什麼有人不斷地加入到 JCP 來幫助修復這些問題。例如,Hibernate 的創始人,本文的作者。你真的想給他上一課關於 EJB2 的問題?:-)
4.實體 Bean(Entity Beans)的人幾乎現在都退休了!
事實上,Java EE 6 Web Profile 已經足夠用了。如果你不親自嘗試 Java EE 6,你是不能真正感受到 EE6 對開發的好處的。
應用服務器可移植性太神秘了!
真的嗎?我們看到很多人將應用程序分割後部署於不同的應用服務器上?噢,我看到過,這意味著 100% 完美地進行應用程序 0 改變移植,一種柏拉圖式的理想可移植性。我了解對於絕對真理與柏拉圖式理想的弱點,不過還是讓我們先看看例子。
這是一個非常典型的可移植性問題視圖:
9% 的代碼,85 % 的外部元數據在不同服務器平台上完全兼容,剩下 1% 與 15% 能夠適當進行分割
0% 的代碼,80% 的外部元數據綁定在了非標准、單一廠商的容器體系結構上
我一直想看到非 EE 6 技術維護者對 EE 6 真實的評論。上文中提到的一些論據不是來自真實世界的,所以很難引發 EE 平台上應用開發實際技術問題的討論。JCP 最近一輪規范似乎已經離開了反 EE 陣營(暫時性離開?),但缺乏成功的事實支撐。