2011-10-08 4 views
0

GWT (2.4), App Engine (1.5.4) 및 Objectify (3.0)를 사용하는 응용 프로그램을 빌드하고 있습니다. 내 응용 프로그램이 진화함에 따라 더 많은 도메인 클래스를 추가하고 있으며 더 많은 서비스를 작성하게됩니다. 예를 들어, 모두 CRUD 작업을위한 코드를 가지고 있어야합니다. 그래서 나는 다음과 같은 예외를GWT의 Generics

자바를 얻고있다

//Domain extends BaseDomain 

public static final GenericServiceAsync<Domain> domainService = 
GWT.create(GenericService.class); 

를 사용하여 내가 클라이언트 측에서 그것의 인스턴스를 생성하려고 할 때

//Client side 
@RemoteServiceRelativePath("Generic") 
public interface GenericService<T extends BaseDomain> extends RemoteService { 
.... 
} 

public interface GenericServiceAsync<T extends BaseDomain> { 
... 
} 

//ServerSide 

@SuppressWarnings("serial") 
public class GenericServiceImpl<T extends BaseDomain> extends 
RemoteServiceServlet implements GenericService<T> { 

//implementation 

} 

과 같이 일반 서비스를 만들려고. lang.RuntimeException : 'com.planner.client.GenericService'에 대한 지연 바인딩이 실패했습니다 (필요한 모듈을 상속하는 것을 잊었습니까?)

내가 뭘 잘못하고 있는지, 어떤 조언이나 고맙기는 모르겠다.

+1

제네릭에 문제가없는 경우가 많습니다. 제네릭없이 제대로 작동하는지 확인할 수 있습니까? GenericService 인터페이스가 GWT가 관리하는 패키지에없는 경우가 있습니다 (클라이언트/공유 패키지가 아닌 서버 패키지에있는 표준 레이아웃을 사용하는 경우) – gkamal

답변

1

귀하의 문제는 서버 측 서비스 구현에서 제네릭을 사용하여 발생한다고 생각하지 않지만 해당 서비스를 잘못 구성한 것으로 보입니다. 다음 사항을 확인하십시오 : 당신은 GenericService

  • 당신은 GWT의 RemoteServiceServlet 클래스를 해당 인터페이스를 구현하고 확장 GenericService의 적절한 서버 측 구현을 위해 만든 적절한 GenericServiceAsync 인터페이스가

    • 그 web.xml 파일에서 서비스를 servlet으로 적절히 구성해야합니다. servlet-mapping 태그의 값은 다음과 같아야합니다.

      <servlet-mapping> 
      <servlet-name>genericServiceServlet</servlet-name> 
      <url-pattern>/[GWT-module-name]/Generic</url-pattern> 
      

    [GWT-모듈 이름] 당신은 GWT 설명자 파일에서 GWT 프로젝트 (xxx.gwt.xml라는 하나에 준 이름입니다

    경우 경우 모듈의 태그 이름 변경은-해당 속성의 값보다, 속성했다하면 일반적인 서비스를 만들고 싶어 GWT 모듈 이름) 및 "일반"는 보조 노트로 또한

    @RemoteServiceRelativePath("Generic")에 사용되는 값입니다 yoru에게 있습니다 즉, 모든 도메인 객체를 BaseDomain 유형으로 처리하면 해당 유형의 인수로 간주되는 메소드가 있어야하며 하위 유형이라고도하는 제네릭을 사용할 필요가 없으며 다형성이이를 처리합니다.