Spring2.0 PK EJB3.0

Spring自從2003年發佈以來,一直是Java開源框架的奇蹟之一。從2000年開始,伴隨着B/S架構逐漸引入企業應用軟件開發的領域,Java就逐漸成爲企業應用開發的主流技術,一直到2003年,Struts+EJB一直是Java技術架構的不二選擇,然而這一切隨着2003年Spring以without EJB的面目出現之後,一切都開始改變。

大概從2003年下半年開始,Spring+Hibernate就開始甚囂塵上,似乎那時候的Spring和Hibernate尚且不足以動搖J2EE規範以EJB爲核心的領袖地位。但是2004年5月份,吸收了Spring/Hibernate框架優點的EJB3 JCP委員會的成立,事實上宣判了Spring對EJB2的終結,EJB3則更像是Vendor們的一種自救行爲。

2004年到2006這三年時間以來,Spring取得了相當輝煌的成就,不但將EJB2趕進歷史,而且牢牢確立了Spring作爲Java企業應用開發的主流地位。而今,甚至對技術比較保守的金融電信行業,也開始言必稱Spring,Spring已經成爲Java框架的事實標準。

在2004年5月份之後,Hibernate Team開始和Spring公然決裂,這個事情放在兩年多以後的今天來看,原因是昭然若揭的,背靠JBoss的Hibernate Team已經成爲EJB3規範的一部分,而JBoss希望力推的以EJB3爲核心的Java架構來成爲未來的企業應用主流標準,這種情況演變至今,變成了Springframework和JBoss Seam的兩種不同技術架構的競爭關係。

2004年5月份,EJB3規範的起步,對Spring未來其實有很大的威脅,但是EJB3規範歷經兩年時間的難產,終於在2006年5月正式發佈之時,已經爲時過晚了,擡眼望去,已盡是spring的天下。

有意思的是,大致展望一下未來,Java的企業應用開發還能遵循Sun和JCP制訂的Java EE規範的道路走下去嗎?如果不是這樣,那麼未來道路是什麼呢?

觀察一下Java社區幾股大的勢力,會發現一些有意思的現象:

IBM和BEA是Java社區的領導者,從2004年開始,IBM和BEA開始大肆宣傳SOA,將他們的目光從應用服務器領域挪到了鬆藕合企業服務領域,開展SOA商業戰略。與此同時,EJB3專家委員會的領導者也悄然變成了JBoss和Oracle,是IBM和BEA無力爭取嗎?當然不是。IBM和BEA已經看到了應用服務器市場和底層框架平臺即將被開源佔領,商業價值萎縮,因而審時度勢進行戰略轉型。一方面押寶SOA戰略,大肆炒熱和培育SOA市場,另一方面也積極佔領開源市場,IBM放出來WebSphere社區版本-Apache Geronimo,BEA乾脆和Spring的諮詢公司interface21合作,提供spring框架在WebLogic上的商業技術支持,如今EJB3對於他們來說已經形同雞肋,就拋給別人嚼吧。

將EJB3當塊寶的自然是應用服務器市場的跟隨者JBoss和Oracle,一方面憑藉ORM的先天優勢,另一方面有出頭機會也不能放過,EJB3委員會幾乎成了JBoss和Oracle的天下。特別是JBoss,更加積極推出JBoss Seam框架,希望確立以JSF+EJB3的架構樹立Java開發的標準,用以取代Struts/Spring/Hibernate的流行組合,因而開啓了EJB3和Spring 正面交鋒的戰爭。

Java Vendor中另外一股勢力Sun公司這兩年則一直自顧不暇,在應用服務器領域幾乎退出市場,直到最近才搞出來一個Glassfish,在開發框架領域也一直毫無建樹,推出的JSF至今還很不成熟,難擔大任,也許Sun都去忙着開源Solaris和JVM源代碼了。

幾個大的Vendor或戰略轉型,或自顧不暇,或忙於收購(Oracle),Java開發領域的主戰場被打掃一空,對決的雙方換成了Spring和JBoss。對決的武器則是spring vs Seam。

Spring代表了不遵循通用標準,自己制訂遊戲規則,不依賴容器的一方;JBoss代表了遵循通用標準,但是鎖定容器的一方。這場對決從2004年5月就開始上演,未來很長時間也會繼續下去。不過Spring已經站在優勢很大的地位上了。

大致對比一下兩者:Spring vs EJB3,就會發現Spring從功能上面已經勝出很多了:

1、IoC容器spring勝出

Spring的IoC容器很強大,其bean管理功能超過了目前EJB3容器,配置方面Spring稍微複雜一些。不過對於全局性配置來說,XML要優於EJB3的annotation。

2、AOP能力Spring勝出

EJB3目前提供的AOP功能非常簡單,本來已經無法和Spring相比,至於集成AspectJ的Spring2.0,就更加望塵莫及了。

3、事務管理方面EJB3稍微領先

Spring提供了很棒的本地事務模型,也可以集成JTA,但是不支持分佈式事務,當然這種場景也非常罕見。

4、Web框架spring勝出

EJB3標準集成JSF,但是JSF並不成熟,和AJAX配合度也不好。Spring可以靈活集成各種Web框架和模板語言,自身也提供了相當強大的MVC框架,要是這還覺得不夠,那麼spring webflow,portlet support都拿出來。

5、遠程訪問支持,大致持平

EJB3繼承了傳統的EJB遠程訪問能力,Web Services支持也不錯;不過Spring提供了更多更靈活的選擇,Java RPC,HTTP Invoker,Hessian/Burlap,WebServices。

6、框架集成能力,spring勝出

這是spring的傳統優勢項目,只要看看spring modules項目,看看n多第三方spring支持,就會發現spring現在的羣衆基礎多麼好,集成工作流,spring modules已經提供了方便的模板類,集成規則引擎,Cache,CMS,腳本語言,異步任務,安全驗證框架。。。。。。EJB3有點望塵莫及的味道

7、JMS,JMX,JCA等,EJB3領先一步

這些傳統EJB優勢項目往往應用的不太多,EJB3仍然是領先的。不過令人側目的是,Spring最近幾個版本在連續追趕EJB這些傳統優勢領域,到Spring2.0爲止,其JMS,JMX,JCA支持已經相當不錯了,可以說傳統EJB能夠做的,現在Spring也可以做得到。

這幾年除了Spring框架自身不斷完善和延伸到傳統應用領域,圍繞在Spring周圍的第三方框架也是越來越豐富,EJB3在annotation方面有些獨到的優勢,在一些傳統領域,還領先spring,但是總體來說,EJB3爲核心的J2EE5.0規範很難和Spring現在的2.0相匹敵,更何況Java的主力Vendor早已醉翁之意不在這裏了,單憑JBoss的Seam,難以戰勝spring。

目前JBoss已經開始在國內進行商業上的推廣,也希望以其EJB3技術來和Springframework相抗衡,JBoss目前用來說服客戶使用EJB3的理由主要有兩點:

1、EJB3是一個標準,由多個廠商提供實現
2、JBoss的EJB3由Red Hat公司及其合作伙伴提供技術支持,而springfrmework在國內還沒有商業技術支持

 
發佈了48 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章