同じドメイン オブジェクトに対して異なるエンティティ ロケーターを使用できるようにしたいと考えています。私が使用Twig
していて、オブジェクトを完全または部分的にロードするオプションがあります。ライト リクエストを実行すると、代わりにfetchRangeLite
ロケータが使用されます。私の現在の実装は次のとおりです。TwigLocator
TwigLiteLocator
プロキシ
@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<List<MyDomainProxy>> fetchRange(Integer start, Integer length);
Request<Integer> getCount();
Request<List<MyDomainLiteProxy>> fetchRangeLite(Integer start, Integer length);
}
ダオ
public List<MyDomain> fetchRange(Integer start, Integer length) {
...
}
public List<MyDomain> fetchRangeLite(Integer start, Integer length) {
...
}
ライトロケーターが使用されることを期待していましたが、そうではありません。では、RF は特定のドメイン タイプに使用するロケーターをどのように選択するのでしょうか?
アップデート
私のドメイン オブジェクトは、リストのリストで構成されています。
public class MyDomain extends DatastoreObject {
private List<A> a;
}
public class A {
private List<B> b;
}
オブジェクトのプロキシがMyDomain
サーバーからクライアントに送信されると、すべての とすべてのTwig
が読み込まれ、時間がかかります。オブジェクトのプロパティにのみ関心があるため、「ライト」ロケーターを使用したいと考えています。A
B
MyDomain
Twigロケーター
@Override
public DatastoreObject find(Class< ? extends DatastoreObject> clazz, Long id) {
ObjectDatastore myDatastore = datastoreProvider.get();
DatastoreObject object = myDatastore.load(clazz, id);
return object;
}
TwigLiteロケーター
@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 とバージョンは両方のプロキシで同じです。