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

标签 java gwt requestfactory

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

我发现发生这种情况是因为请求工厂检查“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;
    }
}

到目前为止,这有效,我没有收到针对数据库的大量查询。

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

最佳答案

RequestFactory 期望采用每个请求一个 session 的模式,其中 session 保证每个实体有一个实例(即使用缓存)。

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

话虽这么说,isLive 仅用于驱动客户端的 EntityProxyChange 事件,因此如果您不使用它们,也不会造成任何问题像您一样无条件返回 true

关于java - GWT 请求工厂 - 从 "ServiceLayerDecorator.isLive()"方法收集多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16886949/

相关文章:

java - 无法将 selectonHandler 添加到 Gwt 中的 TabPanel

java - 对于真正大于整数最大值的巨大数,解决递归关系的最佳方法应该是什么

java - 一个类的例子如何改变它的行为? Java接口(interface)使用

GWT 无法将背景图像添加到简单面板

java - Google Web Toolkit 自动刷新网格

java - Guice - "dynamic"绑定(bind)?

java - 有关GWT,Cookie和网页定向的问题

java - GWT:在服务器代码中访问 i18n 消息

java - RequestFactory 请求 (AutoBeanCodexImpl.doCoderFor) 永远不会完成并使用 100% cpu

gwt - GWT 中的 requestfactory 和 findEntity 方法