ZKを提供するPotixは、JavaベースのAjaxアプリケーションフレームワークZKのバージョン6.0を発表した。ZKはオープンソースのJavaフレームワークであり、開発者はJavaScriptを書かずにリッチインターネットアプリケーションを作成できる。公式サイトにはデモとは別に、実際にZKを使っているアプリケーションが紹介されている。
ZKはGoogle Web Toolkitと似た方法で、JavaScriptとHTMLを抽象化して、サーバサイドのビジネスロジックだけに注力できるようにする。ZKはこれをサーバサイドのイベントエンジンを実装し、クライアント側のJavaScriptエンジン(つまりブラウザ)を利用することで実現する。サーバサイドのデータとクライアントの同期は完全に自動化されている。プログラマはSwingのようなディクストップ用のフレームワークのイベントモデルを使って完全なアプリケーションを構築できる。
新しいバージョンの変更点は、
- 新しい"ZKバインド"システム。MVVMパターンに従う
- jQuery/CSS 3スタイルのセレクタ。サーバサイドで動く
- jQueryが1.4.xから1.6.xへバージョンアップ(性能の改善)
- テンプレートの改善
- Servlet 3 Asynchronous Processing向けのZK Cometのサポート
- 新しいコンポーネント(古いコンポーネントの非推奨化)
- Java 5へのアップグレード
- 新しいデフォルトのテーマの選択
最も重要な変更は新しいデータバインディングシステムだ。ZKはModel View ViewModelパターン(MVVM)に従う。このパターンではViewModelレイヤが値をモデルからビューへ変換し、ユーザが値を変更したら、ビューからモデルへ値を返す。ユーザインターフェイスはマークアップ言語で宣言され、モデルとは完全に分離している。ZKで使われるマークアップはZK User Interface Markup Language (ZUML)と呼ばれている。一方、実際のビジネスロジックはJavaで書かれる。非プログラマがUMLを書き、UIとJavaコードを同時に開発することで生産性を上げる、というのがZKの基本原則だ。このMVVMパターンはZKの専売特許ではない。MozillaのXULやMicrosoftのXAMLもこのパターンを使う。ZKはZK Richletsを利用してJavaコードでGUIを作成することもできる。
"ZKバインド"はEL 2.2の表記を利用できる。従って、ZUMLのコンポーネントとサーバサイドJava Objectsとの間のデータの転送を構成できる。CDIやSeamやSpring Beansとバインドする機能もサポートされている。Java 5へアップグレードしたことで、サーバサイドのコードはジェネリックやタイプセーフを利用できる。すぐにはアップグレードしたくない開発者向けにZK 5の古いバインディングシステムもサポートされている。
jQueryスタイルのセレクタがサーバサイドのJavaコードに導入されるのも新しい特徴だ。これによって、開発者はサーバサイドのコンポーネントに簡単にアクセスできる。下記はZKのドキュメントに記載されている例だ。
Window win; // returns all components with id "myId" under the Window win. (including itself) Selectors.find(win, "#myId"); // returns all components whose .getLabel() value is "zk" (if applicable) Selectors.find(page, "[label='zk']"); // you can assemble the criteria: // returns all labels, whose parent is a window of id "win", and whose value is "zk" Selectors.find(page, "window#win > label[value='zk']");
また、ZK 6.0は非同期リクエストをサポートするServlet 3.0 Specificationを利用する。これによって、コネクション毎にスレッドを立てる実装ではなく、リクエスト毎にスレッドを立てる実装が可能になる。この実装を利用することでスレッドが頻繁にリサイクルされるので、性能が向上するはずだ。
ZK 6.0はライセンス毎にエディションがあり、それぞれダウンロードできる。更なる情報はリファレンスとJavadocsで確認できる。ソースコードはGitHubにある。アップグレードガイドも利用できる。