首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EJB TransactionAttributeType.REQUIRES_NEW不工作

EJB TransactionAttributeType.REQUIRES_NEW不工作
EN

Stack Overflow用户
提问于 2010-07-26 12:51:52
回答 2查看 1.9K关注 0票数 1
代码语言:javascript
复制
    @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,但是T1将被回滚。

预期结果:

T1:插入肌实体集id=1;

T2:插入肌实体集id=2;

T2:提交;

T1:回滚;

->带有id=2的行是在DB中创建的。

实际结果:

插入肌实体集id=1;

插入肌实体集id=2;

回滚;

->在DB中没有创建任何内容。

有什么问题吗?非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-26 13:50:23

@解决方案

问题解决了。我犯了一个天真的错误。

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

我更新了上面问题上的代码,使一切都如期而至。

票数 1
EN

Stack Overflow用户

发布于 2010-10-14 04:05:16

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3334915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档