2012-11-09 185 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