戦略法の提案 - 株式会社フォアフロンティア

Ajaxフレームワークの比較
株式会社 フォアフロンティア
たにあん
説明の範囲

今回の技術発表会の説明範囲としては、Ajax開発におけるプロ
グラム言語と連携するフレームワークについて比較し、特にDWR
について説明を行なうものとします。
Ajaxフレームワーク一覧

JavaベースのAjaxフレームワークにはさまざまなものがあり以
下にその一部を挙げます。
・DWR
・Seam Remoting
・jMaki
・RichFaces
・ICEFaces

前項に挙げたAjaxフレームワークはそれぞれタイプが異なり
3種類に分ける事ができます。
<Ajax呼び出しタイプ>
・DWR
・Seam Remoting
<既存Ajaxツールキットのラッパータイプ>
・jMaki
<JSF拡張タイプ>
・RichFaces
・ICEFaces
Java Ajaxフレームワークの比較

Java Ajaxフレームワークをタイプ別に分け、DWR、jMaki
RichFacesの3つに焦点をあて、比較、解説を行ないます。
<Ajax呼び出しタイプ>
<既存Ajaxツールキットの
ラッパータイプ>
<JSF拡張タイプ>

DWR(Direct Web Remoting)
・どんなもの?
Ajax独特の複雑なJavaScriptを必要とせず,JavaScript内で「クラス名.メソッド名」と
記述することにより,Javaの該当メソッドを呼び出すことが出来きる、サーバー側の
リモート・オブジェクトの 呼び出しに特化したフレームワーク。
・利点
フレームワークによって自動生成されたJavascriptを読み込む以外には画面側に
制約がない ため、既存のAjaxツールキットと自由に併用することができます。
シンプルで余計な機能を提供しない分だけ、幅広く連携することが出来ます。
・欠点
DWRがカバーする範囲は、基本的には「サーバのロジックを呼び出し、戻り値を
受け取る」までとなるため、その値を画面側でどのように利用するかはについては、
Javascriptでそのロジックを記述しなければなりません。
また、リッチなUIコンポーネントなども用意されていませんので、操作性の高い画面を
実現するには他のツールキットと併用する必要があり、別途そのツールキットの
知識も必要となります。

jMaki(じぇーまき)
・どんなもの?
prototype.js、jQuery、Dojo、script.acul.us、Yahoo UI Libraryなどのさまざまな
ライブラリ(フレームワーク)をラップし、Java、Ruby、PHP等からから簡単に利用
できるようにするライブラリ(フレームワーク)です。
・利点
カスタムタグを利用してJavaScriptライブラリを利用するため、JavaScriptを
意識せずに、Ajaxアプリケーションを記述できるようになる。
・欠点
さまざまな既存Ajaxツールキットのラッパーとしての動作を想定しているので、
カスタムタグは汎用的な設計となっています。
その為、1つのタグで、描画されるUIコンポーネントの種類や詳細な設定をすべて
まかなおうとするので、属性値が多くなっている。
また、当然各UIコンポーネントごとにどのような設定項目があるかは異なり、
それを覚えていく 必要とAjaxツールキット自体の知識も必要となります。

RichFaces
・どんなもの?
JSFを拡張し、独自のカスタムタグで、Javascriptを記述することなくAjax通信や
リッチなUIコンポーネント(トグルパネルやツリーメニュー、ドラッグ&ドロップ) を
実現することができるようになっており、基本的にカスタムタグの使い方さえ
覚えれば、Ajax+リッチUIコンポーネントのWebアプリケーションが作成できるように
なっています。
・利点
基本的にJavascriptは記述せず、用途にあったカスタムタグを記述するだけで、
Ajaxを利用したリッチなアプリケーションを作成することができます。
・欠点
抽象度の高い技術(JSF)をベースにし、さらにその中にJavascriptを隠蔽している
為、
既存のAjaxツールキットとの連携や、Javascriptを記述する場合などには逆に
制約があります。
・それぞれのフレームワークのタイプは以下のような位置づけとなります。
・「Ajax呼び出し専門系」
他のAjaxツールキットとの連携など、カスタマイズ性を備えたタイプ
・「既存Ajaxツールキットのラッパー系」
カスタマイズ性と生産性のバランスがよいタイプ
・「JSF拡張系」
カスタマイズ性よりもわかりやすさや生産性重視のタイプ
◆今回は上記の中で「Ajax呼び出し専門系」の技術であるDWRについて
説明いたします。
DWRについて

DWRの概要
DWRはDirect Web Remotingの略でAjaxアプリケーションをJavaで
開発するためのJavaScriptとJavaの連携を行なうフレームワークです。
以下、DWRの全体像となります。
(http://itpro.nikkeibp.co.jp/article/COLUMN/20070406/267692/参照)

DWRの特徴
・リモートオブジェクトの呼び出し
JavaScript内で「クラス名.メソッド名」と記述することによって,Javaの該当メソッドを
透過的に呼び出すことが出来ます。
以下、呼び出しイメージとなります。
(http://itpro.nikkeibp.co.jp/article/COLUMN/20070406/267692/参照)
・リバースAjax
Java(サーバーサイド)からJavaScript(クライアントサイド)を非同期に呼び出す,
サーバープッシュを実現する機能を備えています。
当機能には3つの通信方式(以下、表参照)があり、どの方式を採用するかはDWRが
自動的に判断し利用する仕組みになっています。
通信方式
説明
Comet
長期間接続したままにする方式
Polling
定期的に通信を発生させる方式
Piggyback 他の通信時にデータを相乗りさせる方式
・他のフレームワークとの連携
DWRは,Spring,Struts,WebWork,JSF,Hibernate,Beehive,EJB3との連携機能を
あらかじめ用意しています。
(DWRの定義ファイルをSpringのBean定義ファイル内に記述できる等)
多少の拡張により,Seasar2と連携させることも可能。
・テストの容易性
DWRを利用するためのweb.xml内でDWRから提供されているサーブレットの
デバッグ・モー ドを有効化することによりWebブラウザから
「http://コンテキストルート/dwr/」にアクセスすると,以下の画面が表示されます。
(http://itpro.nikkeibp.co.jp/article/COLUMN/20070406/267692/参照)
※sayHelloの引数に“DWR2.0”を入力して実行した画面
・セキュリティ
Ajaxでは懸念事項になりやすいXSS(クロスサイト・スクリプティング),CSRF(クロスサイト・
リクエスト・フォージェリ)の攻撃を抑えやすい構造になっています。
セキュリティのため,リバースAjaxなどの一部機能はデフォルトでは利用できない設定に
なっており,利用する場合は明示的にweb.xmで設定を行う必要があります。
・マルチブラウザ対応
JavaScriptはWebブラウザによって方言があり,これがAjax開発では大きな妨げとなるが、
DWRがライブラリとして提供するJavaScriptや動的に生成するJavaScriptは,IE、
FireFox、Opera、Safari、Konquerorなど複数のブラウザに対応しています。
・アノテーションのサポート
DWRは,アノテーションをサポートしており,dwr.xmlに設定する内容をJavaコードに
埋め込むことも可能になっています。
以上