在我的一个项目中,我有一个 GWTEntityProxy
简化如下:
@ProxyFor(value = Item.class, locator = ItemService.class)
public interface ItemProxy extends EntityProxy
{
String getName();
// other getters and setters here
}
具有相应的实体实现,它是一个简单的 JPA 注释实体 bean。
我还有一个请求上下文:
@Service(value = ItemService.class, locator = InjectingServiceLocator.class)
public interface ItemRequestContext extends RequestContext
{
Request<List<ItemProxy>> findItems();
}
以及相应的服务和定位器实现:
public class ItemService extends Locator<Item, Long>
{
@Override
public Item find(Class<? extends Item> clazz, Long id)
{
return getItemFromJpa(id);
}
public List<Item> findItems()
{
return getAllItemsFromJpa();
}
// Remaining Locator and JPA methods skipped
}
当我findItems
从 RPC 角度调用 GWT 请求上下文中的方法时,一切似乎都按预期工作,并且我在回调方法中获得了项目列表以在客户端中使用。
但是从持久性的角度来看,实现并没有按预期工作:在服务器端,该方法findItems
按预期调用,从持久性中获取我的项目并返回它们。然后对于每个项目,find
使用项目的 id 调用该方法,当然,一个接一个地从持久性中再次检索项目。
是什么导致 GWT 请求工厂上下文进行这些无用的调用,我该如何防止它这样做?