论坛首页 Java版 Spring

基于dwr+spring架构的事务控制难题!!!

浏览 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 );
我想应该是可以提交事务的。但是现实却不成功。
   
最后更新时间:2007-10-25
你這種情況下或許似乎可以另外寫一個method去invoke這兩個method啊,同時需要注意這個事務的擴散性哦,
   
0 请登录后投票
最后更新时间:2007-10-25
但是情况是  我这两个方法  在前台是通过dwr 分两次调用的啊。不能在用一个方法进行封装的啊
   
0 请登录后投票
最后更新时间:2007-10-26
你的做法是不行的
第一次调用后离开了Spring的作用域,事务要么自动提交,要么超时回滚;然后第二次调用会启动一个新的事务
就我所知,要实现你的想法需要分布式事务支持,而Spring是不支持的
   
0 请登录后投票
最后更新时间:2007-10-26
你这个需要SFSB支持
或许你根本不需要保证这一系列操作的事务性
   
0 请登录后投票
最后更新时间:2007-10-26
那就不要用事务了。在插入子项信息的时候检查基本信息有没有插入。
   
0 请登录后投票
最后更新时间:2007-10-29
能不能尝试用session记录下操作,在第二次连接时取出前一次操作信息,一起提交?
   
0 请登录后投票
最后更新时间:2007-10-30
1. 首先应该确定你的DWR工作正常
2. 明确事务边界,事务应该在一个业务处理流程(一个业务方法)结束后即完成;
   一般情况下,你DWR每次调用映射的服务端方法是作为单个事务封装的
   如果认为两个客户端DWR操作必须在一个事务边界内,那么应该在客户端暂存你的单步操作结果(js很容易进行这样的中间处理),最后一并由一个DWR调用服务端完成。
   如果两个DWR没有必要确保数据一致性,或者可以在事后修正,那么就可以单独操作。

从你的情况看,似乎没有必要塞到一个事务里面做,否则,子项添加如果发生失败,(比如数据验证问题),你预先建立的父项也就不存在了。父项添加作为一次事务,多个子项添加作为第二个事务,这样比较合理。
   
0 请登录后投票
论坛首页 Java版 Spring

跳转论坛:
JavaEye推荐