EJB容器管理事务VS Bean管理事务的性能

时间:2017-04-04 08:45:15

标签: ejb containers

关于EJB容器管理事务和Bean管理事务之间的比较?

  • 哪一个有更好的表现。
  • 何时使用其中任何一种的最佳做法。

谢谢

2 个答案:

答案 0 :(得分:0)

选择BMT和CMT取决于业务决策,而不是绩效。

在我看来,没有最佳做法,但这些是偏好其中一个的一些例子。

BMT

  1. 您有一个Stateful bean,全局提交取决于其他方法的结果。通过将BMT与Stateful一起使用,您可以将事务保持打开状态,并在做出业务决策时关闭/提交事务。
  2. 出于任何原因,您希望完全控制您的交易边界
  3. CMT

    1. 您有一个Stateful,并且您希望实现SessionSynchronization接口以了解事务开始结束等等...在这种情况下,您的bean必须使用CMT
    2. 您有一系列EJB,并且您希望它们都是单个事务的一部分,在这种情况下,您需要使用CMT(尽管第一个ejb可以启动并共享其BMT事务)。
    3. 在某些情况下,BMT的使用需要考虑。

      1. 如果将BMT与MessageDriven一起使用,则该消息不是事务的一部分,因此容器会确认该消息。
      2. 如果您是EJB和使用BMT的方法,则该方法无法加入现有事务。

答案 1 :(得分:0)

Bean Managed Transaction应该比Container Managed Tansaction快一点。

CMT需要做一些额外的工作,这不需要在BMT中完成。

  • 容器必须检查事务是否已经启动。
  • 容器必须读取方法的@TransactionAttribute注释。
  • 在运行方法或抛出异常之前,容器必须启动一个新的Transaction(如果是TransactionAttributeType:Required,RequiresNew)(如果是TransactionAttributeType:Never,Mandatory)。