GWT RPC Основы управления потоком объяснений - PullRequest
1 голос
/ 23 января 2012

Я новичок в GWT и могу работать с GWT RPC, но у меня проблемы с пониманием того, как поток управления происходит внутри. Как переводится на AJAX?

Можем ли мы использовать new() вместо GWT.create(someService.class) для вызова RPC? Почему Google не просто использует версию Async вместо создания 2 интерфейсов?

Что происходит внутри, когда мы используем

TaskService Async = GWT.create(TaskService.class);

Я прочитал, что он выбирает специфичный для браузера файл hashname.js, но не понимаю весь поток управления. Также Как используется объект обратного вызова.

Может ли кто-нибудь объяснить поток управления, указав основные элементы?

ОБНОВЛЕНИЕ : @Thomas Broyer, все, что я понял ... Просто подтверждаю, что в случае GWT.create () на стороне клиента есть файл .rpc, который помогает в отложенном (позднее / время выполнения) ) обязательна Это правильно?

1 Ответ

4 голосов
/ 23 января 2012
  1. GWT.create() в этом случае вызовет генератор GWT;он сгенерирует класс, реализующий интерфейс Async (и поэтому вам нужно только объявить интерфейс и никогда не реализовывать его самостоятельно).
    См. Диаграмма подключения RPC .
    Использование генератора (или выбрав конкретную реализацию, но в случае GWT-RPC используется генератор) ( отложенное связывание .

  2. Таким образом, вы не можете использоватьnew.

  3. Что касается двух интерфейсов, то GWT может проверить, что ваш код на стороне сервера (синхронный) соответствует вашему клиентскому коду (асинхронно)).Причина, по которой вы вызываете GWT.create в синхронном интерфейсе , и он возвращает реализацию асинхронного интерфейса, является устаревшей.Могу поспорить, что они бы так не поступили, если бы они заново реализовали GWT-RPC.

  4. Созданный класс будет отвечать за сериализацию вызова (имя метода и аргументы) и сделать запрос AJAX (используя RequestBuilder);и затем десериализовать ответ (либо объявленный тип, либо исключение)

  5. Поскольку вызовы асинхронные, обратный вызов используется, ну, для обратного вызова вашего кода, когда сервер отвечает,после десериализации (либо вызов onSuccess с декодированным объектом, либо onFailure с декодированным исключением).
    См. Привыкание к асинхронным вызовам

...