GWT RequestFactory和多种类型

时间:2011-02-11 20:58:01

标签: gwt requestfactory

我的GWT应用程序有十种不同的实体。现在我使用普通的旧DTO并通过GWT-RPC传输它们。这适用于启动等情况 - 我可以将它们全部打包到一个请求中。

我正在寻找切换到RequestFactory,因为在我需要更新一种类型的实体以及RequestFactory的统一/带宽保存功能时,应用程序的整个生命周期中有很多次(平均30分钟)很有吸引力。但是:我没有看到在应用加载时在单个请求中下载所有初始化数据的方法。我不想要为我的十种实体类型提取十个请求来获取所有init数据。

有没有办法制作GeneralRequestContext,还是什么?我甚至对以下解决方案感到满意:

public interface InitDataProxy extends EntityProxy
{
    public UserProxy getInitUsers();
    public OrganizationProxy getInitOrganizations();
    ...
}

public interface GeneralRequestContext extends RequestContext
{
    Request<InitDataProxy> getInitData();
}

但是这不起作用,因为我不想用任何东西实际支持InitDataProxy,我只想用它在一个请求中组合一堆不同类型的代理。

那么:有没有办法在单个请求中接收多个不相关类型的EntityProxy

我也很乐意将一个正常的gwt-rpc请求发送到RequestFactory以外的数据,但我不想在RequestFactory的代理旁边运行重复的DTO,并编写自定义代码来复制DTO进入他们!

1 个答案:

答案 0 :(得分:4)

InitDataProxy可以扩展ValueProxy,这不要求服务器上的对象具有任何类型的id或版本语义。域端InitData类型可以是接口,可能使用匿名类型实现。

interface InitData {
  User getUser();
  Organization getOrgatization();
}
class InitService {
  static InitData makeInitData() {
    return new InitData() { ..... };
  }
}

@ProxyFor(InitData.class)
interface InitDataProxy extends ValueProxy {
  UserProxy getUser();
  OrganizationProxy getOrganization();
}
@Service(InitService.class)
interface Init extends RequestContext {
  Request<InitDataProxy> makeInitData();
}