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