используя механизм GWT RPC с моим настроенным сервлетом - PullRequest
1 голос
/ 15 сентября 2009

В настоящее время у меня есть приложение GWT, которое использует RequestBuilde для отправлять сообщения сервлету, который у меня есть (используя POST и GET), и мой сервлет (в doPost и doGet) «приостанавливает» запрос (это делается с помощью Servlets 3.0 spec) и добавляет его в очередь.
Дополнительно у меня есть Поток демона, который работает в фоновом режиме и «проигрывает» запрос когда есть новые данные.
Это прекрасно работает для меня, за исключением того, что я просто отправляю строки на данный момент, и я хотел бы использовать механизм RPC для отправки Объекты.
У меня такой вопрос:
Если я создаю свой myServiceImpl класс, который расширяется RemoteServiceServlet как мне обработать doPost и doGet, если вообще?
Мне нужно приостановить мой запрос на использование асинхронной поддержки, где это должно быть выполнено? Хотя я, возможно, могу вызвать метод this.getThreadLocalRequest() в моем методе RPC в классе myServiceImpl, но я не уверен, насколько мудрым это будет.
Я не уверен, что я даже понимаю, как GWT обрабатывает вызов со стороны клиента этого асинхронного интерфейса. Случайно ли это вызвать doGet например сервлет и гарантирует, что он вызывает требуемый метод RPC?
Извините, если я напутал, просто я не могу найти больше подробная техническая информация о том, как именно этот бизнес RPC работает.
Цени любую кредитную руку
Еффий

Ответы [ 2 ]

5 голосов
/ 11 октября 2009

Чтобы понять RPC, забудьте о POST и GET, он работает по-другому (то есть с точки зрения программирования. Внутренне он использует его, но вы не видите или не должны его понимать, если не хотите сделать что-то экзотическое). Хорошей отправной точкой для RPC является документация GWT: http://code.google.com/webtoolkit/tutorials/1.6/RPC.html

Чтобы дать вам резюме. При использовании RPC ваш сервлет myServiceImpl должен реализовать методы интерфейса с именем myService, помимо расширения RemoveServiceServlet. Методы получают в качестве аргументов данные, которые вы хотите отправить на сервер.

Рядом с интерфейсом myService необходимо создать интерфейс myServiceAsync (оба интерфейса должны быть в клиентском подпакете). Этот myServiceAsync интерфейс должен содержать те же методы, что и интерфейс myService, за исключением того, что каждый метод возвращает void и имеет дополнительный последний аргумент AsyncCallback callback.

В вашем клиенте вам необходимо использовать инструмент GWT для генерации RPC через GWT.create (подробности см. В документации.

Чтобы использовать RPC, вызовите методы интерфейса myServiceAsync в вашем клиентском коде, и GWT позаботится об отправке его сервлету. Затем сервлет вызовет соответствующий метод с аргументами, которые вы передали клиенту. Это делается асинхронно. Таким образом, клиент возвращается прямо с звонка.

Когда сервер отправляет результат обратно, обратный вызов, который вы передали myServiceAsync, используется или вызывается OnError или OnSuccess. OnError если метод на стороне сервера выдал ошибку, иначе OnSuccess. OnSuccess будет иметь в качестве аргумента возвращаемое значение из того, что вы вернули в методе, реализованном вашим сервлетом.

1 голос
/ 11 ноября 2012

Я думаю, что основное недоразумение, которое у меня было в то время, было связано с тем, что GWT RPC основывается на механизме сервлета (внутренне), и поэтому попытка использовать этот механизм с асинхронными сервлетами была в то время невозможна, так как GWT RPC был построено на сервлетах 2.5 (опять же на тот момент).

...