用jta事务控制,至于连接,作为jta内部过程,无所谓用什么方式获得

解决方案 »

  1.   

    但是,发现在设置连接AutoCommit为false后JTA事务根本起不了作用,不信你可以试一试
      

  2.   

    首先,必须为bean管理方式
    UserTransaction ut=null;
    Connection conn=null;
    try{
    ut=sessionContext.getUserTransaction();conn=xxx.getConnection();
    //conn.setAutoCommit(false);
    ....
    ut.commit();
    }
    catch(Exception ex){
    ut.rollback();
    }
    finally {
    if (conn!=null)conn.close();
    }
      

  3.   

    楼上的朋友你说的是在EJB中取事务,我现在是想在WEB容器中获取JTA/JCA事务,获取数据源,用JTA事务管理数据库操作.但是很感谢你,还请你再帮我想想.
      

  4.   

    今天我用Tyrex测试了,发现可以解决如上的问题.Tyrex是一个事物管理器,TOMCAT上的JTA事务可以通过它获取,数据源也可以通过JNDI获取到.但是我现在又有一个问题:我的CMP statless session bean与EntityBean确无法在该事务中进行回滚.我考虑原因是这样:因为JBOSS也有一个事物管理器,这个事务管理器可以用ut=sessionContext.getUserTransaction();取得,这个事物管理器与Tyrex是两个事务管理器,所以从Tyrex中获取的JTA事务对CMP管理的session bean起不了控制作用.还有一个原因是CMP statless session bean是由容器管理的.以上是我的思考,不知道大家认为对否?
      

  5.   

    然后还请问有没有解决办法,能实现CMP的session bean能在servlet层进行控制.
      

  6.   

    既然是CMP,由容器管理,怎么能从servlet进行控制。你可以在需要进行恢复操作的地方调用自定义方法,自定义方法中对原CMP操作进行逆向操作,即更新回原来的状态(或删或改,书上称谓好象是""补偿性事务")