2017-01-30 75 views
0

我從代碼中打了兩次web服務。第一次命中給我一個product_ID,使用它作爲路徑參數,我進行第二次get調用,這給了我響應。在EJB中使用@Timeout而不是Thread.sleep()

問題是第二次(GET)調用應該在第一次(POST)調用後2秒後被觸發。我在我的項目中使用EJB,最簡單的解決方案是使用Thread.sleep(2000)。但是EJB並不建議程序員自己管理線程。

在我的研究中,我找到了一個可能的解決方案,但由於缺乏EJB技能,我無法理解它。有人可以指導我解決這個問題。

的URL可能的解決方案是:Using the EJB3 timer service instead of Thread.sleep()

回答

2

在你第一次調用的方法,你應該創建一個綱領性的單一動作定時器第一次調用後延遲2秒。

Timer timer = timerService.createSingleActionTimer(2000, new TimerConfig(product_ID, true)); 

當編程定時器超時(熄滅),容器調用bean的實現類註解@Timeout的方法。 @Timeout方法包含處理定時事件的業務邏輯。

@Timeout 
public void handleTimerEvent(Timer timer) { 
    String productId = timer.getInfo(); 
    someMethodWithDoSecondCallLogic(productInfo) 
} 

裁判:

+0

不@Timeout作品完全一樣的Thread.sleep,即它使當前線程進入睡眠或它使過程異步。因爲我正在運行我的項目,並且第二個web服務在2秒後正在運行。但是在webservice運行之前應該執行的方法。 – Anant666

+0

@Timeout在後臺工作,並在定時器完成後使用'timerService.createSingleActionTimer'創建,如果您在此EJB類中創建其他計時器,則它們也會觸發@Timeout方法。 (也許你想使用第二個調用的響應在第一個方法中使用?當然這是定時器不可能的) – Redlab

+1

如果你想以相同的方法響應你的第一個調用,你必須按照這樣的東西http://stackoverflow.com/questions/9100987/is-there-something-that-behaves-like-wait-and-notify-in-ejb-environment – Redlab

相關問題