這是我的代碼有:處理HTTP從EJB事務中調用
// EJB
beanclass 1{
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public String method1(){
method2();
DBupdates();
return "";
}
}
//普通的java類
class 2{
method 2(){
//call which may take a long time (but dont want to wait for it to complete)
makes http calls to an external URL method();
}}
的問題是:在HTTP通話可能需要很長時間。然而,調用的響應決定了方法1 - >數據庫更新和響應中的後續步驟。響應需要返回最終用戶,並且我不能讓最終用戶永遠等待。
我可以用兩種方式處理這種情況:
移動方法2到EJB,並把TransactionAttributeType.NEVER,使HTTP調用不在事務,方法1的交易不候在上面。在這種情況下,容器管理方法1的事務,並且不執行數據庫更新,如果它沒有從方法2回聽,則返回null。 method1的事務在「返回」之前等待多長時間?
我可以使用JBoss註釋並在method1()上放置2分鐘的TransactionTimeout:在這種情況下,如果http調用在2分鐘內未完成,則method1可以返回null並且不進行數據庫更新。
這兩種方法哪一種是明智的和防錯的? 感謝您的見解。