Вызов GWT RPC не откатывает транзакцию после исключения во время выполнения

Я пока не знаю GWT так глубоко, как хочу. Поэтому я хотел бы спросить кого-нибудь, кто хорошо знает GWT.

У меня проблема с транзакцией отката в GWT 2.3. Скажем, GWT делает RPC call of service, и там будет выброшено NullPointerException. Насколько я вижу сейчас, реализация doUnexpectedFailure в классе AbstractRemoteServiceServlet не выдает никаких исключений - она ​​просто сбрасывает ответ и исключение регистрации. Кроме того, в документации для этого метода говорится, что я должен переопределить этот метод для обработки непредвиденных исключений в GWT. Кто-нибудь занимался этой проблемой? Кто-нибудь переопределял doUnexpectedFailure? Как я мог правильно это сделать?

Спасибо за любой комментарий заранее и извините за мой английский!


person Dedyshka    schedule 27.11.2013    source источник
comment
транзакция, которую вы имеете в виду, является транзакцией JPA?   -  person André    schedule 27.11.2013


Ответы (1)


Посмотрите в мануале:

http://www.gwtproject.org/doc/latest/tutorial/RPC.html

Скажем, у вас есть сервис в вашем клиенте:

private MyServiceAsync service= GWT.create(MyService.class);

Итак, сервис создан

Вот как будет выглядеть звонок в вашем клиенте:

// Set up the callback object.
AsyncCallback<MyModel> myCallback = new AsyncCallback<MyModel>() {
  public void onFailure(Throwable caught) {
    try {
      throw caught;
    } catch (NullPointerException e) {
       // TODO: Handle your NPE 
    }
  }

  public void onSuccess(MyModelresult) {
    // everything is ok
  }
};
// Make the call to the stock price service.
service.doSomethingOnTheServer(callback);

В методе onFailure вы можете обрабатывать NPE на стороне клиента. Вызывается doUnexpectedFailure-метод, потому что ваш NPE не является проверенным исключением.

person El Hoss    schedule 27.11.2013
comment
именованное исключение - вы имели в виду проверенное исключение? - person Dedyshka; 27.11.2013
comment
@ElHoss, почему у вас есть попытка/поймать в методе onFailure? Вы можете сделать if (caught instanceof NullPointerException) { //Handle NPE } - person Churro; 27.11.2013
comment
Любое исключение, не перехваченное в блоке try/catch, будет перехвачено UncaughtExceptionHandler, определенным f. е. в вашей точке входа. Например, если ваш сервисный вызов вызывает исключение NotAuthorizedException, это исключение будет обрабатываться глобальным обработчиком исключений. Конечно, вы также можете использовать оператор if и генерировать исключение в случае else. Это будет то же самое. - person El Hoss; 28.11.2013