JDBC事务管理

本文探讨了在自定义项目中实现事务管理的难题,包括确保同一事务方法中的所有DAO使用相同连接及处理嵌套事务等问题。作者提出了初步解决方案,并寻求社区的意见。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好吧,我承认,我蛋疼了。真的很疼很疼。。。。。公司的项目不许用ssh,也不许用ssi...

  1>好吧。。action写个调度还是比较easy的..用了三天把调度了,采用的是struts2的思想,一个reuquest一个实例,不过没有为action产生代理。。这个我想也没啥好蛋疼的。。

  2> 连结池采用的是c3po,自己写连接池管理器。。

  3> 也就是今天碰到的问题:事务.....

  加事务啊。。。。在service控制事务。。。目前蛋疼中....

  问题:   
  1。如何保证同一个事务方法中所有dao 用的是同一个connection??
  2。保证嵌套事务?????

  其它问题。。。暂时未知ing.......

  目前想法:  
1: 用事务的方法第一行,开启事务。。。ThreadLocal保存开启事务后的connection..然后将ThreadLocal,放到context中(缓存中)..在各个dao里面,直接从context中获取connection....不知道可不可行??是个大大的XXXXX
2> 用一个count来记录事务的层数? 每嵌套一层+1. 提交一次-1 最后为0时,就connection.commit()????


求大牛指点。。。。

 

------------------------------------------------------------------------------------------

 

你要实现这个功能可没那么简单啊,如果是类似于 REQUIRED 的还好弄一些,要弄 REQUIES_NEW 的就非常复杂了!

你要做的这个不要说是你的应用了,就算是 J2EE 应用服务器这种东西的实现也是有优劣的。

在 ThreadLocal 绑定 Connection,在 DAO 中从 ThreadLocal 中获得 Connection

使用动态代理,将业务逻辑方法代理,在代理中获得 Connection 并置于 ThreadLocal 中,并在代理中处理事务,这样的话这一业务逻辑调用所有的 DAO 方法均纳入到了一个事务之中。

楼主提的问题是 J2EE 设计模式之一——事务上下文模式

下面这些帖子有同样的问题,可以参考一下:

jdbc如何实现事务处理?(例如先进行读取在进行修改能在一个事务里)
http://topic.youkuaiyun.com/u/20090323/17/29237aab-ee3e-4e16-b9c4-53856425022c.html

请教一下,在纯的JDBC中,如何项目采用分层了DAO层,服务层和SERVLET控制层,,那么怎么在servlet中启用JDBC的事务?
http://topic.youkuaiyun.com/u/20080705/18/d894b5e5-8b7b-4560-af16-e4b9d8405681.html

将connection存放在Threadlocal里和数据库连接池的区别
http://topic.youkuaiyun.com/u/20080731/22/9af1fa06-2c82-4790-bee0-0274a66f3ae9.html

大家来讨论下业务层(BO)该做什么事?该怎样做事?
http://topic.youkuaiyun.com/u/20090528/21/160f4629-8985-4a05-89ed-7b4bdcf9bb0f.html

多个线程共享一个connection的问题
http://topic.youkuaiyun.com/u/20071128/12/6f085b57-a1b5-4100-a036-f43ef5ab3f8c.html

这里还有一个帖子,虽然涉及 JPA 的,但在 J2SE 环境下 JPA 与 JDBC 没啥区别:

EJB3之JPA程序结构,完美的异常处理
http://topic.youkuaiyun.com/u/20090829/20/6e73877e-af46-4f98-9fce-f574495b550c.html

声明一下,我不认同这位帖主的做法(其采用 Runnable 接口),不过可以借鉴一下,作为一种思路也行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值