GWT请求工厂 - 从“ServiceLayerDecorator.isLive()”方法收集多个查询

时间:2013-06-02 20:24:13

标签: java gwt requestfactory

我遇到了问题,每次我从gwt请求工厂检索一个集合时,都会有“findEntity()” - 为该集合中的每个实体调用的方法。而这个“findEntity()” - 方法调用SQL-Database。

我发现这是因为请求工厂检查“ServiceLayerDecorator.isLive()”方法中的每个实体的“活跃度” - 方法(也在此处描述:requestfactory and findEntity method in GWT

所以我提供了自己的RequestFactoryServlet:

public class MyCustomRequestFactoryServlet extends RequestFactoryServlet {


    public MyCustomRequestFactoryServlet() {
        super(new DefaultExceptionHandler(), new MyCustomServiceLayerDecorator());

    }

}

我自己的ServiceLayerDecorator:

public class MyCustomServiceLayerDecorator extends ServiceLayerDecorator {

    /**
     * This check does normally a lookup against the db for every element in a collection
     * -> Therefore overridden
     */
    @Override
    public boolean isLive(Object domainObject) {
        return true;
    }
}

到目前为止这种方法有效,而且我没有对数据库进行大量的查询。

现在我想知道我是否会遇到其他问题?或者有更好的方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

RequestFactory期望每个请求的会话模式与会话保证每个实体一个实例(即使用缓存)。

正确的修复是让isLive命中该缓存,而不是数据库。如果您使用JPA或JDO,他们应该免费为您执行此操作。重要的是“请求”认为关于它(如果您发出了删除请求,isLive应该返回false),而不是真正存储在数据库中的内容,考虑到其他用户可以同时做的事情。

话虽如此,isLive仅用于在客户端驱动EntityProxyChange事件,因此如果您不使用它们,则不应导致无条件返回{{1}的任何问题就像你一样。