你的这个sessionbean设置了需要事务吗?

解决方案 »

  1.   

    设置过了
    ....
               <transaction-type>Container</transaction-type>
            </session>
        </enterprise-beans>
        <assembly-descriptor>
            <container-transaction>
                <method>
                    <ejb-name>SEJB</ejb-name>
                    <method-name>*</method-name>
                </method>
                <trans-attribute>Required</trans-attribute>
    .....
    没有问题
      

  2.   

    是不是删除了,但是没有插入?这个应是数据库的运行机制问题,如果插入的数据与已删除的数据主键相同,那么事务处理必须先commit(),否则无法进行,而这个删除的commit事务是不能回滚的,建议改成update比较安全。
      

  3.   

    本意是先删除某些记录,然后插入些记录,都是对于同一个表进行的,在插入的时候遇到了一个NULL错(为验证事务人为制造的),插入是失败了,但删除却commit了,没有rollback!
      

  4.   

    想用容器管理事务的话需要tx的数据源
    b.m1();中的数据库连接怎么获得的,如果从tx的数据源获得的,那就不知道了
      

  5.   

    b.m1();中的数据库连接是由EJB在creat的时候进行的DBConnect并获得一个connection,
    在调用b.m1(Connection con)时传入,整个事务中用的是同一个connection
      

  6.   

    Context ctx = new InitialContext();
          DataSource ds = (DataSource)ctx.lookup("java:/OracleDS");
          con = ds.getConnection();
    .....
    不应该有错的呀?!
      

  7.   

    OracleDS是什么样的数据源
    创建数据源时,要创建Tx Data Source,而不是一般的Data Source
      

  8.   

    <datasources>
      <local-tx-datasource>
        <jndi-name>OracleDS</jndi-name>
        <connection-url>jdbc:oracle:thin:@....:1521:zzxy</connection-url>
        <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
        <user-name>sss</user-name>
        <password>ddd</password>
        <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
      </local-tx-datasource>
    </datasources>
    ...也不应该有错吧
      

  9.   

    这个问题我遇到过了现在解决了 ,楼上darkmood(birdy) 说的对
    创建数据源时,要创建Tx Data Source,而不是一般的Data Source。
    回去重新配置一下数据源,程序不需要改动 good luck!
      

  10.   

    呵呵,楼上说得都对,仔细看看还是程序问题.在DAO中没有抛出异常,ejb无法捕获到异常。所以
    }  catch(Exception ex) {
        sessionContext.setRollbackOnly();
          throw ex;
     }
    就没有回滚。 :)