GWT-RPCプログラミング

GWTの特徴の一つに、RPCを利用したサーバクライアントプログラムが容易に作成できることです。 RPCとはRemote Procedure Callの略で、遠隔にあるプログラムのメソッドを呼び出す処理を意味します。つまり、サーバー側で定義したメソッドをクライアント 側で呼び出すことができます。
これを実現するためには、
  • サーバ用サービスインタフェースファイル ・・・ クライアント側に設置
  • クライアント用サービスインタフェースファイル ・・・クライアント側に設置
  • サービスクラスファイル ・・・ サーバ側に設置。メソッドの実体記述
3つのファイルが必要です

以下のサンプルは、mymethodというメソッドを追加する場合の書き方です。

サーバ用サービスインタフェースファイル(Javaインタフェース)

import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;

/**
* The client side stub for the RPC service.
*/
@RemoteServiceRelativePath("testservice")
public interface TestService extends RemoteService {
public String myMethod(String s);


ここでは、呼び出すメソッドを定義します。ここで、
@RemoteServiceRelativePath("testservice")
は重要な役割を意味します。"testservice"は、このサービスを呼び出す際の名前です。触らないでください。

サービスクラスファイル(Javaクラス)
public class TestServiceImpl extends RemoteServiceServlet implements TestService {
public String myMethod(String s) {
// Do something interesting with 's' here on the server.
return "Server says: " + s;
}

}
ここでは、呼び出すメソッドを実装します。


クライアント用サービスインタフェースファイル(Javaインタフェース)
import com.google.gwt.user.client.rpc.AsyncCallback;

public interface TestServiceAsync {
    public void myMethod(String input, AsyncCallback<String> callback);
}
先ほどのクライアント用インタフェースとほとんど同じですが、赤で書いたところが違います。



クライアント側呼び出しサンプルファイル(Javaクラス)

自分が myMethodを呼び出したいと思っている箇所(タイミング、イベント)で下記の記述をする
//事前にインスタンスを宣言しておく(毎回宣言するのではなくて、クラス変数にしておくと良い)
GreetingServiceAsync greetingService = GWT
.create(GreetingService.class);

//サーバ側のメソッドmyMethodを呼び出している
greetingService.myMethod("testtest",
new AsyncCallback<String>() {
    public void onFailure(Throwable caught) {

    }
    public void onSuccess(String result) {
    
    }
});

ちょっとわかりにくいですが、上記処理の概要は、
  • GWT.createメソッドを利用して、呼び出すサービスを生成
  • 呼び出しに成功したら、onSuccessメソッド内処理を実行(引数resultに戻り値が入っています)
  • 呼び出しに失敗したら、onFailureメソッド内の処理を実行(エラー情報が 引数 caughtに入ってます)
となっています。
Comments