我用的是weblogic。我记得以前用jboss。不用什么设置的。默认的是可以回滚的。现在不知为什么不可以了。用的是容器管理事务。required。

解决方案 »

  1.   

    你的事务属性是容器管理吧,
    在方法开始的时候,添加    sessionContext.setRollbackOnly();
    这样的话遇见异常的时候容器会自动回滚事务
      

  2.   

    方法开始的时候?好像开始的时候加入这句话就会抛出错误。sessionbean的其他方法就进行不下去了。
      

  3.   

    不能添加到方法开始,应该放在
    catch(xxx){
     ......sessionContext.setRollbackOnly();
    }
      

  4.   

    不是很明白你的情况,
    Ejb要用好,还是挺麻烦的。
      

  5.   

    是不是weblogic设置ejb事务的时候有什么特殊的要求?
      

  6.   

    我用的是bmp,和这个有关系嘛?
      

  7.   

    lihongwansui(苍茫云海) 的思路是对的,你得详细说出配置,以及相关代码。
      

  8.   

    TO  shendi(迪迪) :
    BMP的事务管理能交给容器管理吗?
      

  9.   

    我也怀疑这个。不过好像从配置文件看应该可以德。都是CMT(容器管理事务)。BMT应该没有require,require new之分吧。
      

  10.   

    没人搞过这个嘛?到底bmp可是使用sessionbean中的容器管理事务嘛?
      

  11.   

    对于CMT你有两种选择,发现异常后抛EJBException给容器,让容器回滚
    或者sessionContext.setRollbackOnly();
      

  12.   

    这应该没有问题的。我在entitybean中是抛的EJBException。不过sessionbean中的事务还是没有用。我是在sessionbean中操作bmp的。总共操作3个entitybean。在操作第二个bean的时候出错。现在的问题就是sesskonbean的CMT没有效果。事务没有回滚。第一个bean的数据库居然生效了。我现在怀疑bmp是否可以使用sessionbean中的容器管理事务。
      

  13.   

    检查你3个bmp entity bean和session bean的transaction attribute是required.有可能你没有吧他们放到一个事物里
      

  14.   

    你用的JDBC的驱动不支持TX,换个TX的驱动吧
      

  15.   

    谢谢楼上的。好像是这个问题了。我datascource没有用txdatascource