Auf der Serverseite haben wir eine Unterklasse von RemoteServiceServlet, die wir für alle Service-Implementierungen verwenden. Sie erwähnen, dass es zeitaufwendig scheint, aber hier ist, wie der Code aussieht. Du machst es einmal und du bist fertig.
Hinweis: Wir senden es nicht wirklich an System.err und Sie sollten wahrscheinlich auch nicht, aber Sie bekommen die Idee.
Auf der Clientseite verwenden wir eine AsyncCallback-Unterklasse namens AsyncSuccessCallback. Es behandelt den onFailure-Fall einheitlich für die meisten unserer RPC-Aufrufe. Der Großteil unseres Rückrufcodes kann mit dem onSuccess-Fall umgehen, da er weiß, dass onFailure behandelt wird. Es bietet auch einen einzigen Ort, um diese Implementierung später zu ändern.
public abstract class AsyncSuccessCallback<T> implements AsyncCallback<T> {
public void onFailure(Throwable t) {
handleException(t);
}
protected void handleException(Throwable t) {
Window.alert(t.getMessage());
}
}
Hinweis: Wir verwenden eigentlich nicht Window.alert, aber Sie bekommen die Idee. In diesem Fall zeigen wir eine GWT-DialogBox an, die ein Formular anzeigt, das einen POST an einen anderen Server sendet, der Fehlerberichte akzeptiert. Das Formular ermöglicht dem Benutzer, eine Beschreibung dessen einzugeben, was sie bei Auftreten des Fehlers getan haben.
Auf der Client-Seite, wenn Sie die Stack-Trace erhalten möchten, müssen Sie ein wenig mehr Code schreiben:
// 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]";
}
}
Ich habe es noch nicht ausprobiert, aber es scheint die richtige Lösung zu sein. Ich werde es versuchen, sobald ich eine Aufgabe mit der Protokollierung verbunden habe. Bis dahin markiere ich es als richtig. – Zalivaka