2017-04-04 131 views

回答

0

阉BMT中进行选择和CMT依赖于商业决策,而不是性能。

在我看来,没有最佳实践,但是这些只是一个或者更好的例子。

BMT

  1. 你有Stateful豆和全球承诺取决于其他方法的结果。通过与Stateful一起使用BMT,您可以实现事务处理公开,并在业务决策完成时关闭/落实。
  2. 对于你想拥有完全控制事务边界

CMT

  1. 任何原因,你有一个Stateful,你要实现的会话同步接口知道​​什么时候开始交易结束等。在这种情况下,你的bean必须使用CMT
  2. 你有一个EJB链,你希望他们成为单个事务的一部分,在这种情况下你需要使用CMT(尽管第一个ejb可以启动并共享它BMT交易)。

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

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

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

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

  • 容器必须检查事务是否已经开始。
  • 容器必须读取方法的@TransactionAttribute注释。
  • 在运行方法或抛出异常(在TransactionAttributeType的情况下:从不,强制性)之前,容器必须启动一个新的Transaction(在TransactionAttributeType为Required,RequiresNew的情况下)。