Ajadと名付けてみました

Silverlightはサーバ側もブラウザのプラグイン上で動くクライアント側もC#で記述することができるらしい。

思い返してみると、Javaではそのようなソリューションはあまり無い。ような気がする。

ZKがそれに近いような感覚でコーディングできるような気がするが、あくまでもJavaが動くのはサーバ上である。

GWTにしても然り。

JavaFXも、ゆっても所詮Java FX ScriptなのでJavaとは似て非なるものである。

Ajaxにしてもクライアント側の動きはJavaScriptで書かないといけないし、FlexにしてもActionScriptで書かないといけない。

まぁJavaScriptなりActionScriptなりを覚えて書けばいいのかもしれないけど、一つの言語でサーバ側もクライアント側も書けるというのはやはりそれなりに魅力的な気がするし、マイコミジャーナルとか見てると「JavaScriptいらず」をウリにしているAjaxソリューションがしょっちゅう話題になってるような気がするので、やっぱなんだかんだでJavaJavaScriptの両方を使いこなせるようになるのはそれなりに敷居が高く、JavaScriptを書かずにJavaだけでやれることに対する魅力はJava業界もそれなりに感じているような気がする。

なんとかJavaでも、Silverlightのようにサーバ側もクライアント側も同じ言語(Java)で書けないものか。

そんなことを考えているうちに、こんな記事を思い出した。

何もJavaScriptXMLHttpRequestを使わずとも、アプレットのURLオブジェクト関連を使えばサーバ側と非遷移で通信できるのである。これで後DOM操作ができれば、FlexSilverlightのような本格的なRIAとまではいかずとも、AjaxのようなライトウェイトなRIA(?)は作成できるので、それはそれでそれなりに可能性が広がって結構面白いかもと思っていると、やっぱりあった。

まぁ知っている人は昔から知っていて一部では利用されていたようですけど。

そこで私は、あえてここで勝手に、JavaScriptXMLHttpRequestの代わりにアプレットのURLオブジェクト関連を、JavaScriptのDOM操作機能の代わりにアプレットのJSObjectやDomServiceを使ってDOM操作を行うことにより、画面遷移を伴わずに動的なWebアプリケーションを作成するAjaxライクな技法を、「Asynchronous JavaScript And XML(Ajax)」風に

「Asynchronous Java Applet and DOM(Ajad)」

と名付け、あえてAjaxでは無くAjadで、Javaだけで何処までAjaxチックなことができるかを興味本位で検証してみることにしました。

さしあたって、Ajadの方がAjaxよりもメリットがありそうな点として、ぱっと思いつくところは、

  • Javaだけでできる
    • Java屋以外には大したメリットでも無さそうだけど
  • JavaなのでそれなりにIDEが充実
    • JavaScriptIDEもそれなりには出てきたけど、やっぱりJavaにはまだまだ及ばない。
    • というか、動的言語EclipseのJDTのようなものを求めるのはそもそも無理があるのかも?
  • BigDecimal等の高精度な型が利用できる
    • これはAjaxに比べて割とアドバンテージになりそう
  • 例外処理等々もさすがにJavaScriptに比べるとJavaの例外処理機構の方がやりやすそう。

こんなところでしょうか。逆にデメリットとしてぱっと思いつくところとしては、

  • クライアントにJavaプラグインが入ってるとは限らないし、Javaのバージョンが同じとも限らない
    • でもまぁこれは、JavaScriptにしたところでブラウザ側でオフにされる可能性もあるし、ブラウザ間の互換性も微妙なので、AjaxもAjadも同じか
  • アプレットの初期ロードに時間がかかる
    • これは確かにデメリットだが、Gmailとか見てるとAjaxアプリでも初期ロードに時間がかかるものはそれなりに時間がかかるので、さほど気にする必要も無いかも。
  • デバッグが意外と大変そう
    • IEのあのデフォルトのスクリプトエラーに比べるとさすがにJavaコンソールの方がデバッグしやすそうだけど、firebugsみたいな実際にブラウザ上で動くデバッグソリューションが無いとお遊びならともかく業務アプリを作るにはちょいつらい。
    • けど、業務アプリとかだとIEばりばりで往々にしてそもそもIEでしか動かないJavaScriptを書いてることも多いので、やっぱりAjaxもAjadもどっこいどっこいの可能性も。
  • キャッシュ管理がめんどくさそう
    • こればっかりはクライアントのJREの設定次第かも・・・
    • appletタグとかobjectタグとかembededタグとかの設定でなんとかなってくれるとうれしいのだが

なところでしょうか。そんな訳で、明日から早速、さしあたってAjadで以下のようなことに挑戦してみようと思います。

  • クライアント内でのシンプルなDOM操作
  • リンクをクリックした際に、遷移せずにDOM操作でdivタグ内にリンク先のHTMLを読込む
  • サブミット(POST)した際に、遷移せずにDOM操作でdivタグ内にPOST後の遷移先を読込む
  • 動的コンボ

とりあえず上記あたりができれば、色々と応用すればほぼAjaxと同等のことができる・・・はず。