Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理连接错误的最佳实践_Java_.net_Wcf_Ejb - Fatal编程技术网

Java 处理连接错误的最佳实践

Java 处理连接错误的最佳实践,java,.net,wcf,ejb,Java,.net,Wcf,Ejb,发生连接错误时采用的最佳工作流是什么。 假设我们有一个连接到中间层的客户端 class MyClient{ ... void callServer(){ try{ middletier.saveRecord(123); }catch(...){ // log the error // what to do next (notify the user, take the same step again)?

发生连接错误时采用的最佳工作流是什么。 假设我们有一个连接到中间层的客户端

class MyClient{   
...   
  void   callServer(){  
    try{  
      middletier.saveRecord(123);  
    }catch(...){  
      // log the error  
      // what to do next (notify the user, take the same step again)?  
      // reinitialize connection ?  
    }  
  }  
}
如果发生连接错误(超时、连接断开…),该怎么办

我是否应该通知用户连接有问题并重试? 某些事情可以自动完成,并且对用户透明吗

我喜欢的是,不要用错误来打扰用户,然后告诉用户下一步要做什么。

那么,处理此类错误的最佳工作流是什么呢?

这完全取决于应用程序的要求。有时最好立即通知用户,有时最好在通知用户之前重试请求几次。您必须咨询您的客户/分析师。

这完全取决于应用程序要求。有时最好立即通知用户,有时最好在通知用户之前重试请求几次。您必须咨询您的客户/分析师。

从调用方的角度来看
MyClient
:一般来说,失败的方法调用应该使
MyClient
保持在调用之前的状态。这意味着您应该注意如何恢复middletier.saveRecord(123)之前的状态

从调用方的角度来看
MyClient
:一般来说,失败的方法调用应该使
MyClient
保持在调用之前的状态。这意味着您应该注意如何恢复middletier.saveRecord(123)之前的状态

我可以强烈推荐Michael Nygards“发布它!”这本书花了很多时间解释如何让你的软件更健壮


我可以强烈推荐Michael Nygards“发布它!”这本书花了很多时间解释如何让你的软件更健壮


这取决于。。。如果操作是由用户交互引起的,请通知用户。用户可以决定重试的频率。代码可能会自行重试,但如果超时,则用户可能会等待几分钟(或在没有收到任何反馈的情况下中止操作)

如果是后台任务,请在延迟一段时间后重试(但不是无限期-最终中止操作)。您可以重新初始化连接,这取决于使用的技术以及是否使用连接池

当然,如果你想投入更多的时间,你可以用不同的方式处理不同的错误。首先,区分永久性错误(几分钟内重试没有帮助)和间歇性错误(下次可以)。例如,对于断开的连接,您可以使用新连接重试(可能是防火墙由于不活动而丢弃了打开的连接)。但是对于超时(可能是网络配置问题)或“未找到HTTP 404”(假设您无法更改用于HTTP调用的URL),您可能无能为力

您可以在“诊断与维修”组件中收集所有这些知识


我还建议阅读“释放它!”。

这取决于。。。如果操作是由用户交互引起的,请通知用户。用户可以决定重试的频率。代码可能会自行重试,但如果超时,则用户可能会等待几分钟(或在没有收到任何反馈的情况下中止操作)

如果是后台任务,请在延迟一段时间后重试(但不是无限期-最终中止操作)。您可以重新初始化连接,这取决于使用的技术以及是否使用连接池

当然,如果你想投入更多的时间,你可以用不同的方式处理不同的错误。首先,区分永久性错误(几分钟内重试没有帮助)和间歇性错误(下次可以)。例如,对于断开的连接,您可以使用新连接重试(可能是防火墙由于不活动而丢弃了打开的连接)。但是对于超时(可能是网络配置问题)或“未找到HTTP 404”(假设您无法更改用于HTTP调用的URL),您可能无能为力

您可以在“诊断与维修”组件中收集所有这些知识


我还建议阅读“发布它!”。

我的客户不知道这一点。他们要求我给出最好的解决方案。这就是我询问个人最佳实践的原因。我的客户不知道这一点。他们要求我给出最好的解决方案。这就是为什么我要问关于个人最佳实践的问题。