Sul lato server, abbiamo una sottoclasse di RemoteServiceServlet che usiamo per tutte le implementazioni del servizio. Lei dice che sembra che richiede tempo, ma ecco come appare il codice. Lo fai una volta e hai finito.
@Override
protected void doUnexpectedFailure(Throwable t) {
t.printStackTrace(System.err);
super.doUnexpectedFailure(t);
}
Nota: in realtà non inviare a System.err e probabilmente non dovrebbe neanche, ma si ottiene l'idea.
Sul lato client, viene utilizzata una sottoclasse di AsyncCallback denominata AsyncSuccessCallback. Gestisce il caso onFailure in modo uniforme per la maggior parte delle nostre chiamate RPC. La maggior parte del nostro codice di callback può gestire il caso onSuccess sapendo che onFailure è gestito. Fornisce anche un posto unico per modificare questa implementazione in un secondo momento.
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: in realtà non usiamo Window.alert, ma di nuovo, si ottiene l'idea. Quello che facciamo in questo caso è visualizzare un DialogBox GWT che visualizza un modulo che esegue un POST su un altro server che accetta segnalazioni di errore. Il modulo consente all'utente di digitare una descrizione di cosa stavano facendo quando si è verificato l'errore.
Sul lato client, se si vuole ottenere l'analisi dello stack, è necessario scrivere un po 'di codice aggiuntivo:
// 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]";
}
}
Non l'ho ancora provato, ma sembra essere la soluzione giusta. Lo proverò non appena avrò un compito connesso con la registrazione. Fino a quel momento lo segnalo come corretto. – Zalivaka