Ajadと名付けてみました
Silverlightはサーバ側もブラウザのプラグイン上で動くクライアント側もC#で記述することができるらしい。
思い返してみると、Javaではそのようなソリューションはあまり無い。ような気がする。
ZKがそれに近いような感覚でコーディングできるような気がするが、あくまでもJavaが動くのはサーバ上である。
GWTにしても然り。
JavaFXも、ゆっても所詮Java FX ScriptなのでJavaとは似て非なるものである。
Ajaxにしてもクライアント側の動きはJavaScriptで書かないといけないし、FlexにしてもActionScriptで書かないといけない。
まぁJavaScriptなりActionScriptなりを覚えて書けばいいのかもしれないけど、一つの言語でサーバ側もクライアント側も書けるというのはやはりそれなりに魅力的な気がするし、マイコミジャーナルとか見てると「JavaScriptいらず」をウリにしているAjaxソリューションがしょっちゅう話題になってるような気がするので、やっぱなんだかんだでJavaとJavaScriptの両方を使いこなせるようになるのはそれなりに敷居が高く、JavaScriptを書かずにJavaだけでやれることに対する魅力はJava業界もそれなりに感じているような気がする。
なんとかJavaでも、Silverlightのようにサーバ側もクライアント側も同じ言語(Java)で書けないものか。
そんなことを考えているうちに、こんな記事を思い出した。
何もJavaScriptのXMLHttpRequestを使わずとも、アプレットのURLオブジェクト関連を使えばサーバ側と非遷移で通信できるのである。これで後DOM操作ができれば、FlexやSilverlightのような本格的なRIAとまではいかずとも、AjaxのようなライトウェイトなRIA(?)は作成できるので、それはそれでそれなりに可能性が広がって結構面白いかもと思っていると、やっぱりあった。
まぁ知っている人は昔から知っていて一部では利用されていたようですけど。
そこで私は、あえてここで勝手に、JavaScriptのXMLHttpRequestの代わりにアプレットの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が充実
- JavaScriptのIDEもそれなりには出てきたけど、やっぱりJavaにはまだまだ及ばない。
- というか、動的言語にEclipseのJDTのようなものを求めるのはそもそも無理があるのかも?
- BigDecimal等の高精度な型が利用できる
- これはAjaxに比べて割とアドバンテージになりそう
- 例外処理等々もさすがにJavaScriptに比べるとJavaの例外処理機構の方がやりやすそう。
こんなところでしょうか。逆にデメリットとしてぱっと思いつくところとしては、
- クライアントにJavaプラグインが入ってるとは限らないし、Javaのバージョンが同じとも限らない
- でもまぁこれは、JavaScriptにしたところでブラウザ側でオフにされる可能性もあるし、ブラウザ間の互換性も微妙なので、AjaxもAjadも同じか
- アプレットの初期ロードに時間がかかる
- デバッグが意外と大変そう
- キャッシュ管理がめんどくさそう
- こればっかりはクライアントのJREの設定次第かも・・・
- appletタグとかobjectタグとかembededタグとかの設定でなんとかなってくれるとうれしいのだが
なところでしょうか。そんな訳で、明日から早速、さしあたってAjadで以下のようなことに挑戦してみようと思います。
- クライアント内でのシンプルなDOM操作
- リンクをクリックした際に、遷移せずにDOM操作でdivタグ内にリンク先のHTMLを読込む
- サブミット(POST)した際に、遷移せずにDOM操作でdivタグ内にPOST後の遷移先を読込む
- 動的コンボ
とりあえず上記あたりができれば、色々と応用すればほぼAjaxと同等のことができる・・・はず。