【发布时间】:2010-07-19 18:06:02
【问题描述】:
我正在尝试使用 Roo 中最新的 GWT 集成来开发 Spring Roo/GWT 应用程序。
让脚手架工作非常简单,但我并不真正了解 RPC 是如何在那里工作的。
谁能提供一个简单的例子,如何在 Spring Roo 和 GWT 中做一个简单的服务来连接客户端/服务器。
对开始会很有帮助,因为我找不到任何资源。
谢谢和问候, 弗洛尔
【问题讨论】:
标签: gwt gwt-rpc spring-roo
我正在尝试使用 Roo 中最新的 GWT 集成来开发 Spring Roo/GWT 应用程序。
让脚手架工作非常简单,但我并不真正了解 RPC 是如何在那里工作的。
谁能提供一个简单的例子,如何在 Spring Roo 和 GWT 中做一个简单的服务来连接客户端/服务器。
对开始会很有帮助,因为我找不到任何资源。
谢谢和问候, 弗洛尔
【问题讨论】:
标签: gwt gwt-rpc spring-roo
弗洛,
不确定您是否在使用 google wave,但这似乎是一个可以跟上当前努力的地方。具体来说,这一波向公众开放: RequestFactory Wave
它涵盖了有关 RequestFactory API 的细节(新出现的细节)。
基本思想是服务器端和客户端都需要您的域模型对象。使用休眠可能会导致类文件出现问题,人们最终拥有两组模型对象,并使用自定义 GWT-RPC 在客户端和服务器端模型对象之间进行服务器请求和编组/取消编组。不是一个理想的解决方案。即使可以使用相同的模型对象,RPC 的开销也是一个拖累。
进入 RequestFactory,我们看到谷歌工程师可能得到了他们应得的报酬。查看从 .roo 生成的示例代码 - 特别是 ApplicationRequestFactory.java。
package com.springsource.extrack.gwt.request;
import com.google.gwt.requestfactory.shared.RequestFactory;
public interface ApplicationRequestFactory extends RequestFactory {
ReportRequest reportRequest();
ExpenseRequest expenseRequest();
EmployeeRequest employeeRequest();
}
这是一个为每个域对象提供请求方法的接口。项目中没有定义此类的实现。它在 EntryPoint 中通过调用 GWT.create(...) 进行实例化:
final ApplicationRequestFactory requestFactory =
GWT.create(ApplicationRequestFactory.class);
requestFactory.init(eventBus);
在com.springsource.extrack.gwt.request 包中,您将看到一个ApplicationEntityTypesProcessor.java,它巧妙地使用泛型来打包对域类的引用,以供稍后在演示文稿中使用。该包的其余部分是每个模型对象的事件和处理程序。
每个对象具体有四个自动生成的类:
请记住,在幕后生成了大量代码来支持所有这些。从 M1 到 M2,GWT 项目中可见的内容已经被清除了很多。我预计会有更多变化,但不会像 M1 到 M2 那样剧烈。
因此,最终这些事件可以在 UI 包中使用,以将域和 UI 联系在一起。 ReportListActivity.java:
public void start(Display display) {
this.registration = eventBus.addHandler(ReportRecordChanged.TYPE, new ReportChangedHandler() {
public void onReportChanged(ReportRecordChanged event) {
update(event.getWriteOperation(), event.getRecord());
}
});
super.start(display);
}
我再次向您推荐 wave 以获取更多信息。另外,费用.roo 演示了如何使用 Places,并且还有一个相当漂亮的 Activity 框架。 GWTing 快乐。
问候。
【讨论】:
您所指的功能目前正在大力开发中(或者 Google 的人希望我们相信 ;))因此 API 和内部工作不是最终版本,并且很可能在 GWT 2.1 最终版本之前仍会发生变化(这在Google IO 2010 期间的GWT sessions 期间已多次声明)。但是,您可以浏览后备箱中的Bikeshed sample 以查看一个有效的(希望是;))示例。还有 2.1 branch 似乎包含最新 (?) 示例(以及在 Google IO 上承诺的食谱)。
就个人而言,我会等待将您的代码切换到新的 RPC 模型,直到从事 GWT 工作的人说这样做是安全的;)(但现在习惯一般想法绝对是一个好主意 - 他们不会改变一切 :D)。
【讨论】: