没有合适的资源?快使用搜索试试~ 我知道了~
对于Transaction 管理 为了实现数据一致性,对于数据库的JDBC编程通常需要在代码中显示的调用Connection方法的事务相关API来完成工作。
资源推荐
资源详情
资源评论
概述:
为了学习事务的管理,实现了如下的一个简单版本的事务管理器,进行实验。该管理器简
化了事务管理的各种异常类型的考虑。
对于 Transaction 管理)
为了实现数据一致性,对于数据库的 JDBC 编程通常需要在代码中显示的调用 Connection
方法的事务相关 API 来完成工作。
常见的代码如下:)
1. publicvoiddoService(){
2. Connectionconnection=getConnection();
3. connection.setTransactionIsolation(
4. Connection.TRANSACTION_READ_COMMITTED);
5. try{
6. doBusinessLogic(connection);
7. connection.commit();
8. }catch(Exceptione){
9. connection.rollback();
10. }finally{
11. connection.close();
12. }
13. }
在以上的代码中与业务逻辑相关的代码只有一行,)为了简化事务的操作,实现一个简单的
事务管理控制。主要提供以下方面的统一控制。
1.使用回调机制简化事务处理的代码
2.增加对事务隔离级别的支持
3.增加事务 Timeout 的管理,最简单的实现。尽早发现长事务的操作。
4.对于 savepoint 的支持
5.实现一种事务传播控制。如果当前存在事务,就加入该事务中执行,如果没有新建事
务,放到事务中实现。
实现了该事务控制管理器后,将 Service 的代码得到如下的简化:)
1. privateServiceservice;
2. privateDaodao;
3. privateTransactionTemplatetransactionTemplate;
4. publicvoidservice(finalObjectobj){
5. this.trTemplate.executeTransaction(newTransactionCallback(){
6. publicObjectdoTransactionEvent(){
7. service.doService();
8. transactionTemplate.addSavePoint("savepoint1",exception1);
9. dao.saveMethod1(obj);
10. transactionTemplate.addSavePoint("savepoint2",exception2);
11. dao.saveMethod2(obj);
12. }
13. });
14. }
1. 回调的实现)
定义模板类 TransactionTemplate
其主要的方法就是提供模板方法对事务处理的代码进行控制:
2. publicclassTransactionTemplate{
3.
4. privateTransactionManagertrManager;
5.
6. //thetimeoutmonitorisusedtofindoutalllongtimetransactioni
nadvance.
7. privatebooleanuseTimeoutMonitor=Boolean.TRUE;
8. privateLongmaxTime=Long.valueOf(2);
9.
10. publicvoidaddSavePoint(StringsavePointName,ExceptionrollbackExce
ption){
11. this.trManager.addSavePoint(savePointName,rollbackException);
12. }
13.
14. publicvoidexecuteTransaction(
15. TransactionCallbacktransactionCallback,intisolationLevel){
16. longstartTime=System.currentTimeMillis();
17. Transactiontransaction=null;
18. try{
19. transaction=trManager.beginTransaction();
20. checkTimeout(startTime);
21. transaction.setTransactionIsolationLevel(isolationLevel);
22. transactionCallback.doTransactionEvent();
23. checkTimeout(startTime);
24. trManager.commitTransaction(transaction);
25. }catch(Exceptione){
26. trManager.rollbackTransaction(transaction,e);
27.
28. }finally{
29. trManager.closeTransaction(transaction);
30. }
31.
32. }
33.
34. /**
35. *Ifthetransactionistimeoutthrowatransactiontimeoutexcepti
on.
36. */
37. privatevoidcheckTimeout(longstartTime){
38. if(this.useTimeoutMonitor){
39. if(isTimeout(startTime)){
40. thrownewTransactionTimeoutException();
41. }
42. }
43. }
44.
45. privatebooleanisTimeout(longstartTime){
46. returnSystem.currentTimeMillis()-startTime>this.maxTime;
47. }
48.
49. publicvoidexecuteTransaction(TransactionCallbacktransactionCallbac
k){
50. this.executeTransaction(transactionCallback,Transaction.DEFAULT_
ISOLATION_LEVEL);
51.
52. }
53.
54. publicLonggetMaxTime(){
55. returnmaxTime;
56. }
57.
58. publicvoidsetMaxTime(LongmaxTime){
59. this.maxTime=maxTime;
60. }
61.
62. }
2.)回调接口的定义非常的简单:)
1. publicinterfaceTransactionCallback{
2. publicObjectdoTransactionEvent();
3. }
3.)重点 Transaction 类的实现,管理了 Connection 对象,事务隔离级别的定义,事务的
savepoint 控制点,以及对于事务状态的控制。
1. publicclassTransaction{
2. publicstaticfinalintREAD_UNCOMMITTED=Connection.TRANSACTION_R
EAD_UNCOMMITTED;
3. publicstaticfinalintREAD_COMMITTED=Connection.TRANSACTION_REA
D_COMMITTED;
4. publicstaticfinalintREPEATALB_READ=Connection.TRANSACTION_REP
EATABLE_READ;
5. publicstaticfinalintSERIALIZE=Connection.TRANSACTION_SERIALIZ
ABLE;
剩余10页未读,继续阅读
资源评论
yuwju
- 粉丝: 0
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功