如何携带Spring Roo& GWT在一起

时间:2010-07-19 18:06:02

标签: gwt gwt-rpc spring-roo

我正在尝试开发一个Spring Roo / GWT应用程序,其中最新的GWT集成在Roo中。

让脚手架工作非常简单,但我真的不明白RPC是如何工作的。

有人可以提供一个简单的示例,说明如何在Spring Roo和GWT中连接客户端/服务器的简单服务。

一开始会非常有帮助,因为我找不到任何资源。

thx&问候, FLO

2 个答案:

答案 0 :(得分:7)

弗洛,

不确定你是否依赖谷歌浪潮,但这似乎是一个保持当前努力速度的地方。特别是这种浪潮可供公众使用: RequestFactory Wave

它涵盖了有关RequestFactory API的详细信息(很多新兴细节)。

基本思想是在服务器端和客户端都需要域模型对象。使用hibernate可能会导致类文件出现问题,并且人们已经拥有两组模型对象,并使用自定义GWT-RPC在客户端和服务器端模型对象之间发出服务器请求和编组/取消编组。不是理想的解决方案。即使您可以使用相同的模型对象,RPC的开销也是拖累。

输入RequestFactory,我们看到Google工程师可能会获得他们的价值。看一下从.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,它巧妙地使用泛型打包对域类的引用,以便稍后在演示文稿中使用。该软件包的其余部分是每个模型对象的事件和处理程序。

具体来说,每个对象有四个自动生成的类:

  • EmployeeRecord.java - 这是域对象的DTO。
  • EmployeeRecordChanged.java - 这是一个RecordChanged事件,用于提供onEmployeeChanged的钩子方法。
  • EmployeeChangedHandler.java - 这是一个在需要onEmployeeChanged的特定行为时实现的接口。
  • EmployeeRequest.java - 这是ApplicationRequestFactory用于打包给定对象的各种访问方法的接口。

请记住,幕后生成了大量代码来支持所有这些。从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以获取更多信息。另外,expenses.roo演示了如何使用Places并且还有一个相当灵活的Activity框架。快乐的GWTing。

问候。

答案 1 :(得分:0)

您所指的功能目前正在大力发展(或者谷歌的人希望我们相信;))因此API和内部工作不是最终的,并且很可能在GWT 2.1的最终版本发布之前仍然有所改变(在GWT sessions期间Google IO 2010期间曾多次说过这一点。但是,您可以浏览中继中的Bikeshed sample以查看正常工作(希望如果))示例。还有2.1 branch似乎包含最新的(?)示例(以及在Google IO上承诺的食谱)。
就个人而言,我等待将你的代码转换到新的RPC模型,直到工作GWT的人说这样做是安全的;)(但是现在习惯于一般的想法肯定是一个好主意 - 它不像他们会改变一切:D)。