當前位置:歷史故事大全網 - 歷史上的今天 - 比較分析Struts+Spring+Hibernate和EJB3的異同。越詳細越好。

比較分析Struts+Spring+Hibernate和EJB3的異同。越詳細越好。

作為壹名建築師,我對EJB和春天又愛又恨。現在就讓我們對這兩種技術體系做壹個全面的分析比較,希望能給妳在選擇技術時更好的參考。

1.法制VS“民主”

EJB規範壹直是由國際組織JCP制定的。壹旦被采用,就是官方標準,各廠商都會不遺余力的推廣。因此,對於企業應用程序來說,EJB就是法律,基於EJB的基礎架構暫時稱為法治。Spring來自開源社區,是眾多開源軟件開發者逐漸形成的流行系統標準。它的設計以IoC(反轉控制)為核心,倡導所謂的“零”入侵設計原則,這裏暫且稱為民主。

支持EJB的應用服務器通常是壹個大型的完整產品,包括構建企業應用程序所需的所有方面。如果它需要額外的擴展,壹般不容易。如果您對壹個應用服務器不滿意,您可以並且只能更換整個應用服務器。好在因為應用服務器市場百花齊放,妳可以從免費到低端到高端選擇。Spring從IoC容器發展而來,通過不斷集成AOP,MVC,或者/Mapping以及幾乎所有妳能想到的服務,提供了壹個完美的企業應用框架。對於壹個應用程序,可以自由選擇具體技術框架的實現。SSH是最常用的組合,但每個架構師是否有能力正確選擇並不重要。無論如何,壹旦在設計之初就確定了最終的選擇,就沒那麽容易去更換了。妳不能簡單的把壹個基於Spring+Struts的應用移植到Spring+WebWork上。要把壹個基於Spring+Hibernate的應用輕松移植到Spring+iBatis就更難了,所以對於需要長期維護和開發的應用,只能希望自己采用的框架能開發好,在升級的同時保證向前兼容。

總而言之,EJB是全世界的標準,就像國際法壹樣。壹旦被遵循,被普遍使用,妳就可以在WebSphere、WebLogic甚至JBoss之間輕松切換,所以如果妳選擇了EJB,妳將在壹個“合法”的環境中獲得最大的民主;春天對全世界來說似乎是民主的,但是壹旦整個結構確定了,就變成專制的,就像美國式的民主壹樣。壹旦被征服,就變成了它的獨裁。想要擺脫它的控制不是那麽容易的。讓我們細細品味其中的好處。

2.輕量級組件VS輕量級內核VS輕量級容器

關於輕量級內核,不管是真是假,現在的應用服務器都宣稱采用微內核技術,並在此基礎上建立Java EE的各種服務,構建壹個完美的應用服務器;Spring本身是基於IoC的輕量級內核,然後通過集成第三方服務器提供完整的架構。

EJB組件曾被認為是壹個重量級組件,但它受到了批評。EJB3規範的重要目標是簡化EJB的開發,並為容器管理提供輕量級的組件解決方案。

但需要提醒的是,輕量級組件並不意味著提供服務的容器是輕量級的。無論是EJB2還是EJB3,應用服務器自然是壹個重量級的服務,因為它需要管理組件的生命周期和行為,並提供內置的各種服務。至少目前,現有應用服務器提供的容器還不夠輕。個人很喜歡JBoss 2.4。它有我需要的功能,而且足夠簡單。現在JBoss 4的啟動速度已經漸漸讓我對它失去了耐心。

對於春天來說,也存在同樣的問題。輕量級內核不代表整個框架都是輕量級的,更不代表整個基於Spring的應用架構都是輕量級的。對於Spring,妳需要找到並粘合各種服務,然後讓它們穩定地協同工作。如果應用程序需要更多的技術和更高的可伸縮性,您將繼續向應用程序服務添加其他服務,如資源池、消息隊列、集群等等。加上這些,Spring的解決方案就和Java EE應用服務器的解決方案壹樣重量級了。

追求簡單和輕便是每個應用程序架構的目標。對於企業應用的構建,輕量級組件標準+輕量級內核+輕量級容器是構建輕量級應用平臺的終極需求。如果有壹個輕量級的容器,將有助於EJB3在企業應用中重新獲得有利地位。

3.可管理性和可控性

這個問題對於壹次性交付的項目可能不是問題,但是對於質量要求更高、生命周期更長的產品,是衡量平臺和架構的重要因素。

由於基於Spring架構的應用過於自由和靈活,隨著項目的進展,逐漸集成了越來越多的第三方框架,很難保證集成的服務和組件之間是否存在漏洞,甚至嚴重沖突。然後,很難控制整個項目的質量。僅僅通過壹頁壹頁的配置文件,我們就知道以後的維護成本會增加。回想壹下EJB2.0時代的ejb-jar.xml。EJB顯然比Spring開發的應用程序更可控,因為它集成了所有標準服務,並且組件模型是固定的。此外,應用服務器通常提供壹個控制臺來查看運行時的屬性並實時管理服務。

#p#

4.功能比較

4.1,IoC容器,AOP功能

Spring在IoC中稍微強壹點,但是在EJB3中完全可以註入,開發起來簡單很多。對於壹些相對固定的註入,標註更好,而對於壹些可能需要頻繁更改的註入,XML更靈活,EJB3正好提供了兩個這樣的解決方案。如果妳已經患上了XML恐懼癥,EJB3無疑會幫妳緩解。

同時,EJB3組件支持多種註入方式,如依賴名稱、接口或JNDI名稱。此外,還支持使用@PersistenceContext註入EntityManager,使用@Resource註入服務器資源,如EJBContext、TimerService等。壹些註釋已經成為JDK6的壹部分,將來可能會被JDK直接支持。

關於AOP,如果妳需要壹個徹底的AOP,在Spring中集成AspectJ,EJB3自然是無法比擬的。但是如果妳的項目是基於充分性原則的話,妳只需要壹般的方法來攔截AOP,EJB3提供的各種回調方法應該可以滿足妳的要求。

4.2、交易處理

EJB的看家本領,Spring也通過提供TransactionTemplate和集成第三方事務處理器來支持JTA,都支持聲明式事務,比如BMT和CMT,但無論如何,移植的器官都沒有自己長。

4.3、分布式能力

壹般使用Java EE架構的公司都認為這是EJB最大的優勢,但實現並不如預期。壹方面,大部分是Web應用,Web提供的分布式能力可以滿足90%的需求。另壹方面,大家基本都是整體部署Web容器和EJB容器,EJB組件的分布式部署很少。當然,如果妳需要分別部署Web層和應用層,那麽Spring肯定不在妳的考慮範圍之內。

4.4.集群能力

集群也是EJB的傳統優勢,但是老師說發揮EJB集群優勢的地方不多,因為即使項目中采用了EJB,壹般也是用無狀態SessionBean代替HttpSession集群。在這種情況下,無論EJB還是春天,大家都是平等的。當然,如果妳是在構建壹個大規模的應用,對集群能力要求非常高,比如事務級集群,分布式需求,那麽估計沒有太多因素會讓妳考慮Web Server+Spring的架構。

4.5、網絡服務

EJB3中的Web服務和EJB組件集成得非常好,很容易使用。如下例所示,JAX-WS將逐漸成為Java Web服務事實上的標準。至於Spring,可以實現各種基於Http的遠程調用方式,優勢並不明顯。

@遠程

@本地

@ web service(endpoint interface = " jfox . test . EJB 3 . web service . calculator ")

公共類CalculatorBean實現CalculatorRemote、CalculatorLocal {

public int add(int x,int y) {

返回x+y;

}

public int subtract(int x,int y) {

返回x-y;

}

}

4.6、集成的第三方框架

如果需要集成第三方框架,估計需要Spring,當然前提是Spring已經給出了很好的集成方案;但是,如果采用EJB,則取決於具體的應用服務器。建議作為類庫使用,或者使用上下文監聽器啟動。但是,它只能基於特定的應用服務器進行集成。壹般來說,應用服務器提供JMX集成能力。

總結

縱觀人類歷史,如果政府過於強大,必然會迫使人民造反;如果民間力量太強大,社會就會不穩定,這是我們不願意看到的,在科技界也是壹樣。對於EJB3和Spring來說,Spring現在處於壓倒性的優勢。希望EJB3的出現不僅能為政府挽回壹些失地,還能繼續引發更多的討論。它不再受壹個學派的限制。只有在百家爭鳴的環境下,開發者和架構師才能更好的理解企業應用的構建,所以最好的辦法就是EJB3和Spring相互促進,和諧發展。

期待真正專註於開發需求的輕量級EJB3應用服務器的出現,為疲軟的EJB市場註入新的活力!

  • 上一篇:烏克蘭和俄羅斯的矛盾起源是什麽?
  • 下一篇:用詩經寫壹篇作文
  • copyright 2024歷史故事大全網