2012-11-09 182 views
1

我們的團隊選擇使用NetBeans 7.1.2提供的所有工具開發Web服務。java web服務客戶端超時

不幸的是,我們的網絡服務太不穩定,很多次離線。這是我們現在無法解決的問題。我們的決定是在我們的客戶中實施暫停。但是我們沒有找到任何選擇或文件。

有沒有辦法讓客戶端在服務需要時拋出異常,例如5秒鐘來返回答案?所以我們無法捕捉到這個異常並對待視圖的流程。

我在問,因爲有辦法用線程和時間計數器來實現它,但很明顯其他程序員已經得到了同樣的問題。

順便說一下,我們使用的是JAX-WS。

非常感謝。

+0

你是說如果用戶等待5秒,你的服務負荷很重,所以你想返回503錯誤? – thatidiotguy

+0

不,實際上,我們的託管的bean使用Web服務客戶端來更新一些面板。但這些面板不能干擾頁面流。所以,如果Web服務需要超過5秒才能返回答案,我想將面板「呈現」屬性設置爲false。 –

回答

2

使用java.util.concurrent包類。例如,你可以暫停執行未來的實例:future.get(5, TimeUnit.SECONDS),如果它與TimeoutException異常節選,你可以作出反應,你想:

Future<String> future = executor.submit(new Callable<String>() { 
    public String call() { 
     return webService.executeServiceMethod(); 
    } 
}); 
try { 
    String result = future.get(5, TimeUnit.SECONDS); 
    processResult(result); 
} catch (TimeoutException ex) { 
    displayMessageToUserOrExecuteAgain(); 
} 
+0

這可能會奏效,但呼叫將繼續運行,消耗資源等。您的呼叫可能會超時,但潛在的工件不會。 –

+0

@hoaz,它的工作,我在一步關閉問題。但只有一件事讓我感到擔憂。應用程序服務器上的內存泄漏是否危險?我在問,因爲我害怕與非託管線程一起工作,而且如果發生TimeoutException,我將無法終止線程,對嗎? –

+0

future#取消將會正常工作,實際上還有其他方式來釋放資源,如關閉執行程序本身,以便您可以進行實驗 – hoaz