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

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

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

開(kāi)通VIP
事務(wù)管理 Transaction Management
一、事務(wù)

事務(wù)是一個(gè)非常重要的編程概念,使用事務(wù),可以很簡(jiǎn)單地構造出可靠穩定的應用程序,尤其對那些需要進(jìn)行并發(fā)數據訪(fǎng)問(wèn)的應用程序,事務(wù)更是重要的多。
 
使用事務(wù),便可以利用事務(wù)的四個(gè)重要屬性:ACID。

* 原子性( atomic):事務(wù)中包含的各項操作必須全部成功執行或者全部不執行。任何一項操作失敗,將導致整個(gè)事務(wù)失敗,其他已經(jīng)執行的任務(wù)所作的數據操作都將被撤銷(xiāo),只有所有的操作全部成功,整個(gè)事務(wù)才算是成功完成。

* 一致性( consistent):保證了當事務(wù)結束后,系統狀態(tài)是一致的。那么什么是一致的系統狀態(tài)?例如,如果銀行始終遵循著(zhù)"銀行賬號必須保持正態(tài)平衡"的原則,那么銀行系統的狀態(tài)就是一致的。上面的轉賬例子中,在取錢(qián)的過(guò)程中,賬戶(hù)會(huì )出現負態(tài)平衡,在事務(wù)結束之后,系統又回到一致的狀態(tài)。這樣,系統的狀態(tài)對于客戶(hù)來(lái)說(shuō),始終是一致的。

* 隔離性( isolated):使得并發(fā)執行的事務(wù),彼此無(wú)法看到對方的中間狀態(tài)。保證了并發(fā)執行的事務(wù)順序執行,而不會(huì )導致系統狀態(tài)不一致。

* 持久性( durable):保證了事務(wù)完成后所作的改動(dòng)都會(huì )被持久化,即使是發(fā)生災難性的失敗??苫謴托再Y源保存了一份事務(wù)日志,如果資源發(fā)生故障,可以通過(guò)日志來(lái)將數據重建起來(lái)。

二、事務(wù)界定

兩種事務(wù)界定的模型
* 聲明式事務(wù)界定
* 編程式事務(wù)界定

三、設計DAO時(shí)需要考慮的問(wèn)題

* 事務(wù)要如何開(kāi)始?
* 事務(wù)應如何結束?
* 哪一個(gè)對象將負責開(kāi)始一個(gè)事務(wù)?
* 哪一個(gè)對象將負責結束一個(gè)事務(wù)?
* DAO是否要負責事務(wù)的開(kāi)始和結束?
* 應用程序是否需要通過(guò)多個(gè)DAO訪(fǎng)問(wèn)數據?
* 事務(wù)涉及到一個(gè)DAO還是多個(gè)DAO?
* 一個(gè)DAO是否調用另一個(gè)DA 的方法?

了解上述問(wèn)題的答案將有助于選擇最適合的DAO的事務(wù)界定策略。在DAO中有兩種主要的界定事務(wù)的策略。一種方式是讓DAO負責界定事務(wù),另一種將事務(wù)界定交給調用這個(gè)DAO方法的對象處理。

如果選擇了前一種方式,那么就將事務(wù)代碼嵌入到DAO中。如果選擇后一種方式,那么事務(wù)界定代碼就是在DAO類(lèi)外面。對于需要在一個(gè)事務(wù)中訪(fǎng)問(wèn)多個(gè)DAO的應用程序應該使用第二中策略。


四、事務(wù)界定兩種實(shí)現方式

JTA事務(wù)和JDBC事務(wù)

1.JTA事務(wù)
JTA是一種不受實(shí)施限制的高層協(xié)議API,該協(xié)議API使應用程序和應用服務(wù)器可以訪(fǎng)問(wèn)事務(wù)。JTA屬于全局事務(wù),由應用服務(wù)器管理(Tomcat需要結合JOTM(Java Open Transaction Manager)來(lái)支持事務(wù)),使用JTA的同時(shí)需要使用JNDI。

JTA及其同門(mén)兄弟JTS為 J2EE 平臺提供了分布式事務(wù)服務(wù)。一個(gè)分布式的事務(wù)涉及一個(gè)事務(wù)管理器和一個(gè)或者多個(gè)資源管理器。一個(gè)資源管理器是任何類(lèi)型的持久性的數據存儲。事務(wù)管理器負責協(xié)調所有事務(wù)參與者之間的通信。

 JTA事務(wù)比JDBC事務(wù)功能更強。JDBC事務(wù)局限為一個(gè)數據庫連接,而JTA事務(wù)可以有多個(gè)參與者。所有下列Java平臺組件都可以參與JTA事務(wù):
 * JDBC 連接
 * JDO PersistenceManager 對象
* JMS 隊列
 * JMS 主題
 * 企業(yè) JavaBeans
 * 符合 J2EE 連接體系結構(J2EE Connector Architecture)規范的資源適配器
 
 要用JTA進(jìn)行事務(wù)界定,應用程序要調用javax.transaction.UserTransaction接口中的方法: 
 * public void begin()
 * public void commit()
 * public void rollback()
 * public int getStatus()
 * public void setRollbackOnly()
 * public void setTransactionTimeout(int)

 [代碼示例:JTA進(jìn)行事務(wù)界定] 
 import javax.transaction.*;
 import javax.naming.*;
 // ...
 InitialContext ctx = new InitialContext();
 Object txObj = ctx.lookup("java:comp/UserTransaction");
 UserTransaction utx = (UserTransaction) txObj;

 utx.begin();
// ...
DataSource ds = obtainXADataSource();
Connection conn = ds.getConnection();
pstmt = conn.prepareStatement("Update MOVIES ...");
pstmt.setString(1, "Spinal Tap");
pstmt.executeUpdate();
// ...
utx.commit();
// ...
 [/代碼示例]

 
2.JDBC事務(wù)
JDBC事務(wù)受數據庫的事務(wù)管理器控制。JDBC事務(wù)屬于本地事務(wù),它容易使用,但是存在缺點(diǎn):它們不能用于多個(gè)事務(wù)性資源,也就是事務(wù)的范圍局限于一個(gè)數據庫連接,一個(gè)JDBC事務(wù)不能跨越多個(gè)數據庫。另一個(gè)缺點(diǎn)是局部事務(wù)趨向于入侵式的編程模式。

JDBC事務(wù)是用Connection對象控制的。JDBC Connection接口( java.sql.Connection )提供了兩種事務(wù)模式:自動(dòng)提交和手工提交。java.sql.Connection 提供了以下控制事務(wù)的方法:
 * public void setAutoCommit(boolean)
* public boolean getAutoCommit()
 * public void commit()
 * public void rollback()

[代碼示例:用JDBC API進(jìn)行事務(wù)界定]
import java.sql.*;
import javax.sql.*;

// ...
DataSource ds = obtainDataSource();
Connection conn = ds.getConnection();
conn.setAutoCommit(false);
// ...
pstmt = conn.prepareStatement("Update MOVIES ...");
pstmt.setString(1, "The Great Escape");
pstmt.executeUpdate();
// ...
conn.commit();
// ...
[/代碼示例]


JDBC支持的四種事務(wù)隔離模式(transaction isolation mode)。

3.JTA和JDBC
用JTA界定事務(wù),那么就需要有一個(gè)實(shí)現javax.sql.XADataSource、javax.sql.XAConnection和javax.sql.XAResource接口的JDBC驅動(dòng)程序。一個(gè)實(shí)現了這些接口的驅動(dòng)程序將可以參與JTA事務(wù)。一個(gè)XADataSource對象就是一個(gè)XAConnection對象的工廠(chǎng)。XAConnections是參與JTA事務(wù)的JDBC連接。

并需要用應用服務(wù)器的管理工具設置XADataSource。J2EE應用程序用JNDI查詢(xún)數據源。一旦應用程序找到了數據源對象,它就調用javax.sql.DataSource.getConnection()以獲得到數據庫的連接。
 
XA連接與非XA連接不同。一定要記住XA連接參與了JTA事務(wù)。這意味著(zhù)XA連接不支持JDBC的自動(dòng)提交功能。同時(shí),應用程序一定不要對XA連接調用java.sql.Connection.commit()或者java.sql.Connection.rollback()。相反,應用程序應該使用 UserTransaction.begin()、UserTransaction.commit()和UserTransaction.rollback() 。

三、Spring、Hibernate和iBatis

這三個(gè)框架都有通過(guò)JDBC事務(wù)界定的方式實(shí)現事務(wù)管理。但相比之下,Spring在事務(wù)管理方面是其中最成熟的。

1.Spring
Spring Framework實(shí)際上是Expert One-on-One J2EE Design and Development一書(shū)中所闡述的設計思想的具體實(shí)現。
Spring Framework的功能非常多。包含AOP、ORM、DAO、Context、Web、MVC等幾個(gè)部分組成。但其中最需要用的是AOP、ORM、Context。Context中,最重要的是Beanfactory,它能將接口與實(shí)現分開(kāi),非常強大。前AOP應用最成熟的還是在事務(wù)管理上。

2.Hibernate
 Spring框架已經(jīng)提供了對Hibernate框架的良好支持,因此不再需要再頭痛于Hibernate的session管理,事務(wù)管理等方面,這些Spring框架已經(jīng)進(jìn)行了很好的封裝。

3.ibatis
 ibatis不熟悉,如果你對ibatis的事務(wù)管理比較熟悉,請告訴我<yejienihao@hotmail.com>如何ibatis的實(shí)現方式:)

四、推薦閱讀

事務(wù)管理最佳實(shí)踐全面解析
http://dev.csdn.net/author/shendl/7098537bcd8b436197cd7e959936a911.html

事務(wù)管理最佳實(shí)踐多余的話(huà)之一
http://dev.csdn.net/author/shendl/4fe0df2717bd47d8b73b31a16f38d1bb.html

事務(wù)管理最佳實(shí)踐多余的話(huà)之二
http://dev.csdn.net/author/shendl/7fc1c42ab0a6433eab061943bb380dcf.html 

事務(wù)管理最佳實(shí)踐多余的話(huà)之三
http://dev.csdn.net/author/shendl/f4f97546410a4653949ba8ae837c4383.html

集成 Hibernate,Spring,Struts Portlet 框架構建Portlet應用
http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/guorui/

基于struts+spring+ibatis的輕量級J2EE開(kāi)發(fā)
http://www-128.ibm.com/developerworks/cn/java/j-s-s-i/

在Jstl+Spring+ibatis開(kāi)發(fā)中應用事務(wù)管理經(jīng)驗總結
http://blog.donews.com/yarak/archive/2006/04/25/845534.aspx


[附錄1:參考文獻]

使用Enterprise Bean處理事務(wù),
http://gceclub.sun.com.cn/staticcontent/html/sunone/app7/app7-dg-ejb/detrans.html
----
事務(wù)服務(wù)淺析
http://www-128.ibm.com/developerworks/cn/java/l-transation/part1/
http://www-128.ibm.com/developerworks/cn/java/l-transation/part2/
----
高級DAO編程
http://www-128.ibm.com/developerworks/cn/java/j-dao/
----
基于JDBC的數據庫連接池高效管理策略
http://www-128.ibm.com/developerworks/cn/java/l-jdbcperform/
----
Spring 事務(wù)管理
http://www.jactiongroup.net/reference2/html/transaction.html
----
分析Hibernate的事務(wù)處理機制
http://www.yesky.com/255/1922255.shtml
----
集成 Hibernate,Spring,Struts Portlet 框架構建Portlet應用
http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/guorui/
----
基于struts+spring+ibatis的輕量級J2EE開(kāi)發(fā)
http://www-128.ibm.com/developerworks/cn/java/j-s-s-i/
----
在Jstl+Spring+ibatis開(kāi)發(fā)中應用事務(wù)管理經(jīng)驗總結
http://blog.donews.com/yarak/archive/2006/04/25/845534.aspx
----
How to use JDBC and transactions in Tomcat with JOTM
http://jotm.objectweb.org/current/jotm/doc/howto-tomcat-jotm.html


[附錄2:縮寫(xiě)列表]
DAO - Data Access Object
JTA - Java Transaction API
JTS - Java Transaction Service (Java事務(wù)服務(wù))
JDBC - Java Database Connectivity
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
高級 DAO 編程
Java數據訪(fǎng)問(wèn)對象(DAO)編程模入門(mén)
Java中的事務(wù)
java sql 關(guān)于事務(wù)操作的簡(jiǎn)介
JTA初級研究之JTA和JDBC事務(wù)
Java事務(wù)處理總結
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

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