为非实体请求实施GWT RequestFactory服务

问题描述 投票:1回答:1

我有以下Java Servlet,执行我所谓的“ 附加服务”:

public class AdditionService extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        // The request will have 2 Integers inside its body that need to be
        // added together and returned in the response.
        Integer addend = extractAddendFromRequest(request);
        Integer augend = extractAugendFromRequest(request);

        Integer sum = addend + augend;

        PrintWriter writer = response.getWriter();
        writer.write(sum);
    }
}

[我试图让GWT的RequestFactory使用ValueProxyAdditionService执行相同的操作(在应用服务器上添加两个数字并返回总和作为响应,并且遇到了一些问题。

这里是AdditionRequest(客户端层),它是一个值对象,其中包含要添加的两个Integer:

// Please note the "tier" (client, shared, server) I have placed all of my Java classes in
// as you read through the code.
public class com.myapp.client.AdditionRequest {
    private Integer addend;
    private Integer augend;

    public AdditionRequest() {
        super();

        this.addend = 0;
        this.augend = 0;
    }

    // Getters & setters for addend/augend.
}

下一个我的代理(客户端层):

@ProxyFor(value=AdditionRequest.class)
public interface com.myapp.client.AdditionRequestProxy extends ValueProxy {
    public Integer getAddend();
    public Integer getAugend();
    public void setAddend(Integer a);
    public void setAugend(Integer a);
}

下一个我的服务API(在共享层中:)>

@Service(value=DefaultAdditionService.class)
public interface com.myapp.shared.AdditionService extends RequestContext {
    Request<Integer> sum(AdditionRequest request);
}

下一个我的请求工厂(共享层):

public class com.myapp.shared.ServiceProvider implements RequestFactory {
    public AdditionService getAdditionService() {
        return new DefaultAdditionService();
    }

    // ... but since I'm implementing RequestFactory, there's about a dozen
    // other methods GWT is forcing me to implement: find, getEventBus, fire, etc.
    // Do I really need to implement all these?
}

最后发生魔术的地方(服务器层):

public class com.myapp.server.DefaultAdditionService implements AdditionService {
    @Override
    public Request<Integer> sum(AdditionRequest request) {
        Integer sum = request.getAddend() + request.getAugend();
        return sum;
    }

    // And because AdditionService extends RequestContext there's another bunch of
    // methods GWT is forcing me to implement here: append, create, isChanged, etc.
    // Do I really need to implement all these?
}

这是我的问题:

  1. 我的“分层”策略正确吗?我是否将所有类型打包在正确的客户端/共享/服务器包中?
    • 我认为我的设置不正确,因为(共享)AdditionService引用了服务器上不应执行的DefaultAdditionService。共享类型应该能够同时存在于客户端和服务器上,但都不依赖于任何一个...
  2. ServiceProvider应该是实现RequestFactory的类,还是应该是extends
  3. 的接口?如果是后者,我在哪里定义ServiceProvider impl,以及如何将其链接回所有其他这些类?
  4. ServiceProviderDefaultAdditionService中的所有这些方法呢?我是否需要实现所有20种以上这些核心GWT方法?还是我使用API​​的方式不正确或不是像使用它时那样简单?
  5. 服务定位符在哪里?怎么样?

[我有以下Java Servlet,执行我称为“附加服务”的步骤:公共类AdditionService扩展了HttpServlet {@Override public void doGet(HttpServletRequest request,...

java gwt requestfactory server-communication
1个回答
6
投票

[如果您想将RF用作简单的RPC机制[*],则可以(正确的是:仅ValueProxy s),但是您还需要更多的内容:ServiceLocator s(即GWT 2.1.1)。

© www.soinside.com 2019 - 2024. All rights reserved.