今 JAX-RS + CDI をやるなら Glassfish 3.1 を使うべし
Glassfish 3.0.1 で JAX-RS + CDI をやると、Serializable インターフェースを実装したクラスがサーチパスにあると例外が発生するという問題がある。なので、RuntimeException を継承したクラスを作ったら即アウト。
これは、Glassfish 3.0.1 に同梱されている CDI の実装である Weld のバグ。
Jersey - Jersey trouble under glassfish 3
[#WELD-486] Ambiguous dependency when using a decorator - JBoss Issue Tracker
4月に報告されて、やっと先月末の Weld 1.1.0 Beta1 でなおった。ただし、Glassfish 3.0.1 にポーティングされるのはもう少し時間がかかるようなので、現時点での一番簡単な回避策は開発版である Glassfish 3.1を使うこと。少し見つけにくいのが難点だが、以下から入手可能。
Index of /glassfish/3.1/nightly/
Glassfish 3.1 は今年の12月リリース予定で、現在のマイルストーン 5(Jeasey 1.4 + Weld 1.1.0 Beta 1)でかなり安定している。なので、これから JavaEE6 を試すなら、Glassfish 3.1 を使うのがおすすめ。
Glassfish 3.1 はクラスタリング機能も実装されてホントいい感じに仕上がってる。あとは Oracle が見捨てないでいてくれるかだが、管理コンソールが便利すぎて、もう Tomcat には戻りたくないので、年末のリリースに期待。