gpt4 book ai didi

java - GWT 应用程序无法从我的 RequestContext 接口(interface)中找到匹配方法

转载 作者:行者123 更新时间:2023-11-30 09:48:19 24 4
gpt4 key购买 nike

你能告诉我我的问题是什么吗?我有 GWT RequestContext 其中有一些方法和一些服务类与该方法的实现。当我在开发模式下运行时,我的 RequestContext 对象没有通过验证。

这是 RequestContext 接口(interface):

@Service(value = CorporateAccountService.class, locator = CorporateAccountServiceLocator.class)

public interface CorporateAccountServiceRequest extends RequestContext {
Request<List<CorporateAccountProxy>> findAllCorporateAccounts();
Request<CorporateAccountProxy> findCorporateAccount(Long id);
InstanceRequest<CorporateAccountProxy, Void> persist();
InstanceRequest<CorporateAccountProxy, Void> remove();
}

这是 ServiceLocator 指定的实现:

public class CorporateAccountService {

public void persist(CorporateAccount corporateAccount) {
EntityManager em = EMF.get().createEntityManager();
try {
em.persist(corporateAccount);
} finally {
em.close();
}
}

public void remove(CorporateAccount corporateAccount) {
EntityManager em = EMF.get().createEntityManager();
try {
CorporateAccount attached = em.find(CorporateAccount.class,
corporateAccount.getId());
em.remove(attached);
} finally {
em.close();
}
}

@SuppressWarnings("unchecked")
public List<CorporateAccount> findAllCorporateAccounts() {
EntityManager em = EMF.get().createEntityManager();
try {
List<CorporateAccount> list = em.createQuery(
"FROM CorporateAccount").getResultList();
// force to get all the employees
list.size();
return list;
} finally {
em.close();
}

}

public CorporateAccount findCorporateAccount(Long id) {
EntityManager em = EMF.get().createEntityManager();
try {
return em.find(CorporateAccount.class, id);
} finally {
em.close();
}
}

我收到有关请求上下文验证的错误:

Jun 9, 2011 7:32:10 PM com.dms.admin.shared.CorporateAccountServiceRequest com.google.web.bindery.requestfactory.shared.InstanceRequest remove()
SEVERE: Could not find matching method in com.dms.admin.server.CorporateAccountService.
Possible matches:
void remove(com.dms.admin.server.domain.CorporateAccount )

Jun 9, 2011 7:32:10 PM com.dms.admin.shared.CorporateAccountServiceRequest com.google.web.bindery.requestfactory.shared.InstanceRequest persist()
SEVERE: Could not find matching method in com.dms.admin.server.CorporateAccountService.
Possible matches:
void persist(com.dms.admin.server.domain.CorporateAccount )

Jun 9, 2011 7:32:10 PM com.google.web.bindery.requestfactory.server.ServiceLayerDecorator die
SEVERE: The RequestContext type com.dms.admin.shared.CorporateAccountServiceRequest did not pass validation
Jun 9, 2011 7:32:10 PM com.google.web.bindery.requestfactory.server.RequestFactoryServlet doPost
SEVERE: Unexpected error
com.google.web.bindery.requestfactory.server.UnexpectedException: The RequestContext type com.dms.admin.shared.CorporateAccountServiceRequest did not pass validation

我的 RequestContext 中定义的 persist(CorporateAccount corpAcc) 和 remove(CorporateAccount corpAcc) 方法存在一些问题,但我正在实现它们。

在此先感谢您,非常感谢您的帮助。

最佳答案

您应该仔细阅读日志,它们提供的信息非常丰富:

在您的 CorporateAccountServiceRequest 请求上下文中,您具有以下签名:

InstanceRequest<CorporateAccountProxy, Void> remove();

在您拥有的 CorporateAccountService 中

public void remove(CorporateAccount corporateAccount)

方法必须匹配,因为 CorporateAccountServiceRequest 是您在客户端的服务的代理(代表接口(interface))。如果它们不匹配,那就不行了。我想其他日志也和这个一样,所以请继续阅读……为了更正它,您应该:

  1. 尝试改变方法使它们匹配
  2. 或者如果您想将您的实体实现为 ACTIVE RECORDS:这些实体封装了自己的持久性逻辑(就像您使用 remove() 所做的一样),那么您应该将所有与持久性相关的逻辑放在实体类本身中。但是您必须确保 @Serice 注释针对您的实体类而不是您的服务实现。

在处理 REquestFactory 时,您还应该检查以下一些规则:

  1. 确保您的实体类具有 @version 和 @Id 列及其各自的 getter/setter。 requestFactory 使用 Version 列来检查客户端显示的状态是否与服务器端相同。
  2. 确保您在服务中定义了一个名为 findXXX(Long id)static 方法,其中 XXX 是您的实体的名称。在你的情况下,我想它必须像 stg

    public static CorporateAccount findCorporateAccount(长id)

  3. 不要失去信心 ;-)

我希望这对...有帮助

关于java - GWT 应用程序无法从我的 RequestContext 接口(interface)中找到匹配方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6295567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com