[英]REQUIRES_NEW within REQUIRES_NEW within REQUIRES_NEW … on and on
JBoss 4.x
EJB 3.0
我見過如下代碼(大大縮寫):
@Stateless
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class EJB1 implements IEJB1
{
@EJB
private IEJB1 self;
@EJB
private IEJB2 ejb2;
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public boolean someMethod1()
{
return someMethod2();
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public boolean someMethod2()
{
return self.someMethod3();
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public boolean someMethod3()
{
return ejb2.someMethod1();
}
}
並且說EJB2幾乎是EJB1的精確副本(相同的三種方法),而EJB2.someMethod3()
調用EJB3.someMethod1()
,然后最終在EJB3.someMethod3()
寫入DB。
這是一個人為的例子,但在我們的代碼庫中看到了類似的代碼。 代碼實際上工作得很好。
但是,感覺就像是一種糟糕的做法,而且我對每個甚至不實際執行任何數據庫寫操作的方法都關注@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
。 這是否實際上每次為每個方法調用創建一個新事務,結果為:
新交易
- 新交易
- 新交易
---新交易
...(還有很多)
-------新的transaciton(DB寫)
然后在那時解開? 這會不會引起性能問題? 額外的想法?
它確實在每個EJB中創建了新的JTA事務,這必須對只讀方法(僅使SELECTS,而不是更新)產生嚴重的性能影響。 將@SUPPORTS用於只讀方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.