これまでGWTを用いてAjaxアプリケーションを構築する方法を紹介してきたが、この連載は今回で最後となる。
最終回は、前回と同じ英単語テストアプリケーションを用いて、単語帳データを問題オブジェクトとして受信するAjaxアプリケーションを構築してみよう。しかも今回はデータを一括ではなく、1件ずつ受信するようにしたい。
オブジェクトを受信するためのAPI
前回、JSON形式のデータを受信するには、既存のメソッドにテキスト解析処理を追記するだけでよかったが、オブジェクトを受信するにはAPIを自作しなくてはならない。
この点はJSON形式の場合よりも面倒ではあるが、Javaメソッドとして処理を記述できるため、テキスト解析では処理が複雑になりすぎることが予想される場合など、処理の内容に応じて使い分けていただきたい。
自作するのは以下のa.〜d.の4つで、すべてJavaである。これらはbinディレクトリ以下にコンパイル後のclassファイルを配置してからでなければ実行することができない。詳細はGWTのドキュメント「Remote Procedure Calls」で確認していただきたい。
a. Serviceインタフェース
データ送受信のインタフェース。RemoteServiceインタフェースを継承する。
b. ServiceAsyncインタフェース
Webブラウザ(クライアント)からデータ通信を指示するプロキシクラス用のメソッドを記述する。継承なしの単独APIだが、メソッドシグネチャはa.に対応させる。a.と同じパッケージに配置する。
c. Serviceインタフェースを実装したサーブレット
サーバ側でクライアントにデータを提供する処理を行うクラス(ServiceImpl)。RemoteServiceServletクラスを継承する。パッケージ名のclientの部分をserverとしたパッケージを新たに作成し、そこに配置する。
d. クライアントに提供されるデータを収めるクラス
サーバからクライアントに通信を介してデータを提供するためのクラス。IsSerializableインタフェースを実装する。
なお、a.〜c.の相互の関係は、「RPC Plumbing Diagram」を参照していただきたい。