立志做一个佳娃~ 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条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?