EJB 容器管理事务与 Bean 管理事务的性能
Performance on EJB Container Managed Transaction VS Bean Managed Transaction
关于 EJB 容器管理事务和 Bean 管理事务的比较?
- 哪一个有更好的表现。
- 关于何时使用其中任何一个的最佳实践。
谢谢
是否选择 BMT 和 CMT 取决于业务决策,而不是性能。
在我看来,没有最佳实践,但这些是一些偏爱其中之一的示例。
BMT
- 你有一个
Stateful
bean,全局提交依赖于其他方法的结果。通过将 BMT 与 Stateful
一起使用,您实际上可以让交易保持打开状态,并在您做出业务决策时 close/commit 它。
- 出于任何原因你想完全控制你的交易边界
CMT
- 您有一个
Stateful
并且您想要实现 SessionSynchronization 接口以了解事务何时开始结束等...在这种情况下,您的 bean 必须使用 CMT
- 您有一个 EJB 链并且您希望所有它们都成为单个事务的一部分,在这种情况下您需要使用 CMT(尽管第一个 ejb 可以启动并共享其 BMT 事务)。
有些情况下 BMT 的使用需要考虑。
- 如果将 BMT 与
MessageDriven
一起使用,则消息不是事务的一部分,因此容器会确认消息。
- 如果您是 EJB 和带有 BMT 的方法,则该方法无法加入现有事务。
Bean Managed Transaction 应该比 Container Managed Tansaction 快一点。
CMT需要做一些额外的工作,这在BMT中不需要做。
- 容器必须检查事务是否已经开始。
- 容器必须读取方法的@TransactionAttribute 注解。
- 容器必须在 运行 方法之前启动新事务(如果是 TransactionAttributeType:Required,RequiresNew)或抛出异常(如果是 TransactionAttributeType:Never,Mandatory)。
关于 EJB 容器管理事务和 Bean 管理事务的比较?
- 哪一个有更好的表现。
- 关于何时使用其中任何一个的最佳实践。
谢谢
是否选择 BMT 和 CMT 取决于业务决策,而不是性能。
在我看来,没有最佳实践,但这些是一些偏爱其中之一的示例。
BMT
- 你有一个
Stateful
bean,全局提交依赖于其他方法的结果。通过将 BMT 与Stateful
一起使用,您实际上可以让交易保持打开状态,并在您做出业务决策时 close/commit 它。 - 出于任何原因你想完全控制你的交易边界
CMT
- 您有一个
Stateful
并且您想要实现 SessionSynchronization 接口以了解事务何时开始结束等...在这种情况下,您的 bean 必须使用 CMT - 您有一个 EJB 链并且您希望所有它们都成为单个事务的一部分,在这种情况下您需要使用 CMT(尽管第一个 ejb 可以启动并共享其 BMT 事务)。
有些情况下 BMT 的使用需要考虑。
- 如果将 BMT 与
MessageDriven
一起使用,则消息不是事务的一部分,因此容器会确认消息。 - 如果您是 EJB 和带有 BMT 的方法,则该方法无法加入现有事务。
Bean Managed Transaction 应该比 Container Managed Tansaction 快一点。
CMT需要做一些额外的工作,这在BMT中不需要做。
- 容器必须检查事务是否已经开始。
- 容器必须读取方法的@TransactionAttribute 注解。
- 容器必须在 运行 方法之前启动新事务(如果是 TransactionAttributeType:Required,RequiresNew)或抛出异常(如果是 TransactionAttributeType:Never,Mandatory)。