两个jar包是否已在同一个 ear包里呢?

解决方案 »

  1.   

    你把d的事务类型改为requiresNew试试!
      

  2.   

    应用程序异常,ejb容器不会回滚事务的
      

  3.   

    这几天我一直在试这个问题,我打成了EAR包但是也不行.
    大家在开发的时候没有遇到过这些问题吗.
      

  4.   

    难道在两个jar 包里面,就没有办法进行事务吗,有没有高手指点一下.
      

  5.   

    既然是cmp,你何必自己控制呢,在你自己需要回滚的地方抛出异常,容器自己会帮你回滚的。
    万一要实现阶段回滚,也可以使用jta啊。
    没有实践你的错误,是不是你自己的行为干涉了容器的调用啊?
      

  6.   

    难道事务只能在一个jar包里面吗,如果需要调用另外一个jar包里面的实体bean 就不能进行事务了吗.///////////////////////////////////////////////////////////////////
    这个是分布式的事务,跟jdbc驱动有关吧,我在weblogic宝殿看过。不过,实体bean一般都是由容器管理事务把。
      

  7.   

    大家可能没有理解我的意思,我是在一个会话bean里面调用两个实体bean里面的方法 ,应该算是在两个实体bean之间进行事务.我试了如果两个实体bean在一个jar包里面就可以进行事务回滚,如果不在一个包里面就会出错.
      

  8.   

    你好,看见你发的消息。实体BEAN我没做过,不清楚。我用的是手动事务管理。也就是在sessionbean里写代码控制事务。这样控制的比较到位点。两个JAR包里是可以进行事务管理的,这点你可以相信,我做的事务处理就是在两个JAR包里进行的。
      

  9.   

    还有就是你把这两个JAR包都发布在同一个WEBLOGIC里试试。我以前试图在两抬SERVER之间远程调用,失败,不清楚原因。放在同一个SERVER里就没问题。
      

  10.   

    一个weblogic里绝对没问题。我做过session bean的,就是分别在两个jar里。
    其实两个weblogic里分开放也应该没问题。按道理来讲,否则还叫什么分布式应用。
      

  11.   

    下面是我写的代码,在weblogic7.0下调试通过(weblogic需要设置pool支持本地事务,datasource支持两段提交,很重要),但未能在weblogic8.1下通过
         //这段代码写在bean管理事务的sessionbean中
        //开始保存数据
        UserTransaction userTran = sessionContext.getUserTransaction();
        //写子表
        try {
          //事务开始
          log.debug("事务开始..");
          userTran.begin();
          Iterator itr2 = detailDTOs.iterator();
          //log.debug("itr size is :" + detailDTOs.size());
          while (itr2.hasNext()) {
            //log.debug("循环");
            //CurrencyLaunchDetailVO 是一valueobject
            CurrencyLaunchDetailVO detailDTO = (CurrencyLaunchDetailVO)
                itr2.next();
            //str为序号
            detailDTO.setBussinessid(str);
            //MimisCurrencyLaunchDetail 为一实体Bean
            MimisCurrencyLaunchDetail lanunchDetail = null;
            lanunchDetail = ( (MimisCurrencyLaunchDetailHome) EJBFactory.
                             getInstance().getLocalHome(JNDINames.
                CURRENCYLAUNCHDETAIL_JNDI_NAME)).create(detailDTO);        log.debug("id     ===" + detailDTO.getBussinessid());
            log.debug("classid===" + detailDTO.getCurrencyclassid());
            log.debug("kindId ===" + detailDTO.getCurrencykindid());
            log.debug("sum    ===" + detailDTO.getSum());
          }      log.debug("序号 :" + mainVO.getBussinessid());
          //MimisCurrencyLaunchMain 为主表的实体bean
          //开始写主表
          MimisCurrencyLaunchMain launchMain
              = ( (MimisCurrencyLaunchMainHome) EJBFactory.
                 getInstance().getLocalHome(JNDINames.CURRENCYLAUNCHMAIN_JNDI_NAME)).
              create(mainVO);
          //事务提交
          userTran.commit();
          log.debug("保存成功!");    }
        catch (Exception ex) {
          ex.printStackTrace();
          try {
            //事务回滚
            log.debug("保存失败!");
            userTran.rollback();
          }
          catch (Exception ex2) {
            ex.printStackTrace();
            throw new DemoException("保存失败!");
          }
          throw new DemoException("保存序号为:" + mainVO.getBussinessid() +
                                  " 的信息时出错!");
        }
        return ret_collect;如果是在weblogic8.1中没有那个循环或者循环只有一次都是没有错误的,只是当循环多于一次时,才会有异常,一直未解!!
      

  12.   

    接smilelee
    如果你放在两个Jar里面等于就是在两个容器之间进行事务,这样是可行的吗?
    还有你用的是bean管理事务还是容器管理事务阿.
      

  13.   

    还有smilelee老兄有没有什么可以在线联系的方式,想和你聊聊关于这个问题.
    我的msn 是[email protected]
      

  14.   

    我没有MSN,QQ1153272做的是手动事务管理,方式跟 manyjoys(更多欢乐)写的一样。在代码中控制事务,没有使用容器事务管理。