【问题标题】:Performance on EJB Container Managed Transaction VS Bean Managed TransactionEJB Container Managed Transaction VS Bean Managed Transaction 的性能
【发布时间】:2017-04-04 08:45:14
【问题描述】:

关于 EJB Container Managed Transaction 和 Bean Managed Transaction 的比较?

  • 哪个性能更好。
  • 何时使用其中任何一个的最佳实践。

谢谢

【问题讨论】:

    标签: ejb containers


    【解决方案1】:

    在 BMT 和 CMT 之间进行选择取决于业务决策,而不是性能。

    在我看来,没有最佳做法,但这些只是选择其中之一的一些示例。

    骨髓移植

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

    CMT

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

    在某些情况下,BMT 的使用需要考虑。

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

    【讨论】:

      【解决方案2】:

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

      CMT需要做一些额外的工作,而BMT中不需要。

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

      【讨论】:

        猜你喜欢
        • 2015-03-10
        • 1970-01-01
        • 2010-11-19
        • 2012-11-09
        • 2012-04-11
        • 1970-01-01
        • 2014-07-04
        • 1970-01-01
        • 2011-01-04
        相关资源
        最近更新 更多