【发布时间】:2011-03-12 17:35:42
【问题描述】:
我有一个模块 B,它继承了模块 A。当我从 A 内部的 A 调用 RPC 服务时,它们工作正常。但是当我从 B 中的 A 调用服务时,RPC 调用总是失败。我错过了什么吗?
提前感谢您的帮助。
【问题讨论】:
我有一个模块 B,它继承了模块 A。当我从 A 内部的 A 调用 RPC 服务时,它们工作正常。但是当我从 B 中的 A 调用服务时,RPC 调用总是失败。我错过了什么吗?
提前感谢您的帮助。
【问题讨论】:
我在这里找到了我的问题的答案:http://blog.cloudglow.com/2010/03/making-gwt-rpc-endpoint-independent-of.html
默认的 GWT RPC 服务 (Servlet) 端点是 @RemoteServiceRelativePath("some_name"),它在客户端运行时解析为 /module_base/some_name。这种方法的问题是您的 RPC 端点现在绑定到 GWT 模块。虽然这在某些情况下可能没问题,但不适用于我们的情况。因此这篇文章。
我们最终创建了一个 RPC 服务工厂类,该类将创建服务端点的静态实例,并使用正确的端点为其播种;像这样:
public class ServicesFactory
{
public static final RPCServiceAsync RPCService = GWT.create(RPCService.class);
static
{
((ServiceDefTarget) RPCService).setServiceEntryPoint(GWT.getHostPageBaseURL() + RPCService.END_POINT);
}
}
【讨论】:
还有另一种解决方法。 只需为每个新方法添加一个新的 servlet 映射即可。
<servlet-mapping>
<servlet-name>serverName</servlet-name>
<url-pattern>/Module1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>serverName</servlet-name>
<url-pattern>/Module2</url-pattern>
</servlet-mapping>
【讨论】: