先週(2013/09/22・013/09/26)開催されたJavaOne カンファレンスの中で、OracleはProject Avatarのオープンソースリリースを発表した。Avatarは、アプリケーション開発者から『マイナーなJavaScriptの知識が必要』と考えられている『モダンHTML5アプリケーション』の開発にフォーカスしたアプリケーションフレームワークである。
Project Avatarは、HTML5ベースのクライアントとクラウドベースのJava EEサービス間のデータ連携をゴールとして、2011年のJavaOneで初めて公開された。OracleのバイスプレジデントであるAnil Gaur氏へのインタビューの中で、Gaur氏は、Avatarの目的は『HTML5アプリケーションを開発する上で、Javaがもっとも生産性が高い環境であり続ける』ようにすることであると述べている。Avatarのシステム構成は、新世代のクラウドコンピューティング環境の要求を満たすことをゴールとして開発された。そして、2012年のQCon NYにおいて、Arun Gupta氏はAvatarを『動的なリッチクライアントのための完璧なソリューション』であると紹介した。
Avatarで作られたアプリケーションは、Java 8実行環境上のコンテナ(Java EE 7に準拠)で実行されるように設計されている。このフレームワークは、クライアント・サーバ間での通信に必要な抽象化されたコードを用いて、HTML5ベースのアプリケーション開発をシンプルにすることを目指している。 さらに、ウィジェットやデータバインディングはViewレイヤーコンポーネントで利用される。このコンポーネントは、フロントエンドJavaScriptのデータ管理をシンプルにするものである。フレームワークは、サーバから返却された動的なコンテンツを、開発者がJava EEコンテナのExpression Language (EL)とともに利用できるようサポートしている。プロジェクトのドキュメントによると、『EL式を使うことで、動的なページを作るためのコントローラロジックをJavaScriptに記述せずに済む』ということである。
Avatarは、サーバサイドのJavaScriptコードにNashhorn(Java 8のECMAScript実装)を使えるようにする。JavaScriptで書かれたサービスコンポーネントは、そのサービスとアプリケーションのコンテキストを統合するAvatarスクリプティングコンテナ(Avatar.js)によって拡張されている。サーバ上のJavaScriptに対するフレームワークのサポートは、エンタープライズのWeb開発における『JavaScriptの役割は非常に広範囲に渡っている』という認識をもとにしている。Avatarプロジェクトは『この分野の(クライアントサイドフレームワークの)多様さは、いまや混乱をきたしており、また非常に速いペースで拡大している』と述べている。また、そのことは『非常に高いJavaScriptのスキルセットが必要である』と開発者に認識させているという。Avatarプロジェクトに言わせると、そうした思い込みはすなわち『エンタープライズ系の開発者には、(そういったスキルを持つ人は)めったにいない』といったものだという。
Avatarフレームワークは、『WebアプリケーションのすべてのUIロジック―Model、View、そしてController―をサーバからクライアントへ』移すというその構造パターンを『シンサーバアーキテクチャ』と名付けている。このアーキテクチャでは、バックエンドの役割が『ホストしているアプリケーションのコントローラロジック』から、データを供給する『RESTやWebSocketなどのブラウザベースクライアントが扱える標準的なプロトコル』へと変化する。
Avatarのクライアントサイド側は、アプリケーションのサービスレイヤのロジックから、Viewコンポーネントの役割を切り離すことを目的として設計されている。Avatarプロジェクトは『ViewとServiceのコンポーネントは、開発者がそれらをアラカルト的に使えるよう、密結合を避けなくてはならない』と述べている。AvatarのViewレイヤーはHTML5で開発されており、『最小限のJavaScriptコード』のみで『シングルページアプリケーション』を実装することができるショートハンドを提供している。ドキュメントによると、開発者は、ただ自分たちのViewを作るためにどうやって『サンプルコードをコピーしたり編集したり』すれば良いのかを知るだけで良いのだという。
AvatarのソースコードはプロジェクトのGitリポジトリから自由に利用することができ、また多くのサンプル・アプリケーションがドキュメント内のチュートリアルの項目で提供されている。