其實Spring和EJB爭論起源于輕和重的討論,我偶爾翻起多年前的米蘭 昆德拉“生命不能承受之輕”這本書。
記得當(dāng)時在大學(xué)(89年左右)時,一個高年級的“傳道士”突然以“生命不能承受之輕”為口頭禪,引起我們小輩的羨慕和納悶,挺拗口的啊。他還說:比喻是一種危險的東西,人是不能和比喻鬧著玩的。至此,我以后不敢隨便用比喻,老實用邏輯推理來說事吧。 希臘哲學(xué)家巴門尼德和中國老子一樣,把宇宙氛圍對立統(tǒng)一的二元:明與暗;厚與薄;重與輕。 尼采認(rèn)為永恒的輪回的想法是最沉重的負(fù)擔(dān),最沉重的負(fù)擔(dān)壓迫著我們,讓我們屈服于它,把我們壓到在地,女人總是渴望承受一個男性身體的重量,于是最沉重的負(fù)擔(dān)同時也成了最強(qiáng)盛的生命力的影像。 負(fù)擔(dān)越重,我們的生命越貼近大地,它就越真切實在。 世界上重的東西很多,藝術(shù)上,貝多芬的音樂是重的;軟件上:EJB曾經(jīng)是重的,在我們心目中,重好像代表正統(tǒng),代表一種主導(dǎo)。 生活中承受沉重負(fù)擔(dān);軟件開發(fā)中,過去EJB的學(xué)習(xí)開發(fā)調(diào)試都是一種沉重,在我們承受“這些”之重時,我們向往燦爛美麗的生活或軟件之輕了。 而這時,曾經(jīng)輕盈美麗的Spring走到大家面前,受到我們瘋狂的歡迎,從此可以擺脫沉重的負(fù)擔(dān)了。 巴門尼德也說:輕者為正,重者為負(fù);我們甚至相信:輕量框架將取代重量,成為正統(tǒng)和主導(dǎo)地位。 但是,重的真的殘酷; 而輕的真的美麗? 其實,當(dāng)EJB 3.0推出;當(dāng)Spring 2.0的程序需要特別的javac進(jìn)行編譯時,重和輕模糊了。 重和輕的對立是所有對立中最神秘、最模糊的。 J2EE提供了一套企業(yè)級Java應(yīng)用框架(一種標(biāo)準(zhǔn)),是一種利用Java 2平臺來簡化企業(yè)解決方案的開發(fā)、部署和管理相關(guān)的復(fù)雜問題的體系結(jié)構(gòu)。 J2EE使用多層的分布式應(yīng)用模型,應(yīng)用邏輯按功能劃分為組件,各個應(yīng)用組件根據(jù)他們所在的層分布在不同的機(jī)器上。J2EE的初衷正是為了解決兩層模式(client/server)的弊端,在傳統(tǒng)模式中,客戶端擔(dān)當(dāng)了過多的角色而顯得臃腫,使用J2EE 的多層企業(yè)級應(yīng)用模型將兩層化模型中的不同層面切分成許多層。一個多層化應(yīng)用能夠為不同的每種服務(wù)提供一個獨立的層,以下是 J2EE 典型的四層結(jié)構(gòu): 運行在客戶端機(jī)器上的客戶層組件 運行在J2EE服務(wù)器上的Web層組件 運行在J2EE服務(wù)器上的業(yè)務(wù)邏輯層組件 運行在EIS或數(shù)據(jù)庫服務(wù)器上的業(yè)務(wù)信息系統(tǒng) J2EE為搭建具有可伸縮性、靈活性、易維護(hù)性的商務(wù)系統(tǒng)提供了良好的機(jī)制: 保留現(xiàn)存的IT資產(chǎn): 由于必須適應(yīng)新的業(yè)務(wù)需求,利用已有的信息系統(tǒng)方面的投資,而不是重新制定全盤方案就變得很重要。這樣,一個以漸進(jìn)的(而不是激進(jìn)的,全盤否定的)方式建立在已有系統(tǒng)之上的服務(wù)器端平臺機(jī)制是我們所需求的。J2EE架構(gòu)可以充分利用用戶原有的投資,如一些公司使用的BEA Tuxedo、IBM CICS, IBM Encina,、Inprise VisiBroker 以及Netscape Application Server。這之所以成為可能是因為J2EE擁有廣泛的業(yè)界支持和一些重要的‘企業(yè)計算‘領(lǐng)域供應(yīng)商的參與。每一個供應(yīng)商都對現(xiàn)有的客戶提供了不用廢棄已有投資,進(jìn)入可移植的J2EE領(lǐng)域的升級途徑。由于基于J2EE平臺的產(chǎn)品幾乎能夠在任何操作系統(tǒng)和硬件配置上運行,現(xiàn)有的操作系統(tǒng)和硬件也能被保留使用。 高效的開發(fā): J2EE允許把一些通用的、很繁瑣的服務(wù)端任務(wù)交給中間件供應(yīng)商去完成。這樣開發(fā)人員可以集中精力在如何創(chuàng)建邏輯上,相應(yīng)地縮短了開發(fā)時間。高級中間件供應(yīng)商提供以下這些復(fù)雜的中間件服務(wù): 1.狀態(tài)管理服務(wù) -- 讓開發(fā)人員寫更少的代碼,不用關(guān)心如何管理狀態(tài),這樣能夠更快地完成程序開發(fā)。(注:指有態(tài)會話Bean,而Spring目前沒有提供這樣的狀態(tài)管理服務(wù),Jdon框架則提供了) 2.持續(xù)性服務(wù) -- 讓開發(fā)人員不用對數(shù)據(jù)訪問邏輯進(jìn)行編碼就能編寫應(yīng)用程序,能生成更輕巧,與數(shù)據(jù)庫無關(guān)的應(yīng)用程序,這種應(yīng)用程序更易于開發(fā)與維護(hù)。 (注:這就是說為什么說數(shù)據(jù)庫時代終結(jié)了) 3.分布式共享數(shù)據(jù)對象CACHE服務(wù) -- 讓開發(fā)人員編制高性能的系統(tǒng),極大提高整體部署的伸縮性。(Spring沒有提供緩存,jdon框架提供了,而EJB提供了強(qiáng)大的分布式緩存,當(dāng)然今天我們可以將JBoss的POJO 分布式緩存分離出來,用在Spring或Jdon框架上,但是這些需要你的定制能力) 支持異構(gòu)環(huán)境: J2EE能夠開發(fā)部署在異構(gòu)環(huán)境中的可移植程序?;贘2EE的應(yīng)用程序不依賴任何特定操作系統(tǒng)、中間件、硬件。因此設(shè)計合理的基于J2EE的程序只需開發(fā)一次就可部署到各種平臺。這在典型的異構(gòu)企業(yè)計算環(huán)境中是十分關(guān)鍵的。J2EE標(biāo)準(zhǔn)也允許客戶訂購與J2EE兼容的第三方的現(xiàn)成的組件,把他們部署到異構(gòu)環(huán)境中,節(jié)省了由自己制訂整個方案所需的費用。 可伸縮性: 要選擇一種服務(wù)器端平臺,這種平臺應(yīng)能提供極佳的可伸縮性去滿足那些在他們系統(tǒng)上進(jìn)行商業(yè)運作的大批新客戶。基于J2EE平臺的應(yīng)用程序可被部署到各種操作系統(tǒng)上。例如可被部署到Linux、或UNIX與大型機(jī)系統(tǒng),這種系統(tǒng)單機(jī)可支持64至256個處理器。(這是NT服務(wù)器所望塵莫及的)J2EE領(lǐng)域的供應(yīng)商提供了更為廣泛的負(fù)載平衡策略。能消除系統(tǒng)中的瓶頸,允許多臺服務(wù)器集成部署。這種部署可達(dá)數(shù)千個處理器,實現(xiàn)可高度伸縮的系統(tǒng),滿足未來應(yīng)用的需要。 穩(wěn)定的可用性: 一個服務(wù)器端平臺必須能全天候運轉(zhuǎn)以滿足需求。因為INTERNET是全球化的、無處不在的,即使在夜間按計劃停機(jī)也可能造成嚴(yán)重?fù)p失。若是意外停機(jī),那會有災(zāi)難性后果。J2EE部署到可靠的操作環(huán)境中,他們支持長期的可用性。一些J2EE部署在WINDOWS、Linux環(huán)境中,也可選擇健壯性能更好的操作系統(tǒng)如Sun Solaris、IBM OS/390。最健壯的操作系統(tǒng)可達(dá)到99.999%的可用性或每年只需5分鐘停機(jī)時間。這是實時性很強(qiáng)商業(yè)系統(tǒng)理想的選擇。 基于構(gòu)件:它特點是編譯碼、獨立部署的單位、由第三方進(jìn)行組合的單位、無持久狀態(tài)等,它具有可插入、更好的設(shè)計、更好的復(fù)用、方便的更新、實現(xiàn)與接口分離的優(yōu)點。 |
|