立志做一个佳娃~ 2008-07-10 23:34 采纳率: 0%
浏览 223
已采纳

使用纯的JDBC+SERVLET的数据库事务的问题

http://topic.csdn.net/u/20080705/18/d894b5e5-8b7b-4560-af16-e4b9d8405681.html
这是我在CSDN的发贴的地址

现在的问题,

如何像SSH整合开发一样,事务把struts的action包围 了,action中调用某一SERVICE层出错,整个ACTION中的代码进行回滚,那是有SSH的情况,使用了SPRING的AOP

如果使用纯的JDBC呢、、如何将事务把SERVLET包围 起来,,
知道这里高手多,感谢大家!

CSDN贴中有的高手说使用FILTER来进行开发,有没有相关的例程,我并不太了解如何用FILTER开发,感谢

  • 写回答

5条回答 默认 最新

  • lggegegmail 2008-07-11 00:13
    关注

    事务: 说白了就是在一个connection里面做了一堆的事情, 在特定的时间点 [完成,异常] 进行提交或回滚.

    所以, 无论是否Spring的TransactionManager还是自己的Servlet上的事务控制, 都是基于在一个事务单元内的一个connection上的, 所以, 你要将connection绑定在一个ThreadLocal上, 让里面所有的jdbc操作使用这个connection就好, 在Servlet的所有jdbc操作完成后, 再进行显示的commit 或 rollback.

    下面的代码随手写的, 只是用于说明问题.
    [code="java"]
    SessionConnectionUtil {

    static ThreadLocal holder = new ThreadLocal();

    public static getConnection() {
    if (holder.get() == null) {
    holder.sut(new Connection());
    }
    return (Connection) holder.get();
    }

    public static closeConnection() {
    holder.set(null);
    }

    }

    CustomServlet extends HttpServlet {
    CustomDao dao;
    service() {
    try {
    dao.doSomething();

        SessionConnectionUtil.getConnection().commit();
    } catch (Exception e) {
            SessionConnectionUtil.getConnection().rollback();
    } finally {
        SessionConnectionUtil.closeConnection();
    }
    

    }
    }

    CustomDao {
    doSomething() {
    Connection connection = SessionConnectionUtil.getConnection();
    ...
    }
    }[/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn