代码之家  ›  专栏  ›  技术社区  ›  sof

EJB CMT TransactionAttributeType.REQUIRES\u NEW不起作用

  •  1
  • sof  · 技术社区  · 15 年前
        @Stateless    @LocalBean
        public class MySLSB {
    
                @Resource
                SessionContext ctx;
                @PersistenceContext(unitName = "myPU")
                EntityManager em;
    
                public void T1() {
                    em.persist(new MyEntity(1L)); //T1 created!
    /* wrong call to plain java object               
     T2();
     */     
    //corrected by lookup its business object first 
    ctx.getBusinessObject(MySLSB.class).T2();   
         ctx.setRollbackOnly();
                }
    
                @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
                public void T2() {
                    em.persist(new MyEntity(2L)); //T2 created!
                }
            }
    

    但T1将被回滚。

    预期结果:

    T2:插入myentity set id=2;

    T1:回滚;

    -&燃气轮机;id=2的行是在DB中创建的。

    插入myentity set id=1;

    回降;

    有什么问题吗?谢谢!

    2 回复  |  直到 15 年前
        1
  •  2
  •   csomakk    13 年前

    声明自引用可能更容易 @EJB MySLSB me; me.T2(); 而不是使用 ctx.getBusinessObject(MySLSB.class) . 但感觉是一样的。

        2
  •  1
  •   sof    9 年前

    @解决方案

    对T2()的调用应该查找它的业务对象,对T2()的直接调用仅仅是对它的普通java对象。

    我更新了上述问题的代码,使一切都按预期工作。