-1

可能重复:
GWT 中的 requestfactory 和 findEntity 方法

当我使用带有 ServiceLocator 和 Locator 构造的 RequestFactory 请求实体列表时,GWT 执行 n+1 个 SQL 调用。

//HcpcsDAOBean 
@Singleton
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class HcpcsDAOBean {

  @Inject
  @DatasourceAnnotation
  EntityManager em;

  ....    
  public Hcpcs find(Long id) {
    return em.find(Hcpcs.class, id);
  }
}

//BeanLocator
public class BeanLocator  implements ServiceLocator {

  @Override
  public Object getInstance(Class<?> clazz) {
    return lookupBean(clazz);
  }
  @SuppressWarnings({"unchecked", "CallToThreadDumpStack"})
  public static <T> T lookupBean(Class<T> clazz) {
    try {
      return (T) InitialContext.doLookup("java:module/" + clazz.getSimpleName());
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
  }
}

//RequestFactory and RequestContext
public interface AppRequestFactory extends RequestFactory{

  @Service(value=HcpcsDAOBean.class, locator=BeanLocator.class)
  interface HcpcsServiceRequest extends RequestContext{
     Request<Void> persist(HcpcsProxy hcpcsProxy);
     Request<Void> remove(HcpcsProxy hcpcsProxy);
     Request<List<HcpcsProxy>> findEntries(int firstResult, int maxResult );
     Request<List<HcpcsProxy>> findAll();
  }

  HcpcsServiceRequest hcpcsServiceRequest();

}
4

1 回答 1

0

我认为这与这里的问题相同:GWT 中的 requestfactory 和 findEntity 方法

尽管如此,这也适用于不使用定位器或服务定位器的构造。

我有同样的问题并理解,RequestFactory 需要检查实体是否处于活动状态,但这对于 findAll() 之类的调用来说确实是不必要的,或者我错过了什么?

有没有办法禁用某些服务方法的 isLive 检查?例如,我知道我可以覆盖定位器中的 isLive 方法并返回 true,但这会禁用对每个服务调用的检查,并且我不想错过 Persist 或删除操作的此功能。

于 2011-08-02T06:47:41.373 回答