不明白
u.setAutoCommit(false)
while{
  ...
  u.commit();
}
u.setAutoCommit(true);

解决方案 »

  1.   

    哥们,上次回答错了,不好意思
    这次咱们一起来讨论这问题吧
    我没有采用BEAN的事物属性,是在客户端控制事物机制
    以前是成功的,现在不知为什么出问题了。
      

  2.   

    CMP可以设置事物属性
    这里是不是与客户端的事物控制与BEAN的事物控制有冲突啊!
    个人见解,供参考。
      

  3.   

    For example, if the trans-attribute setting is Required, the EJB container invokes the method within the existing transaction context or, if the client called without a transaction context, the EJB container begins a new transaction before executing the method. 依照这个描述,客户端call了一个存在的transaction,那么调用方法时就实现了一个事物。现在的问题是,在将多个方法的调用作为一个事物处理时失败。现象是,程序回滚时,仅数据库的update操作回滚成功,而对数据库的insert操作却回滚失败。
    有人对这个问题感兴趣吗?
      

  4.   

    另外:对所调用的实体Bean中方法的事物属性均为Request方式。
      

  5.   

    ahbill(阿漂) CMP自己来管理事物的
    你为什么要在JAVABEAN端来手工管理事物呢?
      

  6.   

    首先你要确定你的CMP管理的EntityBean使用事务的REQUIRED模式的!(主要是你的CREATE方法啦!)
    建议最好不要在手工管理事务的SESSION BEAN中调用EntityBean,代替的方法是直接操作数据库!
      

  7.   

    如果直接操作数据库,我直接写BMP得了。
    在现在的情况下,我只是想明白,客户端控制的事物能否实现。
    环境如前有说述。
      

  8.   

    也许你应该考虑JDO,而不使用CMP
      

  9.   

    JDO是什么啊,我不知道?
    请教!
      

  10.   

    javaBean调用的SessionBean的Transaction的模式呢,别只看EntityBean.
      

  11.   

    要调用多个对数据库操作的方法也可以将业务逻辑封装在Session Bean中呀
    Session Bean本来就是客户端程序的一种扩展
    你将调用数据库的方法等功能封装在Session Bean的事务方法中,再由客户端来调用,难道不能实现吗?
      

  12.   

    给出SessionBean和EntityBean的DD,尤其是create()方法是否参与tx?
    不要理会JDO,JDO是Java Data Object,它从长远来看可以是EntityBean容器的一个很好实现技术,并不能完全取代EntityBean。而且JDO的事务处理不是分布式的,不能满足你的要求。
    “要调用多个对数据库操作的方法也可以将业务逻辑封装在Session Bean中呀
    Session Bean本来就是客户端程序的一种扩展
    你将调用数据库的方法等功能封装在Session Bean的事务方法中,再由客户端来调用,难道不能实现吗?”
    这是个很好的建议,尤其从性能上而言,SessionBean往往和EntityBean在一个容器中,因此EJB容器可以进行优化。
      

  13.   

    感谢上述几位朋友的解释,这下子有一种豁然开朗的感觉。
    看来,需要在SessionBean来管理事务的划分。
    由于J2EE不支持套用事务,准备把JavaBean中的事务控制去掉
    贴子加分60,总分80,以答谢各位费心解答。
      

  14.   

    另外,我将陆续对贴子加分。
    希望能深入讨论清楚EJB的各种事务机制。
    希望感兴趣的朋友们踊跃参加。
      

  15.   

    你想在Client端做事务的想法在J2EE中不太佳
    因为J2EE强于在服务端做事务
    这样效率最高你想想:
    A
    B
    C
    三个操作都是远程操作,如果在客户端作事务,需要3次远程交互后才能确定是否提交,从效率上是不佳的
    在服务端,如SESSION BEAN中做事务,是极其容易的事,从效率上讲也强
      

  16.   

    从性能上来看,应该在SessionBean中来进行事物的控制。
    从理论上来看,在客户端进行事物控制也成,姑且不谈效率的问题。
    至于,现在我遇到的更新回滚成功,插入回滚不成功的的现象
    我估计和CMP的EntityBean的Create方法未被客户端的事物控制,
    至于为什么会这样,我再查查资料。
    因为CMP的EntityBean中的所有方法都定义的同样的Request属性
    没有道理,对数据库的Update和Insert方法会有不同。
      

  17.   

    If you are using Weblogic, make sure your DataSource is configured under TX_DataSource.
      

  18.   

    这可能是个问题:My DataSource 没有配在TX_DataSource下,感谢感谢。
    再问一下,EJB与数据库交互并没有用到DataSource,这有什么关系吗?
    因为配的DataSource是供SQL与数据库交互用的.
      

  19.   

    问题解决
    Thanks everyone.
    simoncn is right,My DataSource should configured under TX_DataSource.
      

  20.   

    再问一下,EJB与数据库交互并没有用到DataSource,这有什么关系吗?
    --EJB Container is using DataSource to obtain JDBC Connection. Stupid Weblogic architecture requries you explicitly specify the DataSource is should be managed by TPM.