【问题标题】:How to bring Spring Roo & GWT together如何将 Spring Roo 和 GWT 结合在一起
【发布时间】:2010-07-19 18:06:02
【问题描述】:

我正在尝试使用 Roo 中最新的 GWT 集成来开发 Spring Roo/GWT 应用程序。

让脚手架工作非常简单,但我并不真正了解 RPC 是如何在那里工作的。

谁能提供一个简单的例子,如何在 Spring Roo 和 GWT 中做一个简单的服务来连接客户端/服务器。

对开始会很有帮助,因为我找不到任何资源。

谢谢和问候, 弗洛尔

【问题讨论】:

    标签: gwt gwt-rpc spring-roo


    【解决方案1】:

    弗洛,

    不确定您是否在使用 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,它巧妙地使用泛型来打包对域类的引用,以供稍后在演示文稿中使用。该包的其余部分是每个模型对象的事件和处理程序。

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

    • 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 以获取更多信息。另外,费用.roo 演示了如何使用 Places,并且还有一个相当漂亮的 Activity 框架。 GWTing 快乐。

    问候。

    【讨论】:

      【解决方案2】:

      您所指的功能目前正在大力开发中(或者 Google 的人希望我们相信 ;))因此 API 和内部工作不是最终版本,并且很可能在 GWT 2.1 最终版本之前仍会发生变化(这在Google IO 2010 期间的GWT sessions 期间已多次声明)。但是,您可以浏览后备箱中的Bikeshed sample 以查看一个有效的(希望是;))示例。还有 2.1 branch 似乎包含最新 (?) 示例(以及在 Google IO 上承诺的食谱)。
      就个人而言,我会等待将您的代码切换到新的 RPC 模型,直到从事 GWT 工作的人说这样做是安全的;)(但现在习惯一般想法绝对是一个好主意 - 他们不会改变一切 :D)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-02
        • 2012-11-05
        • 1970-01-01
        相关资源
        最近更新 更多