En el lado del servidor, tenemos una subclase de RemoteServiceServlet que usamos para todas las implementaciones de servicios. Usted menciona que parece consumir mucho tiempo, pero así es como se ve el código. Lo haces una vez y terminas.
@Override
protected void doUnexpectedFailure(Throwable t) {
t.printStackTrace(System.err);
super.doUnexpectedFailure(t);
}
Nota: En realidad no enviarlo a System.err y probablemente tampoco debería hacerlo, pero se entiende la idea.
En el lado del cliente, usamos una subclase de AsyncCallback llamada AsyncSuccessCallback. Maneja el caso onFailure de manera uniforme para la mayoría de nuestras llamadas RPC. La mayor parte de nuestro código de devolución de llamada puede tratar el caso onSuccess sabiendo que se maneja onFailure. También proporciona un lugar único para cambiar esta implementación más adelante.
public abstract class AsyncSuccessCallback<T> implements AsyncCallback<T> {
public void onFailure(Throwable t) {
handleException(t);
}
protected void handleException(Throwable t) {
Window.alert(t.getMessage());
}
}
Nota: En realidad, no usamos Window.alert, pero de nuevo, se entiende. Lo que hacemos en este caso es mostrar un GWT DialogBox que muestra un formulario que hace una POST a un servidor diferente que acepta informes de errores. El formulario permite al usuario escribir una descripción de lo que estaban haciendo cuando ocurrió el error.
En el lado del cliente, si desea obtener el seguimiento de la pila, es necesario escribir un poco de código extra:
// for lineEnding, use "<br>" for HTML, "\n" for text
public static final String getStackTrace(Throwable t, String lineEnding) {
Object[] stackTrace = t.getStackTrace();
if (stackTrace != null) {
StringBuilder output = new StringBuilder();
for (Object line : stackTrace) {
output.append(line);
output.append(lineEnding);
}
return output.toString();
} else {
return "[stack unavailable]";
}
}
No lo he probado todavía, pero parece ser la solución correcta. Lo intentaré tan pronto como tenga una tarea conectada con el registro. Hasta ese momento lo marqué como correcto. – Zalivaka