欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
POJO應用架構:Spring與EJB 3.0的對比
 
作者:佚名    文章來(lái)源:不詳    點(diǎn)擊數: 3    更新時(shí)間:2006-4-29    
1 2 下一頁(yè)
愛(ài)因斯坦曾經(jīng)說(shuō)過(guò):"每件事物都應該盡可能簡(jiǎn)單,而不是更簡(jiǎn)單"。的確,對科學(xué)真理的追求都是為了簡(jiǎn)化理論的根本假設,這樣我們才能處理真正麻煩的問(wèn)題。企業(yè)級軟件的開(kāi)發(fā)也是這樣的。
簡(jiǎn)化企業(yè)級軟件開(kāi)發(fā)的關(guān)鍵是提供一個(gè)隱藏了復雜性(例如事務(wù)、安全性和永續性)的應用框架。良好設計的框架組件可以提升代碼的重復使用(reuse)能力,提高開(kāi)發(fā)效率,從而得到更好的軟件質(zhì)量。但是,目前J2EE 1.4中的EJB 2.1框架組件被人們普遍認為是設計較差的和過(guò)于復雜的。Java開(kāi)發(fā)者對EJB 2.1很不滿(mǎn),他們已經(jīng)試驗了多種其它的用于中間件服務(wù)傳送的方法。最引人注目的,下面兩個(gè)框架組件已經(jīng)引起開(kāi)發(fā)者的巨大興趣和積極的反映。它們很可能成為未來(lái)企業(yè)級Java應用程序可供選擇的框架組件。
· Spring框架組件是一個(gè)流行的,但是非標準的開(kāi)放源代碼框架組件。它主要是由Interface21 Inc.公司開(kāi)發(fā)和控制的。Spring框架組件的架構是基于依賴(lài)注入(DI)設計模式的。Spring可以單獨地或者與現有的應用程序服務(wù)器一起工作,它大量地使用XML配置文件。
· EJB 3.0框架組件是一個(gè)標準的框架組件,由Java社區組織(JCP)定義,并受到所有主流的J2EE廠(chǎng)商支持。預發(fā)布的EJB 3.0規范的開(kāi)放源代碼和商業(yè)實(shí)現都可以在JBoss和Oracle上看到了。EJB 3.0大量使用Java注釋?zhuān)╝nnotation)。
這兩個(gè)框架組件的核心設計理念是相同的:兩者的目標都是把中間件服務(wù)傳遞給松散耦合的簡(jiǎn)單舊式Java對象(POJO)。這些框架組件通過(guò)在運行時(shí)截取執行內容或向POJO注入服務(wù)對象,把應用程序服務(wù)與POJO捆綁在一起。POJO本身不關(guān)心捆綁的過(guò)程,并且對框架組件幾乎沒(méi)有依賴(lài)。其結果是,開(kāi)發(fā)者可以聚焦于業(yè)務(wù)邏輯,個(gè)人可以在沒(méi)有框架組件的情況下測試他們的POJO。此外,由于POJO不需要從框架組件中繼承或實(shí)現框架組件接口,開(kāi)發(fā)者建立繼承結構和構建應用程序的時(shí)候都有高度的靈活性。
但是,盡管兩者的設計理念是相同的,它們傳遞POJO服務(wù)時(shí)卻采用了完全不同的方法。盡管目前已經(jīng)出版了大量的圖書(shū)和文章來(lái)把Spring或EJB 3.0與EJB 2.1進(jìn)行對比,但是它們都沒(méi)有對Spring與EJB 3.0之間的差異進(jìn)行認真的研究。在本文中,我將研究Spring和EJB 3.0框架組件之間的關(guān)鍵差異,并討論它們的優(yōu)缺點(diǎn)。本文的主題也可以應用在其它一些名氣稍小的企業(yè)級中間件框架組件上,因為它們都聚焦于"松散耦合的POJO"設計。我希望本文能夠幫助你選擇符合需求的最佳的框架組件。
廠(chǎng)商無(wú)關(guān)性(Independence)
開(kāi)發(fā)者選擇某種Java平臺的一個(gè)最重要的理由就是該平臺的廠(chǎng)商無(wú)關(guān)性。EJB 3.0是一個(gè)開(kāi)放的、標準的、具有廠(chǎng)商無(wú)關(guān)性的平臺。EJB 3.0規范是由企業(yè)級Java團體中所有主流開(kāi)放源代碼和商業(yè)廠(chǎng)商開(kāi)發(fā)和支持的。EJB 3.0框架組件把開(kāi)發(fā)人員與應用程序服務(wù)器實(shí)現(implementation)隔離開(kāi)來(lái)了。例如,盡管JBoss的EJB 3.0實(shí)現是基于Hibernate的,而Oracle的EJB 3.0實(shí)現是基于TopLink的,但是開(kāi)發(fā)人員并不需要學(xué)習Hibernate或TopLink的特殊API,就可以讓他們的應用程序在JBoss和Oracle上運行。廠(chǎng)商無(wú)關(guān)性把EJB 3.0框架組件與其它的POJO中間件框架組件區分開(kāi)來(lái)了。
但是,很多EJB 3.0的批評家迅速指出,在寫(xiě)這篇文章的時(shí)候,EJB 3.0規范還沒(méi)有達到最終發(fā)表的版本。在EJB 3.0被所有主流的J2EE廠(chǎng)商采用之前可能還需要一到兩年時(shí)間。但是,即使你的應用程序服務(wù)器還沒(méi)有自然地(natively)支持EJB 3.0,你還是可以通過(guò)下載和安裝一個(gè)"嵌入式的" EJB 3.0產(chǎn)品,在服務(wù)器上運行EJB 3.0應用程序。例如,JBoss嵌入式EJB 3.0產(chǎn)品是開(kāi)放源代碼的,可以在任何與J2SE-5.0兼容的環(huán)境中(例如,在Java應用程序服務(wù)器中)運行。它現在正在進(jìn)行beta測試。其它的廠(chǎng)商也可能很快發(fā)布他們的嵌入式EJB 3.0產(chǎn)品,特別是用于規范的"數據永續性"部分的產(chǎn)品。
另一方面,Spring一直是非標準的技術(shù),而且在可以預見(jiàn)的未來(lái)它仍然是這樣的。盡管你可以把Spring框架組件與任何應用程序服務(wù)器一起使用,但是Spring應用程序都被"鎖定"在Spring自身和你所選擇的集成到Spring中的特定服務(wù)中了。
· 盡管Spring框架組件是一個(gè)開(kāi)放源代碼項目,但是它仍然擁有配置文件的專(zhuān)利XML格式和專(zhuān)利編程接口。當然,這類(lèi)"鎖定"發(fā)生在任何非標準的產(chǎn)品上,Spring也不例外。但是它卻造成了:你的Spring應用程序的長(cháng)期生存能力依賴(lài)于Spring項目本身(或Interface21 Inc公司,它雇傭了大多數Spring核心開(kāi)放人員)。此外,如果你使用任何Spring特定的服務(wù),例如Spring事務(wù)管理器或Spring MVC,你就被"鎖定"在這些API中了。
· Spring應用程序需要知道后臺的服務(wù)提供者。例如,對于數據持續(data persistence)服務(wù)來(lái)說(shuō),Spring框架組件為JDBC、Hibernate、iBatis和JDO使用了不同的DAO和模板輔助類(lèi)。因此,如果你希望為Spring應用程序更換持續服務(wù)提供者(例如從JDBC切換到Hibernate),你就必須重構自己的應用程序代碼,使用新的輔助類(lèi)。
服務(wù)集成
從較高的層次看,Spring框架組件位于應用程序服務(wù)器和服務(wù)類(lèi)庫之上。其服務(wù)集成代碼(例如數據訪(fǎng)問(wèn)模板和輔助類(lèi))位于框架組件之中,并暴露給應用程序開(kāi)發(fā)者。與此不同的是,EJB 3.0框架組件被緊密地集成到應用程序服務(wù)器中,服務(wù)集成代碼被封裝在標準的接口中。
其結果是,EJB 3.0廠(chǎng)商可以積極地優(yōu)化總體性能和開(kāi)發(fā)者體驗。例如,在JBoss的 EJB 3.0實(shí)現中,使用EntityManager保持實(shí)體Bean POJO的時(shí)候,下層Hibernate對話(huà)事務(wù)會(huì )自動(dòng)地與該調用方法的JTA事務(wù)聯(lián)系在一起,當JTA事務(wù)提交的時(shí)候,它也會(huì )提交。如果使用簡(jiǎn)單的@PersistenceContext注釋?zhuān)ū疚暮竺嬗幸粋€(gè)例子),你甚至于可以在有狀態(tài)的(stateful)對話(huà)bean中把EntityManager和它的下層Hibernate事務(wù)捆綁到一個(gè)應用程序事務(wù)上。該應用程序事務(wù)在一個(gè)對話(huà)中跨越了多個(gè)線(xiàn)程,它在事務(wù)性的Web應用程序(例如多頁(yè)面購物車(chē))中是非常有效的。由于在JBoss中,EJB 3.0框架組件、Hibernate和Tomcat緊密集成,上述的簡(jiǎn)單和集成的編程接口才得以實(shí)現。Oracle的EJB 3.0框架組件和其下層Toplink持續服務(wù)之間的也實(shí)現了類(lèi)似層次的集成。
EJB 3.0中集成服務(wù)的另一個(gè)例子是群集(clustering)支持。如果你在服務(wù)器群集中部署EJB 3.0應用程序,那么所有的失效接續(fail-over)、負載均衡、分布式緩存和狀態(tài)復制服務(wù)都是可以自動(dòng)地供應用程序使用的。下層群集服務(wù)都隱藏在EJB 3.0編程接口后面,它們對于EJB 3.0開(kāi)發(fā)人員來(lái)說(shuō)是完全透明的。
在Spring中,優(yōu)化框架組件與服務(wù)之間的交互操作要困難得多。例如,為了使用Spring的宣告式事務(wù)服務(wù)來(lái)管理Hibernate事務(wù),你必須在XML配置文件中顯式地配置Spring TransactionManager和Hibernate SessionFactory對象。Spring應用程序開(kāi)發(fā)者必須顯式地管理跨多個(gè)HTTP請求的事務(wù)。此外,要在Spring應用程序中使用群集服務(wù)也沒(méi)有簡(jiǎn)單的途徑。
服務(wù)集成的靈活性
由于Spring中的服務(wù)集成代碼是作為編程接口的一部分暴露的,應用程序開(kāi)發(fā)者可以根據需要靈活地集成服務(wù)。這個(gè)特性允許你集成自己的"輕量級"應用程序服務(wù)器。Spring最普遍的使用方式是把Tomcat和Hibernate"粘合"在一起來(lái)提供簡(jiǎn)單的數據庫驅動(dòng)web應用程序。在這種情況下,Spring自身提供事務(wù)服務(wù),Hibernate提供持續(persistence)服務(wù)--這種組織方式在Spring中建立了一個(gè)微型應用程序服務(wù)器。
EJB 3.0應用程序服務(wù)器沒(méi)有賦予你挑選服務(wù)的靈活性。在大多數情況中,你得到一組事先包裝好的特性,而你只需要其中的一部分。但是,如果應用程序服務(wù)器由模式化的內部設計主導(類(lèi)似JBoss),那么你就可能把它分開(kāi),去掉一些不必要的特性。在任何情況下,定制成熟的應用程序服務(wù)器都不是一個(gè)簡(jiǎn)單的事情。
當然,如果應用程序的范圍超越了單節點(diǎn),那么你可能需要捆綁來(lái)自普通應用程序服務(wù)器的服務(wù)(例如資源緩沖池、消息隊列和群集)。在總體的資源消耗方面,Spring解決方案與任何EJB 3.0解決方案一樣,都是"重量級"的。
在Spring中,靈活的服務(wù)集成使得我們更容易把仿制(mock)對象(而不是實(shí)際的服務(wù)對象)捆綁到應用程序,用于在容器外部進(jìn)行單元測試。在EJB 3.0應用程序中,大多數組件都是簡(jiǎn)單的POJO,我們可以很容易地在容器外部測試這些它們。但是對于測試那些涉及到容器服務(wù)的對象(例如持續EntityManager),我們推薦在容器內測試,因為比起仿制對象的方法,它們更簡(jiǎn)單、更牢固、更精確。 XML與注釋的比較
從應用程序開(kāi)發(fā)者的角度來(lái)看,Spring的編程接口主要是基于XML配置文件的,而EJB 3.0廣泛使用了Java注釋。XML文件可以表達復雜的關(guān)系,但是它們同時(shí)也很冗長(cháng)、牢固程度也較低。注釋簡(jiǎn)單明了,但是在注釋中我們卻很難表達復雜的或層次的結構。
Spring和EJB 3.0關(guān)于XML或注釋的選擇是依賴(lài)于這兩個(gè)框架組件后面的架構的:由于注釋只能保存相當少的配置信息,只有預先集成的框架組件(類(lèi)似在框架組件中已經(jīng)完成了大多數預備工作)可以廣泛地把注釋作為配置選項。我們已經(jīng)討論過(guò)了,EJB 3.0符合這種需求,而Spring作為一個(gè)通用的DI框架組件,不符合這個(gè)需求。
當然,EJB 3.0和Spring都在學(xué)習對方的最佳特性,它們都在某個(gè)程度上支持XML和注釋。例如,在EJB 3.0中XML配置文件是一個(gè)可選的重載機制,可以用于改變注釋的默認行為。注釋也可以用于配置某些Spring服務(wù)。
認識XML和注釋之間的區別的最好途徑是通過(guò)示例。在下一部分,我們會(huì )看到Spring和EJB 3.0是如何為應用程序提供關(guān)鍵服務(wù)的。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Spring 與 EJB 比較
pojo應用框架:spring vs. ejb 3.0(翻譯文章,原創(chuàng ))
[轉]Java EE 5.0能取代Struts,Spring和Hibernate嗎?
Spring 學(xué)習一(了解Spring)
除舊迎新Java2005回顧與2006展望
輕量級開(kāi)發(fā)的成功秘訣,第 2 部分: 如何減輕容器
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久