站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题跨页面的事务问题

跨页面的事务问题

摘要: 跨页面的事务问题


a ,b read data, then a modify and commit, b also modify and commit, an error should be thrown out!
也就是说read和update要放在一个事务中。但是如果在多个jsp之间中如何做呢?
难道要把事务的应用放到session中吗?


这种情况,可以用数据库的事务来进行控制


前面的不要做数据库的相关操作,等最后一个页面再去操作数据库,要不连接时间太长了


read不需要事务控制,只有update和insert才需要~


如果仅仅是数据库事务的话
java提供的有相应的回滚点、自动提交等等设置;
要是还牵扯到具体的业务逻辑
那你就自己写相应的代码来处理了~


miaoliujun(傲龙) "前面的不要做数据库的相关操作,等最后一个页面再去操作数据库,要不连接时间太长了"

这也是一般的做法,但是这样代码过于集中到最后一个页面。而且最后的页面可能还要重读数据:
tx.begin;
read data;
modify data;
updata data;
tx.commit;

emin_lee() 说read不要事务,感觉不对,因为modify时的数据可能已经过时了。

infowain(infowain) :数据库的事务?如何做呢?


楼主理解错这句话的意思了,

a ,b read data, then a modify and commit, b also modify and commit, an error should be thrown out!


我的理解是,a和b不能放在同一个transaction中,如果这样的话,a修改了一个数据然后提交,b又修改了同一数据然后提交,那么transaction commit后,数据库究竟要接受a修改的值还是b修改的值呢? 矛盾就在这里。你把a和b放在两个不同的transaction中就行了。




看来我英语写的不是很准确。用中文描述下:
a,b是两个不同的用户,读入同一条数据,然后修改数据、提交(所有过程都在浏览器上进行)。假设a先提交,那么b提交时,应该要报错,如何实现这种效果?


哪位有经验呢?


参考Hibernate的version,就是表中一个字段version,每次update时更新,这样你要防止这种丢失修改的问题就只需在update语句中加一个where检查,如果发现version不对就throw exception 就行了


这个问题是所有WEB程序都会遇见的问题,一般情况下这种问题可以被忽略。如果十分在意的话,解决的办法应该这样子比较稳妥:
when b is ready to modify the data which has been commited by another user a in UI, b should first check the data in DB whether it is what he retrieved before, if not, throws an exception.


↑返回目录
前一篇: 怎么用nested:iterate显示Action里面查询到的数据?
后一篇: 小弟弟我是初学,关于方法的添加