直接从 Java 调用 GWT RPC 服务

Posted

技术标签:

【中文标题】直接从 Java 调用 GWT RPC 服务【英文标题】:Invoke a GWT RPC service from Java directly 【发布时间】:2009-08-25 19:04:00 【问题描述】:

有直接从 Java 代码调用 GWT RPC 服务端点的简单方法吗?我的意思是真正的 Java 代码,而不是编译成 javascript 的 Java 代码。

我问是因为我们想针对 GWT RPC 接口运行性能基准测试/压力测试。我想用 Java 编写测试工具并在 JVM 中运行(而不是在浏览器中运行 javascript)。

我认为必须有办法做到这一点,因为我认为 GWT 托管模式需要这样的功能。但是,我在 GWT 运行时中找不到任何代码来演示如何干净利落地执行此操作。我查看了 com.google.gwt.user.client.rpc 包,但里面的东西似乎使用了 JSNI,这显然不能被纯 Java 使用。

【问题讨论】:

【参考方案1】:

GWT SyncProxy 允许您从纯 Java(不是 JSNI)代码访问 GWT RPC 服务(例如方法)。因此,您可以使用它来测试您的 RPC 接口。

详情请见http://www.gdevelop.com/w/blog/2010/01/10/testing-gwt-rpc-services/。

【讨论】:

这种机制是否适用于生产系统?例如,我可以使用它为我的客户提供客户端 Java API 吗? 是的,当然。但是,对于第 3 方访问,您必须/应该在服务器端实施访问控制 由于上面的 URL 似乎已经失效,请查看项目的 Google 代码站点:code.google.com/p/gwt-syncproxy【参考方案2】:

您是否尝试对服务的业务逻辑进行基准测试,或者 GWT-RPC 本身的性能如何?如果您最担心后端代码的执行情况,您可以直接实例化实现您的服务的类:

MyServiceImpl impl = new MyServiceImpl();
impl.doSomething();

如果您想测试更大的堆栈部分,包括 RPC 调用,请查看here。有一个名为“以 Web 模式运行测试”的部分,其中包含以下行:“默认情况下,以托管模式运行的测试在 JVM 中作为普通 Java 字节码运行”。因此,如果您使用所描述的设置,我认为您的测试默认在 java 中运行。该页面上还有关于 GWT 内置分析工具的信息。

【讨论】:

我想测试 GWT-RPC 本身以及我们在服务器中内置的定制调度机制。我宁愿不必使用 GWT 测试基础设施强加的所有脚手架,但我会看看您引用的内置 GWT 测试工具。谢谢!【参考方案3】:

您可以使用 Grinder 等传统负载测试工具来重放对您的服务的发布请求。这并不是您所要求的,但它可能是对您的应用程序执行负载测试的更好方法。 Grinder 可以同时模拟多个用户等等。

【讨论】:

以上是关于直接从 Java 调用 GWT RPC 服务的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GWT RPC 中将异常从服务器传递到客户端

谷歌网络工具包和 RPC

调用 GWT RPC 服务

GWT RPC 调用在编译模式下不起作用

调用 RPC 时出错 - GWT,404 服务器响应状态为 404(未找到)

GWT:更换与异步的RPC阻塞调用