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に入ってます)

となっています。