Как поделиться GWT RPC RemoteServiceServlet между несколькими клиентскими модулями / приложениями - PullRequest
0 голосов
/ 25 февраля 2012

У меня в Jetty работает несколько модулей GWT и веб-приложений. Каждый из них хочет использовать мой LoginService RPC-интерфейс, поэтому я поместил этот интерфейс и его реализацию сервлета в общий модуль. Я обслуживаю сервлет (LoginServiceImpl) из корневого веб-контекста, и web.xml предоставляет его по URL-адресу "/ loginService". В другом модуле GWT, чтобы использовать этот сервис, мне нужно было установить точку входа, как это ...

 LoginServiceAsync loginService = GWT.create(LoginService.class);
 ServiceDefTarget t = (ServiceDefTarget)loginService;
 t.setServiceEntryPoint("/loginService");

Теперь модуль, пытающийся использовать loginService, называется Discussions , и я получаю эту ошибку на сервере.

ERROR: The serialization policy file  
'/discussions/discussions/7B344C69AD493C1EC707EC98FE148AA0.gwt.rpc' was not found; 
did you forget to include it in this deployment?

Итак, сервлет сообщает об ошибке, в которой упоминается клиент (модуль обсуждений). Я предполагаю, что RPC-сантехника передала имя этого файла .rpc через клиента, и теперь сервлет ищет его. (?) В качестве эксперимента я скопировал файлы * .gwt.rpc из модуля обсуждений в корневой веб-контекст, чтобы сервлет мог их найти. Это остановило ошибку. Но я все еще получаю другую ошибку:

com.google.gwt.user.client.rpc.SerializationException: Type      
'mystuff.web.shared.User' was not assignable to 
'com.google.gwt.user.client.rpc.IsSerializable' and did not have a custom field  
serializer. For security purposes, this type will not be serialized.: ...

Этот класс сериализуем; раньше он работал в других модулях, так что теперь я потерялся.

Как правильно использовать LoginService из нескольких клиентских модулей?

Обновление:

Эта ошибка обнаруживалась в размещенном devmode и исчезла после полной компиляции. Возможно, это связано с несогласованным режимом политики сериализации gwt . Я обновлю еще раз, если смогу лучше воспроизвести проблему.

1 Ответ

0 голосов
/ 27 февраля 2012

Смотрите мой ответ здесь .Краткий ответ: вам нужно сделать доступным mystuff.web.shared.User s источник во время компиляции для вашего discussions модуля.

...