2017-04-04 72 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的情況下)。