¿Mala idea para encadenar excepciones con RMI?
¿Es una mala idea usar el encadenamiento de excepciones al lanzar RemoteExceptions? Tenemos un servidor RMI que hace algo como esto:
public Object doSomething() throws RemoteException
{
try
{
return getData();
}
catch (CustomException ex)
{
throw new RemoteException(ex);
}
}
Recibo UnmarshallException causada por una ClassNotFoundException en mi cliente. En el lado positivo, resulta que CustomException en sí se exporta. Desafortunadamente, otra excepción en el fondo de este tipo NO se exporta, que es donde entra la excepción ClassNotFoundException. Creo que la jerarquía es algo como esto:
RemoteException -> CustomException -> SQLException -> NotExportedException
El problema que veo es que, aunque podemos garantizar que se exporta CustomException, no podemos garantizar que existan excepciones de nivel inferior.
Me inclino por NUNCA usar el encadenamiento de excepciones con RemoteExceptions debido a esto. En cambio, creo que probablemente debería registrar el seguimiento de la pila en el lado del servidor y lanzar una RemoteException simple y vainilla sin ninguna excepción de "causa" encadenada. ¿Alguien ha lidiado con esta situación antes?