GlassFish V2 & NetBeans5.5.1

仕事でしばらくPL/SQLの世界に行っていたのですが、ようやくまたJavaの世界に戻ってきました(汗)
Java勉強会関連でProEJB3の本を読んでいます・・・というか、Apressのページにあったサンプルを今読んでます。せっかくサンプルソースがあるのだから、是非動かしてみたいと思いました。EJB3環境を今手っ取り早く実行できるのは・・・自分がすぐに出来るのはSeasar2なんですが、ここは敢えてJavaEE5サーバ上で動かす練習をしてみたいと思います。
前にも書いたように、今現在最もJavaEE5環境が充実しているアプリケーションサーバGlassFishだと思ってます。GlassFishといえばやはりNetBeans・・・というわけで、NetBeansのいろいろなバージョンを試してみました。
まずは開発中のV6.0。最近Ruby開発環境のプラグインが提供されたということで話題になっているバージョンですね。エディタも賢くなっているっぽくて、将来かなり期待できるバージョン・・・ですが、EJB3を実行するときに致命的な問題点がありました。どうやら、PersistenceUnitを自動作成するときに、JTAに対応していないみたいで、リソースローカルな設定を勝手に入れられてしまいます。5.5.1ではJTA対応出来るので、これは単に6.0でまだ未実装ということでしょうか?・・・
NetBeansのPersistenceUnit自動作成機能というのは実はかなり重要で、この機能を使うと、Entityを自動作成してくれるのは勿論、データソース定義やコネクションプール定義まで同時に自動作成してくれます。ここまでDB定義を自動化している仕組みは、多分Eclipseにはない筈・・・NetBeansGlassFishを設定すると、中に組み込まれているJavaDB(Derby)も自動認識して、自動でサンプルデータベースを定義してくれます。更に、JavaDBに対して簡単にスキーマを追加することが可能です。CREATE文を作っておけば、それをJavaDBに流してあげて、後はウィザードから一発でデータソース定義からEntity作成まで行ってくれます。
・・・うーん、これが6.0で動かないのは痛い・・・この機能は是が非でも使いたいので、現時点で6.0の利用は諦めることにしました・・・早く6.0でも実装して欲しいものです。
というわけで、ターゲットのバージョンは5.5.1にしました。5.5.1といえば、最近SunからJavaEE5SDKのアップデート版が発表されてました。これはGlassFishV2とNetBeans5.5.1のベータ版等をオールインワンで提供しているものです。これも使ってみたのですが・・・上記のデータソース自動作成画面で、「ユーザパスワードが必要です」みたいなエラーが出ます。どうやらバグってる模様です(苦笑)・・・結局、今現在最も安定して使えるのは、NB5.5.1のDailyビルド版とGlassFishV2のメインブランチ(現在はb40)のようですね。・・・ただし、この組み合わせでも問題があって・・・GlassFishがシャットダウンできません(苦笑)とりあえず、一度立ち上げたらあげっぱなしにしておいて、NetBeansを終了したあとに強制終了して凌いでます。
さて、この2つをインストールして設定して、これを使ってProEJB3のサンプルを動かしてみました。・・・えーと、サンプルのServletのソースがかなり酷い(苦笑)・・・いまどきServletでHTMLタグ吐き出してますね・・・Webには詳しくない人がサンプル作ったのでしょうか?・・・
NativeQueryを実行する例を見ていたのですが、Oracle独自SQLを書いて動かなかったのか、コメントアウトして普通のJPQLに戻しているサンプルとかもありました(汗)・・・ぬ・・・まぁでも、テーブル定義からEntity・SessionBean・Servletまで一通り動作サンプルが揃っているので、これを使えばEJB3を動かす練習にはかなりなると思います。
上記作業をやりながら、NetBeansの印象についても結構見えてきました。まず、操作性についてはキーバインドEclipseと同じにできるので、これを定義すればEclipseユーザーでもそこそこ扱うことが出来ます。エディターの使い勝手はやはりいまいちですが、リファクタリング機能関連は結構頑張ってて、クラス名の変更とかはEclipseと同感覚で利用出来ます。
また、前述したとおり、サーバやDBとの連携機能はかなり強力です。実行環境のリソース設定やサーバへの定義などを、クラスのウィザード作成の中に盛り込んで自動化できるというのは、日ごろEclipseで設定ファイルを書いている身としては、かなり便利に感じました。たとえばSeasar2なら、標準のDB定義は添付のjdbc.diconに定義してあって、利用者がそれをカスタマイズして使うのですが、NetBeansの場合はEntity作成するときに同時にDB設定を自動的に作ってくれるのです。この差は地味ですが結構大きい。これがウィザードの力か・・・
また、ソースを書いてる中で感じたのは、修正したアプリのビルドがかなり早いということでした。サーバの起動はどうしてもある程度時間がかかってしまうのですが、一度デプロイしたアプリを修正してあげ直すのは、かなりの高速度です。これはどうやら、ディレクトリデプロイを行っているからみたい。Seasar2のようにHot Deployで直感的に開発というわけにはいきませんが、少なくとも再デプロイにうんざりしながら作っていた以前のJ2EEサーバとはかなり違いますね。
あと、日本語ヘルプがかなり充実してます。これはEclipseよりもかなり丁寧で読みやすいと感じました。日本語化の労力はEclipseよりもかなり頑張ってるように見えました。
逆に問題点は・・・ウィザード重視で簡単に定義できる反面、自分でディレクトリや設定ファイルをいじくりながら作るのには、やはり向いてない印象です。WEB-INFの中にちょっとディレクトリ作ろうと思っても、画面から作れなかったり(追記:新規→フォルダで出来ました。新規→JSPからフォルダ選択を選ぶと、そこでは作成出来なかったので勘違いしてました)・・・ライブラリを追加しようと思っても、どうやって追加したらいいのかなかなかわからなかったり・・・ここら辺は、warのディレクトリ構成さえ知っておけば好きに作れるEclipseのTomcatPluginの柔軟性に比べたら、かなり劣っている気がします。まぁEclipseでもWTPになるとあんまり柔軟性無いんですが・・・
いろいろ触ってみましたが、開発に「簡単さ」を求めるのであれば、NetBeansの方向性はかなり王道であって、魅力的に感じました。フレームワーク開発にはあまり向かなくとも、ある程度の難易度のWebアプリケーション開発を行うにはかなり向いているのではないかという気がしました。惜しむらくは、未だにJavaEE5の実行基盤として安定した組み合わせが存在しないということでしょうか。たしか夏には正式版が出ると聞いてるので、それまでに早く安定した環境を提示してもらえたらなぁと思います。

Pro EJB 3: Java Persistence API

Pro EJB 3: Java Persistence API