浏览 1283 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-10-25 关键字: 基于dwr+spring架构的事务控制难题!!!
我在后台业务逻辑类中有两个方法,其中一个方法中插入基本信息,另外一个方法中中插入子项信息 ,这些操作都是通过前台DWR直接掉后台相应的方法完成,但是现实情况是不能把这两个方法整合为一个方法,而且插入子项是多次操作 ,就是有DWR直接调后台插入子项方法. 因此插入基本信息和子项信息是分两次DWR请求进行的。现在我想通过spring的编程事务来进行。但是始终不成功 。
如在基本信息插入方法中开始定义为: ds=jdbcTemplate.getDataSource( ); //事务管理器,使用Spring的DataSource事务管理器 tm=new DataSourceTransactionManager(ds); td = new DefaultTransactionDefinition( TransactionDefinition.PROPAGATION_REQUIRED); //开启一个Spring JDBC事务,保存事务Status对象到ThreadLocal status=tm.getTransaction(td); 后面就是利用jdbcTemplate.update 这些方法进行插入操作 在用户填写基本信息后,点确定按钮通过DWR执行上面的方法,不自动提交。 在用户关闭界面时 前台页面通过DWR调用后台的另外一个方法进行事务提交: status=tm.getTransaction( td ); tm.commit( status ); 我想应该是可以提交事务的。但是现实却不成功。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-10-25
你這種情況下或許似乎可以另外寫一個method去invoke這兩個method啊,同時需要注意這個事務的擴散性哦,
|
|
| 返回顶楼 | |
|
最后更新时间:2007-10-25
但是情况是 我这两个方法 在前台是通过dwr 分两次调用的啊。不能在用一个方法进行封装的啊
|
|
| 返回顶楼 | |
|
最后更新时间:2007-10-26
你的做法是不行的
第一次调用后离开了Spring的作用域,事务要么自动提交,要么超时回滚;然后第二次调用会启动一个新的事务 就我所知,要实现你的想法需要分布式事务支持,而Spring是不支持的 |
|
| 返回顶楼 | |
|
最后更新时间:2007-10-26
你这个需要SFSB支持
或许你根本不需要保证这一系列操作的事务性 |
|
| 返回顶楼 | |
|
最后更新时间:2007-10-26
那就不要用事务了。在插入子项信息的时候检查基本信息有没有插入。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-10-29
能不能尝试用session记录下操作,在第二次连接时取出前一次操作信息,一起提交?
|
|
| 返回顶楼 | |
|
最后更新时间:2007-10-30
1. 首先应该确定你的DWR工作正常
2. 明确事务边界,事务应该在一个业务处理流程(一个业务方法)结束后即完成; 一般情况下,你DWR每次调用映射的服务端方法是作为单个事务封装的 如果认为两个客户端DWR操作必须在一个事务边界内,那么应该在客户端暂存你的单步操作结果(js很容易进行这样的中间处理),最后一并由一个DWR调用服务端完成。 如果两个DWR没有必要确保数据一致性,或者可以在事后修正,那么就可以单独操作。 从你的情况看,似乎没有必要塞到一个事务里面做,否则,子项添加如果发生失败,(比如数据验证问题),你预先建立的父项也就不存在了。父项添加作为一次事务,多个子项添加作为第二个事务,这样比较合理。 |
|
| 返回顶楼 | |










