1

呼び出したときに気づいた

    SomeProxy proxyNew = someRequestContext.edit(proxyOld);
    proxyNew.setSomething(somethingNew);
    someRequestContext.mySaveMethod(proxyNew).fire();

から返されたエンティティ

    @Override //from Locator<SomeEntity ,IdClass>
    public SomeEntity find(Class<? extends SomeProxy > clazz, IdClass id) {
    ...
    }

mySaveMethod(SomeEntity entity)保存メソッドが呼び出されたときにサーバーで使用され、返されたエンティティと比較して新しいproxyNew のプロパティ/インスタンス変数値のみがサーバー実装に転送されます。

今。public SomeEntity find(Class<? extends SomeProxy > clazz, IdClass id)サーバー側にデルタのみを提供するためにいくつかの比較があるため、通信の効率性があることは理解していますが、データベースからエンティティオブジェクトを取得する実装に必要な追加の処理/転送時間によって、何らかの形で相殺されると思います。

私の質問は、GWT サーバー側のサーブレット/DAO オブジェクトにサービスを提供するステートレス セッション Bean を介して公開される持続性サービスを使用して、これをシステムに正しく実装するにはどうすればよいかということです。最高の効率と最短の待ち時間が達成されるように正しく実装されています。また、誰かがこの RequestFactory の側面/プロセスをより詳細に説明してもらえますか?

私の例: OrganizerEntry特定の期間 (1 週間) の間、永続層からエンティティを取得します。

したがって、このようなメソッド retrieveOrganizerEntries(Date from, Date to)は永続層で呼び出されます。

OrganizerEntry次に、クライアント層に送信されるエンティティ オブジェクトごとに、次のような別のクエリが作成されることがわかりますretrieveOrganizerEntry(int id)

したがって、同じオブジェクトが 2 回照会されるだけでなく、2 回目は非常に非効率的な方法で 1 つずつ照会されます。

これはどのように改善できますか?最初のクエリの結果を何らかの形で DAO/サーブレット オブジェクトにキャッシュし public SomeEntity find(Class<? extends SomeProxy > clazz, IdClass id) 、キャッシュを検索する必要がありますか? このメソッドを返す nullか、新しく作成された空のエンティティ ( new OrganizerEntity()) を実装し、クライアントから永続化/保存メソッドを呼び出す前に、すべてのプロパティ/インスタンス変数値を設定する方法はありますか?

このような例や説明はどこで見つけることができますか? http://www.gwtproject.org/doc/latest/DevGuideRequestFactory.htmlは私にはあまり疲れていないように見えるからです。

4

1 に答える 1

1

1.)rf内部については、こちらのドキュメントを参照してください。しかし、Thomas Broyer がこれについてもっと詳しく答えてくれると思います。

基本的な流れは次のとおりです。

  • setter によって変更されたプロパティは、サーバーに送信されます。
  • サーバーはfind()エンティティを取得するために使用し、対応するものを呼び出しますsetters(クライアントでも呼び出したものは何でも)。
  • 検証ルールが処理されます
  • エンティティがサービス メソッドに渡されます。

2.)別名OpenSessioninview patternRFが必要です。. 永続化レイヤー (つまり Hibernate) の第 1 レベルのキャッシュは、複数の冗長な呼び出しを非常に効率的に行う必要があるため、通常、セッションの存続期間中にデータベースにアクセスするのは 1 回だけです。one session per http requestfind()

3.) クライアントのイベントを気にしない場合は、メソッドをEntityProxyChangeオーバーライドして返すことができます(詳細については、こちらを参照してください)。これはおそらく、インスタンスのリストを取得するときにメソッドが呼び出される理由でもあります。これは、それ自体が を呼び出す「isLive()」を呼び出すことによって、それぞれがまだ生きているかどうかをチェックするためです。 isLive()Locatortruefind()OrganizerEntryOrganizerEntry RFfind()

于 2013-08-07T15:44:53.163 に答える