@IT のサンプル

貧血気味だが確認作業を。(謎
GWTTest1 プロジェクトを作成し、配布されているファイルをコピィ。Warning が出ているが気にせず記事とソースと突き合わせてみる。(ちなみにエラーとしては import しているナニが使われていない、というもの)

applicationCreator で作成されたファイルは以下 (記事においてパケジは jp.littlesoft.gwttest1 となっています。)

  • src/jp/littlesoft/Gwttest1
  • src/jp/littlesoft/Gwttest1/client
  • src/jp/littlesoft/Gwttest1/public

上記 3 つはディレクトリとなっている。記事にも解説あり。

  • src/jp/littlesoft/Gwttest1/ImageSearchClient.gwt.xml
  • src/jp/littlesoft/Gwttest1/public/ImageSearchClient.html
  • src/jp/littlesoft/Gwttest1/client/ImageSearchClient.java
  • src/jp/littlesoft/Gwttest1/ImageSearchClient.launch
  • src/jp/littlesoft/Gwttest1/ImageSearchClient-shell.cmd
  • src/jp/littlesoft/Gwttest1/ImageSearchClient-compile.cmd

上記ファイル群のざっくり解説も @IT にあり。

jp.littlesoft.gwttest1 パケジのルートには"モジュールxml"と呼ばれる GWT 構成情報ファイルが配置される、との事。上記の例で言えば、ルートディレクトリの置かれている ImageSearchClient.gwt.xml がそれに当たると思われる。
又、サブパケジとして client および server というものが用意され、それぞれクライアント側、サーバ側の java ソースやらクラスファイルが配置される、との事。上記の例では、client/ImageSearchClient.java がそれに当たると思われる。
又、public フォルダには静的リソースが配置されるとの事。上記の例では、public/ImageSearchClient.html がそれに当たると思われる。Web モードにコンパイルすると出力先にコピーされる、とあるが何処にトバされるのか、その内判明するかな??

作成されたファイル達を覗いてみる

プロジェクト作成したての初期状態では、@ITJavaをJavaScriptに変換するグーグルのツールを使ってみようで紹介されている状態と同じ。で、この状態で eclipse 内で Run → Run で実行すれば_ホステッドモード_で動く、と。
上記ページの 5 頁目にホステッドモードにおける動作の解説やら Web モードへのコンパイルの方法等が記述されている。初期状態のナニについては GWT を解説しているコンテンツを見れば大体の意味は分かるんですが、SICP っつーか lisp 見なれたおかげで以下のようなコードは一目で意味が分かりますな。

 public void onModuleLoad() {
   final Button button = new Button("Click me");
   final Label label = new Label();

   button.addClickListener(new ClickListener() {
     public void onClick(Widget sender) {
       if (label.getText().equals(""))
         label.setText("Hello World!");
       else
         label.setText("");
     }
   });

(以下略)

ま、それは良いとして配布されているファイルをコピー。

ウィジェットとパネル

昔、unix な環境で UI マワリの製造の経験がある (uim/x とかいうツールだった。RS/6000 です)。で、このウィジェット、とかパネル (パネルだったかなぁ....) 等とゆー用語は馴染んでいる感じ。このあたりは AWT やら Swing なんかで UI 作っていた人は、より馴染みがあるんだろうなぁ、と思いつつ。

ソースをべたっと貼るか、とも思っていたのですが、基本的に UI 部分でしているのは画面設計 (ここにて解説) に沿って必要部品を定義して RootPanel 上に配置している作業がほとんどになっている。
widget を配置していくと同時に CSS っぽい関数がナニですが、これは仕方無いのかなぁ、と言いつつも最後らへんで DOM な ID 付けてたりなんかするなぁ。このあたりも若干発展途上なソレを感じますな。
又、この記事の一番最後の頁にて解説かある通り、リサイズ時の処理の方法も何と言えば良いのか分かりませんが昔風。(褒め言葉になっていないかも
と、言いつつ各メソドが CSS (ってか DOM??) に馴染んでる方々は直感的に使途を想像できそうな名前になっているな、と。しかしこれって VB とゆーか uim/x 風に widget を切り貼りした画面イメージから雛型ソースを生成なんて結構ありそうなツールな気もするんですが、まだそのあたりの整備は発展途上なのかなぁ。(欲しけりゃ作れ、なツッコミは略でお願いします

とゆーコトで Web サービスとのやりとりの実装なんですが、ざっくりベースで以下のような感じになっている。

  • server 側で Web サービス側から取得した検索結果セットを格納するクラスを作成
  • com.google.gwt.user.client.rpc.RemoteService を implement した interface を作成
  • interface においては、上記検索結果セットなオブジェクトを返却する execute という名前のメソドを定義
  • サーバ側サービスメソドとして、com.google.gwt.user.server.rpc.RemoteServiceServlet を継承しつつ、上記の interface を実装したクラスを作成 (execute の実装)

上記は server と Web サービスとのやりとり (基本的には HTTP なナニ) を規定する部分で、これ以外に server(servlet) と client の非同期な動作を規定しておく必要があるはず。
# このあたり、実装確認をしないまんま類推でかいてますので念の為。

解説によれば、servlet 側と client 側でのやりとりなソレは GWT RPC という機構によって実装されている模様。基本的にはシリアライズされた java オブジェクト、との事。あ、成程ね。検索結果セットなオブジェクトが RPC で client に渡されるのか。

うー。非同期インターフェースだの代理だのとゆー部分で若干ヒッカカッてるなぁ。

ここは実装とソースだのパケジだの、な部分を整理してみる必要があるだろな。(てか、それ以前にこの記事よく読め、だな