1

gwt リクエスト ファクトリからコレクションを取得するたびに、そのコレクション内のすべてのエンティティに対して "findEntity()" メソッドが呼び出されるという問題がありました。そして、この「findEntity()」メソッドは SQL データベースを呼び出します。

これは、リクエスト ファクトリが「ServiceLayerDecorator.isLive()」メソッドのすべてのエンティティの「活性」をチェックするために発生することがわかりました (ここでも説明されています: GWT の requestfactory および findEntity メソッド) 。

だから私は自分の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;
    }
}

これはこれまでのところ機能しており、データベースに対してこの大量のクエリを取得することはありません。

今、私はそれで他の問題が発生するかどうか疑問に思っていますか? または、これを解決するためのより良い方法はありますか?

4

1 に答える 1

2

RequestFactory は、セッションがエンティティごとに 1 つのインスタンスを保証する (つまり、キャッシュを使用する)リクエストごとのセッションパターンを想定しています。

適切な修正isLive、データベースではなく、そのキャッシュにアクセスすることです。JPAまたはJDOを使用している場合、無料でそれを行う必要があります。重要なのは、「リクエスト」がそれについて何を考えているか (削除リクエストを発行した場合isLiveは を返す必要がありますfalse) であり、他のユーザーが同時に行った可能性があることを考慮して、DB に正確に保存されているものではありません。

そうは言っても、クライアント側でイベントisLiveを駆動するためにのみ使用されるため、それらを使用しなくても、無条件に返される問題は発生しません。EntityProxyChangetrue

于 2013-06-03T00:52:40.073 に答える