without JavaEEのほうが重いという衝撃的事実

新しいマシンのスピードをいろいろと試してみたが、そもそも1MB程度のwarファイルのデプロイ持間はCore Duo 1.66GHzでも0〜2秒で終わっているので圧倒的な速度は体感はできなかった。

そこですでに出来上がっている世の中のサンプルコードをデプロイするとどうなるのかをテストしてみた。まずサンプルがわかりやすそうなCubbyをテストモデルに。いろんなところで開発されているだろう独自フレームワークはほぼこの内容と一致するはずだからサンプルとしてはもってこいだ。

サンプルコードそのままではNetBeansディレクトリに展開できないのでsrcとlibを違うフォルダへ移動させて、既存のソースコードからプロジェクトの新規作成を行った。Eclipseプロジェクトを使えるようになるプラグインもあったはずだが、それは使っていない。サンプルはたぶん動いてると思う。起動時にワーニングやエラー(saxのパースエラーが出てる)がいくつかでてるけど、動作そのものは問題があるように思えない。


そこで気になったのが起動時間。デプロイそのものは2秒程度で終わってると思う。

だが、そこからアプリケーションが起動するまでが非常に遅いのだ。

新調したマシンでの結果はwar配備で12〜19秒、ディレクトリ配備で11〜17秒となった。これ、旧マシンで起動させたら30秒を余裕で超える大変な起動時間になりそうだ。あまり大規模でないプロジェクトでこの有様ということは実際に業務で扱うプロジェクトではとんでもないことになる。

これだと確かにHot Deploy、Hot Deployというのもうなずける。


たしかにwarベースのservlet以外JavaSEな環境では配備されて実行されてからはじめてコンテナの起動やセットアップを行う。つまり、本来JavaEE環境ならすでに終わっているはずの各種コンテナの初期化等がここから始まるため非常に重いのだ。つまり、DIコンテナ上ですべてセットアップする方法だと毎回アプリケーションサーバーを再起動しているに等しい。

一方JavaEE準拠の開発方法だとコンテナの起動は15秒くらいかかるものの、1度起動したら起動しっぱなしでよい。デプロイにかかる時間はほんの数秒だ。


つまり、JavaEE準拠のほうが開発効率がよいことになる。うーむ、意外だった。それとも、このサンプルは遅くなるような特徴があるのだろうか。一応coolDeployにしてもデプロイ時間は変わらないのは確認済みだが。