1)任何人都可以帮助我关于" Remoteexception"的概念这一般意味着什么?
2)unwrapRemoteException是什么意思?不确定这意味着"如果这个远程异常包装了其中一个lookupTypes"
/**
* If this remote exception wraps up one of the lookupTypes
* then return this exception.
* <p>
* Unwraps any IOException.
*
* @param lookupTypes the desired exception class.
* @return IOException, which is either the lookupClass exception or this.
*/
public IOException unwrapRemoteException(Class<?>... lookupTypes) {
if(lookupTypes == null)
return this;
for(Class<?> lookupClass : lookupTypes) {
if(!lookupClass.getName().equals(getClassName()))
continue;
try {
return instantiateException(lookupClass.asSubclass(IOException.class));
} catch(Exception e) {
// cannot instantiate lookupClass, just return this
return this;
}
}
// wrapped up exception is not in lookupTypes, just return this
return this;
}
(Hadoop_HDFS_Open_Source:https://github.com/apache/hadoop)
提前致谢!任何帮助将不胜感激!
答案 0 :(得分:0)
1)任何人都可以帮助我解决“Remoteexception”的概念吗?这一般意味着什么?
在服务器端抛出(创建)远程异常。服务器抛出此类异常,因为客户端发送了无效请求,或者服务器有内部错误或其他内容。服务器端的RPC服务器将异常序列化,并将其发送到客户端。客户端反序列化异常,并获得异常。
2)unwrapRemoteException是什么意思?
问题是“为什么我们需要包装异常”。首先,RemoteException是一个包装器而不是真正的异常。服务器抛出的真正异常可能是AccessControlException(用户没有普遍性),FileNotFoundException(无效请求)。我们将它们包装在RemoteException中。但为什么?因为代码更清晰,更易读。
不确定是否意味着“如果此远程异常包含其中一个lookupTypes”
例如,在DFSClient.java
中public HdfsFileStatus getFileInfo(String src) throws IOException {
checkOpen();
try {
return namenode.getFileInfo(src);
} catch(RemoteException re) {
throw re.unwrapRemoteException(AccessControlException.class,
FileNotFoundException.class,
UnresolvedPathException.class);
}
}
如果re
包裹FileNotFoundException
,则getFileInfo
仅返回FileNotFoundException
。然后用户可以看到更短的&amp;清除异常消息。用户只需要知道找不到文件,不管它是否是远程文件。
但是如果re
包含SafeModeException
或某个未知异常。这可能是服务器的内部错误或配置错误。我们完全抛出re
(RemoteException)。因此,即使用户不知道包装的SafeModeException
(或某个未知的异常),用户也可以从远程(服务器端)知道错误。用户可以向技术支持部门寻求帮助。