這篇文章主要講解了“Spring框架的事物支持模型優(yōu)勢(shì)有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Spring框架的事物支持模型優(yōu)勢(shì)有哪些”吧!
目前成都創(chuàng)新互聯(lián)已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、呼瑪網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
全面的事務(wù)支持是使用Spring Framework的最令人信服的原因之一。Spring框架為事務(wù)管理提供了一致的抽象,具有以下優(yōu)點(diǎn):
跨域不同事物API的一致性編程模型,例如:Java事物API(JTA)
、JDBC
、Hibernate
、Java持久化API(JPA)
。
支持聲明式事物。
比復(fù)雜的事物API更簡(jiǎn)單的編程式事物管理。
與Spring的數(shù)據(jù)存儲(chǔ)抽象優(yōu)秀集成。
下面的部分描述Spring框架的事物特性和技術(shù):
Spring框架的事務(wù)支持模型的優(yōu)點(diǎn)描述了為什么你將使用Spring 框架的事務(wù)抽象而不是EJB容器管理的事務(wù)(CMT)或選擇通過(guò)諸如Hibernate
之類的專有API驅(qū)動(dòng)本地事務(wù)的原因。
了解Spring 框架事務(wù)抽象概述了核心類,并描述了如何從各種來(lái)源配置和獲取DataSource
實(shí)例。
將資源與事務(wù)同步描述了應(yīng)用程序代碼如何確保正確創(chuàng)建、重用和清理資源。
聲明式事務(wù)管理描述了對(duì)聲明式事務(wù)管理的支持。
編程式事務(wù)管理涵蓋對(duì)編程式(即,顯式編碼)事務(wù)管理的支持。
事務(wù)綁定事件描述了如何在事務(wù)中使用應(yīng)用程序事件。
本章還討論了最佳實(shí)踐,應(yīng)用程序服務(wù)器集成以及常見問(wèn)題的解決方案。
傳統(tǒng)上,Java EE開發(fā)人員在事務(wù)管理中有兩種選擇:全局或本地事務(wù),這兩者都有很大的局限性。下兩節(jié)將回顧全局和本地事務(wù)管理,然后討論Spring框架的事務(wù)管理支持如何解決全局和本地事務(wù)模型的局限性。
全局事務(wù)使你可以使用多個(gè)事務(wù)資源,通常是關(guān)系數(shù)據(jù)庫(kù)和消息隊(duì)列。應(yīng)用服務(wù)器通過(guò)JTA管理全局事務(wù),而JTA
是一個(gè)繁瑣的API(部分是由于其異常模型)。此外,通常需要從JNDI
派生JTA
UserTransaction
,這意味著你還需要使用JNDI
才能使用JTA
。全局事務(wù)的使用限制了應(yīng)用程序代碼的任何潛在重用,因?yàn)?code>JTA通常僅在應(yīng)用程序服務(wù)器環(huán)境中可用。
以前,使用全局事務(wù)的首選方法是通過(guò)EJB
CMT
(容器管理的事務(wù))。CMT
是聲明式事務(wù)管理的一種形式(與編程式事務(wù)管理不同)。盡管使用EJB
本身必須使用JNDI
,但是EJB
CMT
消除了與事務(wù)相關(guān)的JNDI
查找的需要。它消除了大多數(shù)(但不是全部)編寫Java代碼來(lái)控制事務(wù)的需求。重大缺點(diǎn)是CMT
與JTA
和應(yīng)用程序服務(wù)器環(huán)境相關(guān)聯(lián)。而且,僅當(dāng)選擇在EJB
中(或至少在事務(wù)性EJB幕后)實(shí)現(xiàn)業(yè)務(wù)邏輯時(shí),此功能才可用。EJB
的缺點(diǎn)是如此之大,以至于這不是一個(gè)有吸引力的提議,特別是在面對(duì)聲明性事務(wù)管理的引人注目的替代方案時(shí)。
本地事務(wù)是特定于資源的,例如與JDBC
連接關(guān)聯(lián)的事務(wù)。本地事務(wù)可能更易于使用,但有一個(gè)明顯的缺點(diǎn):它們不能跨多個(gè)事務(wù)資源工作。例如,使用JDBC
連接管理事務(wù)的代碼不能在全局JTA
事務(wù)中運(yùn)行。因?yàn)閼?yīng)用程序服務(wù)器不參與事務(wù)管理,所以它無(wú)法幫助確保多個(gè)資源之間的正確性。(值得注意的是,大多數(shù)應(yīng)用程序使用單個(gè)事務(wù)資源。)另一個(gè)缺點(diǎn)是本地事務(wù)侵入了編程模型。
Spring解決了全局事物和本地事物的缺陷。它使應(yīng)用程序開發(fā)人員可以在任何環(huán)境中使用一致的編程模型。你只需編寫一次代碼,即可從不同環(huán)境中的不同事務(wù)管理策略中受益。Spring框架提供了聲明式和編程式事務(wù)管理。大多數(shù)用戶喜歡聲明式事務(wù)管理,在大多數(shù)情況下我們建議這樣做。
通過(guò)編程式事務(wù)管理,開發(fā)人員可以使用Spring框架事務(wù)抽象,該抽象可以在任何基礎(chǔ)事務(wù)基礎(chǔ)架構(gòu)上運(yùn)行。使用首選的聲明式模型,開發(fā)人員通常編寫很少或沒有編寫與事務(wù)管理相關(guān)的代碼,因此,它們不依賴于Spring框架事務(wù)API或任何其他事務(wù)API。
你是否需要一個(gè)應(yīng)用程序服務(wù)器來(lái)進(jìn)行事務(wù)管理
Spring框架的事務(wù)管理支持更改了有關(guān)企業(yè)Java應(yīng)用程序何時(shí)需要應(yīng)用服務(wù)器的傳統(tǒng)規(guī)則。
特別是,你不需要純粹用于通過(guò)
EJB
進(jìn)行聲明式事務(wù)的應(yīng)用程序服務(wù)器。實(shí)際上,即使你的應(yīng)用服務(wù)器具有強(qiáng)大的JTA
功能,你也可能會(huì)決定,與EJB
CMT
相比,Spring框架的聲明式事務(wù)提供更多的功能和更高效的編程模型。通常,僅當(dāng)你的應(yīng)用程序需要處理跨多個(gè)資源的事務(wù)時(shí)才需要應(yīng)用程序服務(wù)器的
JTA
功能,而這并不是許多應(yīng)用程序所必需的。許多高端應(yīng)用程序使用單個(gè)高度可擴(kuò)展的數(shù)據(jù)庫(kù)(例如Oracle
RAC
)來(lái)代替。獨(dú)立事務(wù)管理器(例如Atomikos
Transactions
和JOTM
)是其他選擇。當(dāng)然,你可能需要其他應(yīng)用程序服務(wù)器功能,例如Java消息服務(wù)(JMS
)和Java EE連接器體系結(jié)構(gòu)(JCA
)。Spring框架使你可以選擇何時(shí)將應(yīng)用程序擴(kuò)展到完全加載的應(yīng)用程序服務(wù)器。不再使用
EJB
CMT
或JTA
的唯一選擇是使用本地事務(wù)(例如JDBC
連接上的事務(wù))編寫代碼,并且如果你需要將該代碼在全局的、容器管理的事務(wù)中運(yùn)行,則面臨大量的工作。使用Spring框架,僅需要更改配置文件中的某些Bean定義(而不是代碼)。
感謝各位的閱讀,以上就是“Spring框架的事物支持模型優(yōu)勢(shì)有哪些”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Spring框架的事物支持模型優(yōu)勢(shì)有哪些這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!