2

私の問題が何であるか教えていただけますか?いくつかのメソッドを含むGWTRequestContextと、そのメソッドを実装するいくつかのサービスクラスがあります。Devモードで実行すると、RequestContextオブジェクトが検証に合格しません。

RequestContextインターフェースは次のとおりです。

@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)メソッドに問題がありますが、実装しています。

よろしくお願いします。

4

1 に答える 1

2

ログを注意深く読む必要があります。かなり有益です。

CorporateAccountServiceRequest リクエスト コンテキストには、次の署名があります。

InstanceRequest<CorporateAccountProxy, Void> remove();

あなたが持っているCorporateAccountServiceで

public void remove(CorporateAccount corporateAccount)

CorporateAccountServiceRequest はクライアント側のサービスのプロキシ (インターフェースを表す) であるため、メソッドは一致する必要があります。それらが一致しない場合、それは問題ありません。他のログもこのようなものだと思いますので、読み続けてください...それを修正するには、次のことを行う必要があります。

  1. それらが一致するようにメソッドを変更してみてください
  2. または、Entity を ACTIVE RECORDS として実装する場合: これは、独自の永続ロジック (remove() で行ったものなど) をカプセル化する Entity であり、すべての永続関連ロジックを Entity クラス自体に配置する必要があります。ただし、@Serice アノテーションが Service 実装ではなく Entity クラスをターゲットにしていることを確認する必要があります。

REquestFactory を扱うときは、次のルールのいくつかも確認する必要があります。

  1. Entity クラスに @version 列と @Id 列、およびそれぞれのゲッター/セッターがあることを確認してください。バージョン列は、requestFactory によって使用され、クライアント側に表示された状態がサーバー上と同じかどうかを確認します。
  2. サービスでfindXXX(Long id)という静的メソッドを定義していることを確認してください。ここで、XXX はエンティティの名前です。あなたの場合、私はそれが stg のようでなければならないと思います

    public static CorporateAccount findCorporateAccount(Long id)

  3. 信頼を失わないでください;-)

これが役に立ったことを願っています...

于 2011-06-09T16:43:12.700 に答える