JDBC事务管理

好吧,我承认,我蛋疼了。真的很疼很疼。。。。。公司的项目不许用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.csdn.net/u/20090323/17/29237aab-ee3e-4e16-b9c4-53856425022c.html

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

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

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

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

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

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

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

你可能感兴趣的:(jdbc)