我正在尝试使用 Roo 中 GWT 的最新集成开发 Spring Roo/GWT 应用程序。
让脚手架工作非常简单,但我不太明白 RPC 在那里是如何工作的。
你们中的任何人能否提供一个简单的示例,说明如何在 Spring Roo 和 GWT 中执行连接客户端/服务器的简单服务。
这对开始非常有帮助,因为我找不到任何相关资源。
谢谢和问候, 弗洛
最佳答案
弗洛,
不确定您是否在使用 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();
}
这是一个为每个域对象提供请求方法的接口(interface)。项目中没有定义此类的实现。它通过调用 GWT.create(...) 在 EntryPoint 中实例化:
final ApplicationRequestFactory requestFactory =
GWT.create(ApplicationRequestFactory.class);
requestFactory.init(eventBus);
在 com.springsource.extrack.gwt.request
包中,您将看到一个 ApplicationEntityTypesProcessor.java,它巧妙地使用泛型来打包对域类的引用,以便稍后在演示中使用。该包的其余部分是每个模型对象的事件和处理程序。
具体而言,每个对象有四个自动生成的类:
- EmployeeRecord.java - 这是域对象的 DTO。
- EmployeeRecordChanged.java - 这是一个 RecordChanged 事件,用于提供 Hook 方法 onEmployeeChanged。
- EmployeeChangedHandler.java - 这是一个接口(interface),将在需要 onEmployeeChanged 的特定行为时实现。
- EmployeeRequest.java - 这是 ApplicationRequestFactory 用于打包给定对象的各种访问方法的接口(interface)。
请记住,幕后生成了大量代码来支持所有这些。从 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 了解更多信息。此外,expense.roo 演示了如何使用 Places,并且还有一个相当灵活的 Activity 框架。快乐 GWTing。
问候。
关于gwt - 如何将 Spring Roo 和 GET 结合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3283723/