GWTリクエストファクトリ-同じエンティティタイプの複数のエンティティロケータ

gwt requestfactory
GWTリクエストファクトリ-同じエンティティタイプの複数のエンティティロケータ

同じドメインオブジェクトに対して異なるエンティティロケーターを使用できるようにしたい。 私は `Twig`を使用し、オブジェクトを完全または部分的にロードするオプションがあります。 ライトリクエスト「fetchRangeLite」を実行すると、「TwigLiteLocator」の代わりにロケーター「TwigLocator」が使用されます。 私の現在の実装は以下のとおりです。

プロキシ

@ProxyFor(value = MyDomain.class, locator = TwigLocator.class)
public interface MyDomainProxy extends EntityProxy {}

@ProxyFor(value = MyDomain.class, locator = TwigLiteLocator.class)
public interface MyDomainLiteProxy extends EntityProxy {}

要求

@Service(value = MyDao.class, locator = DaoServiceLocator.class)
public interface MyRequest extends RequestContext {
    Request> fetchRange(Integer start, Integer length);
    Request getCount();
    Request> fetchRangeLite(Integer start, Integer length);
}

DAO

public List fetchRange(Integer start, Integer length) {
  ...
}

public List fetchRangeLite(Integer start, Integer length) {
  ...
}

ライトロケーターが使用されることを期待していましたが、そうではありません。 それでは、RFは特定のドメインタイプに使用するロケーターをどのように選択しますか?

更新

ドメインオブジェクトはリストのリストで構成されています。

public class MyDomain extends DatastoreObject {
  private List a;
}

public class A {
  private List b;
}

「MyDomain」オブジェクトのプロキシがサーバーからクライアントに送信されると、「Twig」はすべての「A」と「B」もすべてロードするため、時間がかかります。 `MyDomain`オブジェクトのプロパティにのみ興味があります。そのため、「ライト」ロケーターを使用したいのです。

TwigLocator

@Override
public DatastoreObject find(Class< ? extends DatastoreObject> clazz, Long id) {
    ObjectDatastore myDatastore = datastoreProvider.get();
    DatastoreObject object = myDatastore.load(clazz, id);
    return object;
}

TwigLiteLocator

@Override
public DatastoreObject find(Class< ? extends DatastoreObject> clazz, Long id) {
    ObjectDatastore myDatastore = datastoreProvider.get();
    myDatastore.setActivationDepth(0);
    DatastoreObject object = myDatastore.load(clazz, id);
    return object;
}

`myDatastore.setActivationDepth(0);`は、サブレベル(リスト)プロパティではなく、 `MyDomain`のプロパティのみをロードするようにデータストアに指示します。

DAOの実装は同じであるため、IDとバージョンは両方のプロキシで同じです。

  0  1


ベストアンサー

RFが「ライト」ロケーターを使用していない理由はわかりませんが、なぜ問題になる可能性があるのか​​わかりません。使用するプロキシがMyDomainのIDとバージョンが同じであってはいけませんか?

実際、この場合に2つの異なるロケーターが必要な理由がわかりません。「完全」または「ライト」フェッチはロケーターではなくDAOで行われます。 2つの異なるロケーターを持つ唯一の理由は、プロキシがクライアントからサーバーに送信されるときに、異なる方法で「find」を実装することです(「find」は「isLive」のデフォルト実装でも使用されますが、一般的にはデフォルトのものが既に「最適化された」ものでない限り、独自の実装でそれをオーバーライドします: find(obj.getClass()、getId(obj))!= null

0


タイトルとURLをコピーしました