程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> POJO應用架構:Spring與EJB 3.0的對比

POJO應用架構:Spring與EJB 3.0的對比

編輯:JAVA編程入門知識

  愛因斯坦曾經說過:"每件事物都應該盡可能簡單,而不是更簡單"。的確,對科學真理的追求都是為了簡化理論的根本假設,這樣我們才能處理真正麻煩的問題。企業級軟件的開發也是這樣的。
  簡化企業級軟件開發的要害是提供一個隱藏了復雜性(例如事務、安全性和永續性)的應用框架。良好設計的框架組件可以提升代碼的重復使用(reuse)能力,提高開發效率,從而得到更好的軟件質量。但是,目前J2EE 1.4中的EJB 2.1框架組件被人們普遍認為是設計較差的和過於復雜的。Java開發者對EJB 2.1很不滿,他們已經試驗了多種其它的用於中間件服務傳送的方法。最引人注目的,下面兩個框架組件已經引起開發者的巨大愛好和積極的反映。它們很可能成為未來企業級Java應用程序可供選擇的框架組件。
  
  · Spring框架組件是一個流行的,但是非標准的開放源代碼框架組件。它主要是由Interface21 Inc.公司開發和控制的。Spring框架組件的架構是基於依靠注入(DI)設計模式的。Spring可以單獨地或者與現有的應用程序服務器一起工作,它大量地使用XML配置文件。
  
  · EJB 3.0框架組件是一個標准的框架組件,由Java社區組織(JCP)定義,並受到所有主流的J2EE廠商支持。預發布的EJB 3.0規范的開放源代碼和商業實現都可以在JBoss和Oracle上看到了。EJB 3.0大量使用Java注釋(annotation)。
  
  這兩個框架組件的核心設計理念是相同的:兩者的目標都是把中間件服務傳遞給松散耦合的簡單舊式Java對象(POJO)。這些框架組件通過在運行時截取執行內容或向POJO注入服務對象,把應用程序服務與POJO捆綁在一起。POJO本身不關心捆綁的過程,並且對框架組件幾乎沒有依靠。其結果是,開發者可以聚焦於業務邏輯,個人可以在沒有框架組件的情況下測試他們的POJO。此外,由於POJO不需要從框架組件中繼續或實現框架組件接口,開發者建立繼續結構和構建應用程序的時候都有高度的靈活性。
  
  但是,盡管兩者的設計理念是相同的,它們傳遞POJO服務時卻采用了完全不同的方法。盡管目前已經出版了大量的圖書和文章來把Spring或EJB 3.0與EJB 2.1進行對比,但是它們都沒有對Spring與EJB 3.0之間的差異進行認真的研究。在本文中,我將研究Spring和EJB 3.0框架組件之間的要害差異,並討論它們的優缺點。本文的主題也可以應用在其它一些名氣稍小的企業級中間件框架組件上,因為它們都聚焦於"松散耦合的POJO"設計。我希望本文能夠幫助你選擇符合需求的最佳的框架組件。
  廠商無關性(Independence)
  
  開發者選擇某種Java平台的一個最重要的理由就是該平台的廠商無關性。EJB 3.0是一個開放的、標准的、具有廠商無關性的平台。EJB 3.0規范是由企業級Java團體中所有主流開放源代碼和商業廠商開發和支持的。EJB 3.0框架組件把開發人員與應用程序服務器實現(implementation)隔離開來了。例如,盡管JBoss的EJB 3.0實現是基於Hibernate的,而Oracle的EJB 3.0實現是基於TopLink的,但是開發人員並不需要學習Hibernate或TopLink的非凡API,就可以讓他們的應用程序在JBoss和Oracle上運行。廠商無關性把EJB 3.0框架組件與其它的POJO中間件框架組件區分開來了。
  
  但是,很多EJB 3.0的批評家迅速指出,在寫這篇文章的時候,EJB 3.0規范還沒有達到最終發表的版本。在EJB 3.0被所有主流的J2EE廠商采用之前可能還需要一到兩年時間。但是,即使你的應用程序服務器還沒有自然地(natively)支持EJB 3.0,你還是可以通過下載和安裝一個"嵌入式的" EJB 3.0產品,在服務器上運行EJB 3.0應用程序。例如,JBoss嵌入式EJB 3.0產品是開放源代碼的,可以在任何與J2SE-5.0兼容的環境中(例如,在Java應用程序服務器中)運行。它現在正在進行beta測試。其它的廠商也可能很快發布他們的嵌入式EJB 3.0產品,非凡是用於規范的"數據永續性"部分的產品。
  
  另一方面,Spring一直是非標准的技術,而且在可以預見的未來它仍然是這樣的。盡管你可以把Spring框架組件與任何應用程序服務器一起使用,但是Spring應用程序都被"鎖定"在Spring自身和你所選擇的集成到Spring中的特定服務中了。
  
  · 盡管Spring框架組件是一個開放源代碼項目,但是它仍然擁有配置文件的專利XML格式和專利編程接口。當然,這類"鎖定"發生在任何非標准的產品上,Spring也不例外。但是它卻造成了:你的Spring應用程序的長期生存能力依靠於Spring項目本身(或Interface21 Inc公司,它雇傭了大多數Spring核心開放人員)。此外,假如你使用任何Spring特定的服務,例如Spring事務治理器或Spring MVC,你就被"鎖定"在這些API中了。
  
  · Spring應用程序需要知道後台的服務提供者。例如,對於數據持續(data persistence)服務來說,Spring框架組件為JDBC、Hibernate、iBatis和JDO使用了不同的DAO和模板輔助類。因此,假如你希望為Spring應用程序更換持續服務提供者(例如從JDBC切換到Hibernate),你就必須重構自己的應用程序代碼,使用新的輔助類。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved