關于對J2EE幾點誤解和錯誤認識的澄清
更新時間: 2007-05-14 09:10:02來源: 粵嵌教育瀏覽量:934
.Net和J2EE的爭論一直沒有停止,我也參加過“程序員”雜志主持的“.Net和Java之爭”之類的討論,本來這兩種技術都是為用戶提供了競爭性的選擇,對于用戶來說是一件好事,多種選擇遠勝于單一選擇。
但是,一些個別人員或狂熱者因為一些目的,故意扭曲J2EE,一葉遮目,因此必須針對這些謠言和誤導澄清一些技術細節如下:
誤導一:
Java陣營對EJB的看法
(1)J2EE項目中只有10%使用EJB
“EJB makes Java look bad. ”
(2)Sun’s Java PetStore:
“write your data persistence twice” . “bi-modal data access layer”
(3)IBM Redbook: 不要使用EJB, 用存儲過程
(4)James Gosling, Borland Developer conference, May 2002
You have to manage it by ignoring it. The complexity of J2EE is pretty extereme…There’s a dirty little secret about J2EE; most people don’t need J2EE;
澄清一:
(1)“J2EE項目中只有10%使用EJB”
這是很早以前的過去式統計,過去有10%使用EJB,不代表將來就只有10%使用EJB。
對EJB反感主要來自于Java陣營中那些Web層所謂輕量級開源軟件開發者,他們的理想是將所有業務(包括持久層)都包括在Web層中,用JavaBeans完成,自己實現緩存、對象池以及事務機制等等,這些底層技術很明顯是發燒級別的技術,在一般商業應用中如果也要靠程序員自己完成這些低層機制,那么Java都沒有人使用了。
EJB幫助一般商業應用實現了這些底層機制,無需開發者自己實現,所帶來的條件是開發者必須按照EJB規定來開發程序,EJB使用的這些限定條件對于那些倡導自由的狂熱發燒級別的開源開發者來說,簡直是無法容忍的,我已經在很多英文媒體上看到這種不滿和攻擊。可笑的是,國內有些剛涉及Java的程序員為了顯示自己是一個高手,進行項目咨詢時,句就是:我不要EJB。
(2)Sun’s Java PetStore
SUN的Petstore只是J2EE設計思想的一個展示品,它離實踐有一段距離,而且它沒有加入一些的開源軟件開發框架,致使它的性能等指標都存在一點問題,這點問題就成為.Net攻擊Java的口實,其實,這點在國外已經達成共識了,因為這種攻擊如同指責時裝模特的時裝無法穿到大街上一樣可笑。
(3) 不要使用EJB, 用存儲過程
了解J2EE的人已經知道,EJB不只是操作數據庫,因此這句話可以理解為,不要程序持久層,只用數據庫的存儲過程,如果真是這樣,.Net也無需誕生,全世界軟件業只有數據庫,也沒有cobol、java等其它可操作數據庫的語言了。
數據庫存儲過程是提升數據庫性能的一個方向,是一種“向下思維”,把活向細處做,說句開玩笑的話,大概直接用匯編語言將數據庫和數據操作一起實現性能是快了。“向下思維”的一個缺點是會過分依賴數據庫廠商,通用性不強,同時業務邏輯也可能混淆在存儲過程中,很多存儲過程的復雜語句包含了非常多的業務邏輯在里面,大概只有編制者才了解這樣的奧妙,這種情況不是軟件工程中愿意看到的。
還有一種思維是“向上思維”,通過層、架構來提升數據庫系統的性能,設立專門的持久層負責數據庫操作,使用緩存Cache以及多臺分布式Cache將是一個新的方向,將數據庫數據放在內存中,既做到程序的數據庫操作通用性,不依賴具體數據庫產品,又具有可拓展性和伸縮性。。
(4)James Gosling也不喜歡J2EE
這位號稱Java之父的程序員也不喜歡J2EE,我想其中一個很大原因大概是Java的發展已經出乎他的意料 之外,而且不為他控制的超前發展了,幸虧他不是J2EE之父,否則,我倒是也要放棄J2EE了。
(5)小結
有人說過,Java的毀滅可能來源Java社區本身,在這個充滿活力和創新的社區中,有多種先進的J2EE開源軟件支持著更廣闊的商業應用,當然也難免有爭議和指責聲,后者容易被對手利用,但是我們已經知道,可怕的還是,永遠只有一家公司的一種聲音。
--------------------------------------------------------------------------------
誤導二:
有各種統計數據如Web測試、分布式測試或性能測試等對比顯示,J2EE明顯不如.Net
澄清二:
獨立的middleware-company.com公司在其首頁明確指出:
According the Gartner Group, 70% of Java projects fail due to lack of skills
上述測試數據來源于如何正確使用J2EE,如何使用J2EE是一個很大的學問,如果沒有使用正確,那么就會導致上述測試結果。
--------------------------------------------------------------------------------
誤導三:
.Net與J2EE是企業應用解決方案的技術
.Net與J2EE在體系結構和主要技術上有明顯的對應性
.Net與J2EE的差別主要體現在開發效率, 性能, 成本和可靠性上
獨立的MiddleWare測試表明, .Net在開發效率, 性能, 成本和可靠性上明顯優于J2EE
澄清三:
前面三句是正確的,一句是偏頗的,這句混雜在三條正確語句后面,就具有誤導之嫌!
開發效率:
如果將.Net的強大開發工具和環境和J2EE的ant以及EditPlus編寫J2EE這樣開發方式相比,當然是前者給初級用戶帶來很大的開發效率和方便,但這種類比是不公平的。
使用Borland JBuilder 8.0以后的開發工具,在J2EE開發效率上根本絲毫不遜色于.Net,J道提供這樣的開發教程,非常方便。
性能:
性能永遠是使用者的問題,如果把Java的性能歸結于解釋型語言等錯誤原因上,那還需要你多補一些Java的課程。
如果需要開發出一個優異的性能系統,無論是.Net或J2EE,程序員和設計師都需要有專門的培訓和咨詢指導。
成本:
J2EE有那么多免費的開源軟件支持,成本就幾乎為零,J2EE服務器使用JBoss,使用Struts+EJB,JBuilder X將提供這種優美框架的可視化開發工具,多美好。
當然,.Net在中國使用也是“免費”的,因為幾乎都是盜版,他也懶得管。
可靠性:
有多年成熟應用的J2EE技術帶來的優點就是可靠性,每個技術細節直至底層,都可能是開源的,基于Linux的運行可靠性已經為更多實踐證明,曾經收購易趣30%股份的eBay,全世界的網絡拍賣系統,就是使用J2EE建立的,每天有多少關鍵業務在這個系統上運行?《J2EE核心模式》一書有很多模式來自他們的實踐總結。J2EE在銀行、保險等領域成熟應用的事例比比皆是,他們的多年運行經驗都用事實證明了J2EE的可靠性。
相反,飽受病毒大幅度侵蝕的Windows系統才會給人帶來可靠性的疑問,它的成熟應用也許剛剛開始。
--------------------------------------------------------------------------------
誤導四
.NET的性能明顯優于 J2EE :
Web應用服務
事務性能
XML Web 服務性能
澄清四
是否對Web服務(Web Services)優于支持,主要取決于支持這類標準的API是否豐富方便,作為Java的發明者Sun公司現在已經成為一個Java標準指定者,他的Java/J2EE產品實用性其實不強,Web Services作為近由微軟和IBM等倡導提出的標準,要落后于J2SE 1.3 API版本的推出,Sun不可能在短時間內將這些應用加入標準的JDK庫,而且沒有必要,有很多開源軟件支持Web Service就非常,如 Apache的Axis。
Web Services的概念其實是Java語言概念的Copy,如果你的系統都是使用Java建立,那么,Java提供的支持,無論性能還是拓展性等方面遠遠超過Web Services。
因為更多人知道Windows,因此更多人知道了Web Services,并為此激動,而忽視了幾年前Java提出了同樣思想,只因為不知道,但是他們是客戶,這好像類似政治了吧,這里避開。
在我的書籍《Java實用系統開發指南》中,關于肥客戶端.服務器模式下,我就推薦直接使用Http+EJB實現遠程調用,省卻Web Services中的XML轉換帶來的性能消耗。
Web Services的問題還是安全,這正如Windows的問題一樣,如果他們認為這是他們的一貫產品特點,那么我們還在這里實現什么比較呢?
--------------------------------------------------------------------------------
澄清誤導五
主要一個誤導言論是:來自TSS(Java社區theServerSide.com)的母公司middleware-company(TMC)向Java社區提交了一份J2EE和微軟.Net應用架構的評測報告,Java開源精神Rickard Oberg在時間分析了用于評測的源代碼,以壓倒性的證據推翻了TMC的結論。
但是,middlerware-company這份報告還被別有用心的少數人作為詆毀J2EE的證據