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に入ってます)
となっています。