新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     >>W3CHINA.ORG讨论区<<     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Java, J2SE, J2ME, J2EE, 以及Eclipse, NetBeans, JBuilder等Java开发环境,还有JSP, JavaServlet, JavaBean, EJB以及struts, hibernate, spring, webwork2, Java 3D, JOGL等相关技术。
    [返回] W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL计算机技术与应用『 Java/Eclipse 』 → [合集] SessionBean中的事务处理 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 3772 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [合集] SessionBean中的事务处理 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     admin 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      头衔:W3China站长
      等级:计算机硕士学位(管理员)
      文章:5255
      积分:18406
      门派:W3CHINA.ORG
      注册:2003/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给admin发送一个短消息 把admin加入好友 查看admin的个人资料 搜索admin在『 Java/Eclipse 』的所有贴子 点击这里发送电邮给admin  访问admin的主页 引用回复这个贴子 回复这个贴子 查看admin的博客楼主
    发贴心情 [合集] SessionBean中的事务处理

    ● [合集] SessionBean中的事务处理发信人: diaochong (静静的雕虫~~小猪), 信区: J2EE
    标  题: [合集] SessionBean中的事务处理
    发信站: BBS 水木清华站 (Sat Apr 17 12:34:07 2004), 站内

    ☆─────────────────────────────────────☆  
      treeroot (徘徊) 于  (Thu Apr 15 16:26:36 2004)  提到:

    我要做的事连续插入好多纪录(如果出错就不做任何事情)
    for(.....)
      if(check(data)){
        insert(data);
      }
      else{}
    }

    我希望如果走了一次else就算事务失败,不知道该怎么办
    我在SessionBean中完成这个功能的

    如果使用容器管理事务的话:如何才能实现我要的功能



    ☆─────────────────────────────────────☆  
    petbear (雨中的人) 于  (Thu Apr 15 17:13:17 2004)  提到:

    最好是在check方法里抛出异常,然后捕获异常,在异常处理中connection。rollback()

    【 在 treeroot (徘徊) 的大作中提到: 】                                          
    : 我要做的事连续插入好多纪录(如果出错就不做任何事情)                          
    : for(.....)                                                                    
    :   if(check(data)){                                                           
    : ...................

      

    ☆─────────────────────────────────────☆  
      treeroot (徘徊) 于  (Thu Apr 15 17:30:07 2004)  提到:

    如果那样的话我直接在else里面rollback不就好了
    问题是容器管理事务的话,我直接抛出异常行不行?


    【 在 petbear (雨中的人) 的大作中提到: 】                                       
    : 最好是在check方法里抛出异常,然后捕获异常,在异常处理中connection。rollback(
    );                                                                            


    ☆─────────────────────────────────────☆  
    Romantics (汗水 态度 方法 机遇) 于  (Thu Apr 15 17:38:13 2004)  提到:

    ????
    不大懂

    不可以用break么?
    【 在 treeroot (徘徊) 的大作中提到: 】                                          
    : 我要做的事连续插入好多纪录(如果出错就不做任何事情)                          
    : for(.....)                                                                    
    :   if(check(data)){                                                           
    : ...................                                                           



    ☆─────────────────────────────────────☆  
    petbear (雨中的人) 于  (Thu Apr 15 17:41:44 2004)  提到:

    容器管理事务当然可以抛出应用程序异常,也可以抛系统异常
    应用程序异常直接抛给客户端

    【 在 treeroot (徘徊) 的大作中提到: 】                                          
    : 如果那样的话我直接在else里面rollback不就好了                                  
    : 问题是容器管理事务的话,我直接抛出异常行不行?                                  


    ☆─────────────────────────────────────☆  
    treeroot (徘徊) 于  (Thu Apr 15 17:45:41 2004)  提到:

    如果抛出异常了,是不是就算该方法失败?事务回滚?
    (前提是该方法有容器管理事务)


    【 在 petbear (雨中的人) 的大作中提到: 】                                       
    : 容器管理事务当然可以抛出应用程序异常,也可以抛系统异常                        
    : 应用程序异常直接抛给客户端                                                    


    ☆─────────────────────────────────────☆  
    petbear (雨中的人) 于  (Thu Apr 15 17:48:21 2004)  提到:

    如果抛出系统异常,事务自动回滚(容器管理),抛出应用程序异常,事务不会自动回滚,
    要自己处理

    【 在 treeroot (徘徊) 的大作中提到: 】                                          
    : 如果抛出异常了,是不是就算该方法失败?事务回滚?                                 
    : (前提是该方法有容器管理事务)                                                  


    ☆─────────────────────────────────────☆  
    treeroot (徘徊) 于  (Thu Apr 15 17:53:37 2004)  提到:

    自己处理?怎么处理呀?
    代码里根本就没有事务处理的部分,因为是通过部署文件描述事务处理的
    那怎样才算事务失败?


    【 在 petbear (雨中的人) 的大作中提到: 】                                       
    : 如果抛出系统异常,事务自动回滚(容器管理),抛出应用程序异常,事务不会自动回滚
    ,要自己处理                                                                    


    ☆─────────────────────────────────────☆  
    petbear (雨中的人) 于  (Thu Apr 15 18:17:41 2004)  提到:

    try{
    for(.....)
        insert(data);
    }
    }catch(Exception e){
       throw new EJBException(e);//捕获异常后抛出系统异常
    }

    在insert()中check(data),发现问题抛出应用程序相关异常

    试一试

    【 在 treeroot (徘徊) 的大作中提到: 】                                          
    : 自己处理?怎么处理呀?                                                          
    : 代码里根本就没有事务处理的部分,因为是通过部署文件描述事务处理的               
    : 那怎样才算事务失败?                                                           



    ☆─────────────────────────────────────☆  
    treeroot (徘徊) 于  (Thu Apr 15 18:29:32 2004)  提到:

    这倒是个好办法呀!谢谢

    【 在 petbear (雨中的人) 的大作中提到: 】                                       
    : 标  题: Re: SessionBean中的事务处理                                           
    : 发信站: BBS 水木清华站 (Thu Apr 15 18:17:41 2004)                             
    :
    : try{                                                                          
    : for(.....)
    :     insert(data);                                                             
    : }
    : }catch(Exception e){                                                          
    :    throw new EJBException(e);//捕获异常后抛出系统异常                         
    : }                                                                             
    :
    : 在insert()中check(data),发现问题抛出应用程序相关异常                          
    :
    : 试一试                                                                        
    :
    : 【 在 treeroot (徘徊) 的大作中提到: 】                                        
    : : 自己处理?怎么处理呀?                                                        
    : : 代码里根本就没有事务处理的部分,因为是通过部署文件描述事务处理的             
    : : 那怎样才算事务失败?                                                         
    :
    :
    :
    : --                                                                            
    :
    : ※ 来源:·BBS 水木清华站 http://smth.org·[FROM: 211.71.11.*]                 


    ☆─────────────────────────────────────☆  
    warning (李子) 于  (Thu Apr 15 21:23:23 2004)  提到:

    The bad way, I think.

    &quot;Exceptions are, as their name implies, to be used only
    for exceptional conditions; they should never be used for ordinary control
    flow.&quot;

    【 在 petbear (雨中的人) 的大作中提到: 】                                       
    : 最好是在check方法里抛出异常,然后捕获异常,在异常处理中connection。rollback(
    );                                                                            


    ☆─────────────────────────────────────☆  
       treeroot (徘徊) 于  (Thu Apr 15 21:40:58 2004)  提到:

    我看你不会变通,这个时候这种方法效率更高


    【 在 warning (李子) 的大作中提到: 】                                           
    : The bad way, I think.                                                         
    : &quot;Exceptions are, as their name implies, to be used only
    : for exceptional conditions; they should never be used for ordinary control    
    : ...................

    ☆─────────────────────────────────────☆  
    warning (李子) 于  (Thu Apr 15 22:23:52 2004)  提到:

    你的方法属于典型的滥用,而不是变通。
    check方法仅仅是check而已,不需要而且也没有必要在对象无效的时候抛出异常。
    我不知道你为什么不先检查一遍:
    int errCount = 0;
    for() {
        if (!check(obj)) {
           errCount++;
    break;
        }
    }
    if (errCount == 0) {
       for() {
           insert(obj);
       }
    }

    涉及到事务的是insert,而不是check,不应该把check牵扯进去。
    【 在 treeroot (徘徊) 的大作中提到: 】                                          
    : 我看你不会变通,这个时候这种方法效率更高                                      

    ☆─────────────────────────────────────☆  
    treeroot (徘徊) 于  (Thu Apr 15 22:40:04 2004)  提到:

    这个方法有一个缺陷,就是不能保证我要插入的数据中是否有重复的
    因为即时check成功了,但是如果要插入的数据重复事务还是要失败
    你这点我早就考虑过了


    【 在 warning (李子) 的大作中提到: 】                                           
    : 标  题: Re: SessionBean中的事务处理                                           
    : 发信站: BBS 水木清华站 (Thu Apr 15 22:23:52 2004)                             
    :
    : 你的方法属于典型的滥用,而不是变通。                                          
    : check方法仅仅是check而已,不需要而且也没有必要在对象无效的时候抛出异常。      
    : 我不知道你为什么不先检查一遍:                                                
    : int errCount = 0;                                                             
    : for() {                                                                       
    :     if (!check(obj)) {                                                        
    :        errCount++;                                                            
    :        break;
    :     }                                                                         
    : }                                                                             
    : if (errCount == 0) {                                                          
    :    for() {                                                                    
    :        insert(obj);                                                           
    :    }                                                                          
    : }                                                                             
    :
    : 涉及到事务的是insert,而不是check,不应该把check牵扯进去。                    
    :
    : 你那样把异常放在for循环里让JVM帮你检查并且rollback的方法是滥用异常和          
    : 滥用事务的典型,不但无端消耗JVM的资源,也无端消耗container的资源。            
    :
    : 【 在 treeroot (徘徊) 的大作中提到: 】                                        
    : : 我看你不会变通,这个时候这种方法效率更高                                    
    :
    :
    :
    : --                                                                            
    : 少说话,多做事                                                                
    :
    :
    : ※ 来源:·BBS 水木清华站 http://smth.org·[FROM: 221.216.137.*]               


    ☆─────────────────────────────────────☆  
       treeroot (徘徊) 于  (Thu Apr 15 22:45:28 2004)  提到:

    如果要用容器管理的事务,让事务回滚只有抛出系统异常
    因为我要是从文件读取数据,如果按你的方法得读取文件流两次
    这点倒不是属于滥用了,如果检查错误的话就不用两次(很值得)
    问题时出错机会很少,但是又不能少。
    如果Bean管理事务的话,应该就更灵活一点,可以自己RollBack。
    不过你的方法还是有一定的好处的,如果错误机会比较大的话,效率会特别好。



    【 在 warning (李子) 的大作中提到: 】                                           
    : 你的方法属于典型的滥用,而不是变通。                                          
    : check方法仅仅是check而已,不需要而且也没有必要在对象无效的时候抛出异常。      
    : 我不知道你为什么不先检查一遍:                                                
    : ...................

    ☆─────────────────────────────────────☆  
    warning (李子) 于  (Thu Apr 15 22:58:33 2004)  提到:

    我的想法是在insert方法里抛出异常,如果把insert里的操作看成是真正的
    事务的话
    但我的方法确实有问题,即没有考虑到细粒度的资源变化,还有就是你所说
    的数据源如果是昂贵的不可回滚或者不便回滚的资源也会出现问题。

    只是一种想法吧,因为楼主好象也只是需要一种想法。

    缺乏足够的经验,我的想法也仅仅是参考而已。


    【 在 treeroot (徘徊) 的大作中提到: 】                                          
    : 如果要用容器管理的事务,让事务回滚只有抛出系统异常                            
    : 因为我要是从文件读取数据,如果按你的方法得读取文件流两次                      
    : 这点倒不是属于滥用了,如果检查错误的话就不用两次(很值得)                    
    : ...................                                                           

    ☆─────────────────────────────────────☆  
    petbear (雨中的人) 于  (Thu Apr 15 23:04:19 2004)  提到:


    对于事务处理中启动和结束事务,一个很自然的反应就是抛出异常,让容器去处理。简单高
    效(自己用JTA写不见到好到哪去),何乐不为?
    很多时候
    抛出异常比返回false去判断这种方式代码也更加清晰,良好编程方式。


    【 在 warning (李子) 的大作中提到: 】                                           
    : 你的方法属于典型的滥用,而不是变通。                                          
    : check方法仅仅是check而已,不需要而且也没有必要在对象无效的时候抛出异常。      
    : 我不知道你为什么不先检查一遍:                                                
    : ...................


    索引页面|上一篇|下一篇


       收藏   分享  
    顶(0)
      




    ----------------------------------------------

    -----------------------------------------------

    第十二章第一节《用ROR创建面向资源的服务》
    第十二章第二节《用Restlet创建面向资源的服务》
    第三章《REST式服务有什么不同》
    InfoQ SOA首席编辑胡键评《RESTful Web Services中文版》
    [InfoQ文章]解答有关REST的十点疑惑

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/9/23 0:40:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Java/Eclipse 』的所有贴子 点击这里发送电邮给Google AdSense  访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/20 18:59:10

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    5,218.750ms