标签: bean-managed-transactions

UserTransaction如何传播?

我有一个带有bean管理事务的无状态bean,以及这样的方法:

@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class ... {

    @Resource 
    private UserTransaction ut;
    @EJB 
    private OtherStatelessBeanLocal other;

    public void invokeSomeMethods() 
        ut.begin();
        ...

        // invoke other bean's methods here.
        other.method();

        ...
        ut.commit();

    }

}
Run Code Online (Sandbox Code Playgroud)

那么如何UserTransaction传播到OtherStatelessBeanLocalbean呢?

java ejb jta java-ee bean-managed-transactions

16
推荐指数
1
解决办法
1万
查看次数

BMT/CMT与应用程序/容器管理的EntityManager之间有什么关系?

对该主题的各种部分描述使我怀疑BMT与应用程序管理的EntityManager(以及UserTransaction的使用)紧密相关,并且CMT与容器管理的EntityManager紧密相关.

任何人都可以(或指向我)清楚地解释BMT/CMT与应用程序/容器管理的EntityManager的确切关系吗?

事务划分类型和EntityManager管理类型之间允许哪些组合?

  • 我可以将应用程序管理的EntityManager与CMT结合使用吗?
  • 我可以将容器管理的EntityManager与BMT结合使用吗?

此外,UserTransaction和BMT/CMT与应用程序/容器管理的EntityManager之间的关系是什么?

  • 我可以将UserTransaction与容器管理的EntityManager一起使用吗?
  • UserTransaction是否意味着BMT,反之亦然?

编辑:根据http://www.byteslounge.com/tutorials/container-vs-application-managed-entitymanager,我可以将CMT/BMT与应用程序/容器管理的EntityManagers结合起来.这仍然让我有关于UserTransaction和BMT之间关系的问题.一个人是否意味着另一个?

编辑:与上面发布的链接相反,http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html#bnbra声称" 应用程序管理的实体管理器不会自动传播JTA事务上下文.这些应用程序需要手动访问JTA事务管理器并在执行实体操作时添加事务划分信息.javax.transaction.UserTransaction接口定义了开始,提交和回滚事务的方法.通过创建实例来注入UserTransaction实例变量用@Resource注释".对我来说,这听起来像"应用程序管理的实体管理器需要bean管理的事务划分".谁是对的?Oracle还是Byteslounge?

jpa transactions entitymanager java-ee bean-managed-transactions

8
推荐指数
1
解决办法
2127
查看次数

为什么使用bean管理的事务的EJB bean充当"事务障碍"?

EJB 3.1规范引用:

13.6.1 Bean管理的事务划分

容器必须使用bean管理的事务划分来管理对企业bean实例的客户端调用,如下所示.当客户端通过企业bean的一个客户端视图调用业务方法时,容器会挂起可能与客户端请求关联的任何事务.

另一方面,来自独立客户端或另一个EJB的事务使用容器管理的事务传播到bean中.从CMT的角度来看,使用CMT的bean似乎还有一个重要的特性(事务传播).

使用BMT对bean施加此限制("交易障碍")的原因是什么?

相关问题:

ejb transactions java-ee bean-managed-transactions

6
推荐指数
1
解决办法
4198
查看次数

Bean 管理的事务如何工作?

我对 EJB 和 Bean 管理事务都很陌生。在放弃互联网之后,我发现我可以编写一个 EJ 会话 Bean,它以“bean 管理的方式”执行事务,如下所示:

@TransactionManagement(value=TransactionManagementType.BEAN)
@Stateless
public class OperationBean {
    @Resource
    private UserTransaction userTransaction;
    public void operation() {
        try{
            userTransaction.begin();
            Op1();
            Op2();
            Op3();
            userTransaction.commit();
        } catch(Exception e){
            userTransaction.rollback();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我不明白如果 Op3() 抛出异常会发生什么。Op1() 和 Op2() 如何撤消?

另一个问题是如何将其绑定到 JSF?我需要在 JSF 中编写一个表单,将其数据发送到服务器,OperationBean 根据接收到的数据执行 3 个操作。这些操作确实涉及数据库操作(3个更新),单独来看没有意义。

谢谢!

jsf ejb transactions javabeans bean-managed-transactions

0
推荐指数
1
解决办法
3935
查看次数