如何在多个客户端模块/应用程序之间共享GWT RPC RemoteServiceServlet

如何在多个客户端模块/应用程序之间共享GWT RPC RemoteServiceServlet,gwt,gwt-rpc,Gwt,Gwt Rpc,我在Jetty中运行了几个GWT模块和web应用程序。他们都想使用我的LoginService RPC接口,所以我将此接口及其servlet实现放在一个公共模块中。我从根web上下文提供servlet LoginServiceImpl,web.xml在url/loginService中公开它。在另一个GWT模块中,要使用此服务,我必须设置入口点,如下所示 LoginServiceAsync loginService = GWT.create(LoginService.class); Serv

我在Jetty中运行了几个GWT模块和web应用程序。他们都想使用我的LoginService RPC接口,所以我将此接口及其servlet实现放在一个公共模块中。我从根web上下文提供servlet LoginServiceImpl,web.xml在url/loginService中公开它。在另一个GWT模块中,要使用此服务,我必须设置入口点,如下所示

 LoginServiceAsync loginService = GWT.create(LoginService.class);
 ServiceDefTarget t = (ServiceDefTarget)loginService;
 t.setServiceEntryPoint("/loginService");
现在,尝试使用loginService的模块称为讨论,我在服务器上遇到了这个错误

ERROR: The serialization policy file  
'/discussions/discussions/7B344C69AD493C1EC707EC98FE148AA0.gwt.rpc' was not found; 
did you forget to include it in this deployment?
因此servlet报告了一个错误,该错误将客户机提到了讨论模块。我猜RPC管道从客户端传递了这个.RPC文件的名称,servlet现在正在寻找它。作为实验,我将讨论模块中的*.gwt.rpc文件复制到根web上下文中,以便servlet能够找到它们。这确实阻止了错误。但我还是犯了另一个错误:

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中,在完全编译之后就消失了。也许这与我的工作有关。如果我能更好地重现问题,我将再次更新。

查看我的答案。简短的回答是:您需要在编译时将mystuff.web.shared.Users源代码提供给您的讨论模块。

我认为这不是问题所在。用户类已经可用,与LoginService类在同一个包中,它肯定会被调用,因为该服务正在被调用。此外,这个错误发生在服务器端,而不是客户端。您似乎在谈论运行时,但是源代码在编译时可用吗?这意味着它的路径需要在您的discussions gwt.xml文件中作为源路径列出,并且必须使用构建讨论模块所使用的任何机制使其可用。简短的回答是肯定的,它在编译时可用。我在devmode中运行,所以get有点不同,但是公共模块在Discussions.gwt.xml中作为继承元素。然后Common.gwt.xml具有正确的路径作为源路径。然后将这个相同的源路径添加到通常ant devmode目标的类路径中。这已经工作了好几个星期了。改变的是我移动了服务的服务器端实现。这可能只发生在devmode中。更新了问题。我需要更好地复制它。