2010년 10월 8일 금요일

RpcRpoxy의 load메소드 내부에서 서비스 메소드콜에 대한 사용자 에러표시

1. 아래 소스는 일반적인 RpcProxy내의 load메소드 호출에 대한 예이다.
// RpcProxy 선언
private RpcProxy<BaseListLoadResult<LoginUserInfo>> proxy;

// RpcProxy 생성
proxy = new RpcProxy<BaseListLoadResult<LoginUserInfo>>() {
  public void load(Object loadConfig, 
                   AsyncCallback<BaseListLoadResult<LoginUserInfo>> callback) {
    service.getSystemGroupList((BaseListLoadConfig) loadConfig, param, callback);
  }
};
2. 그러나 위와 같은 경우 서버쪽에 어떤 문제가 발생하여도 Client쪽에 문제에 대해 알려줄 길이 없다. 이는 기본적으로 Rpc를 통해 서버 메소드를 호출할 경우 아래와 같이 코딩하는데 Proxy의 load메소드내에서는 아래와 같이 코딩하려면 어떻게 해야할 지 알아보자.
service.getSystemGroupList((BaseListLoadConfig) loadConfig, param,
                           new AsyncCallback<BaseListLoadResult<LoginUserInfo>>(){
  @Override
  public void onFailure(Throwable caught) {
      MessageBox.alert("Alert", caught.getMessage(), null);
  }
  @Override
  public void onSuccess(BaseListLoadResult result) {
    System.out.prinltn("성공");
  } 
});
3. 변경된 소스를 보자 new 연산자를 통해 AsyncCallback를 생성하였고 load메소드에서 인자로 받은 callback에게 내부의 onFailure(), onSuccess()메소드의 결과를 알려주도록 변경하였다. 단 load메소드의 AsyncCallback는 final로 변경해야한다.
proxy = new RpcProxy<BaseListLoadResult<LoginUserInfo>>() {
  public void load(Object loadConfig, final AsyncCallback<BaseListLoadResult<LoginUserInfo>> callback) {
    service.getSystemGroupList((BaseListLoadConfig) loadConfig, param, 
      new AsyncCallback<BaseListLoadResult<LoginUserInfo>>(){
      @Override
      public void onFailure(Throwable caught) {
        // load의 callback인자에게 throw된 에러를 전달해주자.
        callback.onFailure(caught);
        MessageBox.alert("Alert", caught.getMessage(), null);
      }
      @Override
      public void onSuccess(BaseListLoadResult<LoginUserInfo> result) {
        // load의 callback인자에게 결과를 전달해주자.
        callback.onSuccess(result);
      } 
    });
  }
};

4. 최종 수정된 코드를 실행해보자

댓글 6개:

  1. 아.. 여기서 댓글 다는구나.

    답글삭제
  2. 아.. 기초가 없으니까 강의 따라가기도 벅차네요..
    계속 막히고...

    혹시 강좌 파일을 공개하실 생각 없으신가요..
    파일구조같은거라든가.. 보면서 공부하면 좋을꺼 같은데.ㅠ

    답글삭제
  3. 메일주소를 알려주시면 프로젝트 파일을 보내드리겠습니다.
    보시고 하나씩 실행해보시면 금방이해가 되실듯 합니다.

    답글삭제
  4. 아...죄송합니다..이제서 확인했네요.ㅠ
    보내주신다면 정말 감사합니다..
    cmk5600@gmail.com 이구요..

    열심히 공부해 보겠습니다..

    답글삭제
  5. 메일로 파일 보내드렸습니다.
    확인해보세요^^

    답글삭제
  6. rpcproxy부분이 이해가 잘 안가네요..
    죄송한데...소스를 보내주시면 감사히 보겠습니다.
    kojoscap@gmail.com

    답글삭제