JavaEE6ではまったことをいくつか

組み込みGlassfish3.0.1でJavaEE6を試していてはまったところをいくつかメモしておきます。

JSFXHTMLからは@Namedアノテーションが付いたBeansにしかアクセス出来ない

JSFXHTMLの中からアクセスするBeansには@Namedアノテーションが必須らしいです。
ということは、逆に言えばXHTMLからアクセスさせたくないBeansには@Namedを付けない方がいい。
全部のBeansにむやみやたらとアクセス出来たら依存関係がわけ分からなくなりそうだから、ここは大事かな。
でも@Namedは別の用途でも使うわけで、このアノテーションの有無だけでXHTMLからアクセスしているかどうかを判断するのは危険か。

JSFの動作にはjavax.faces.bean.ManagedBeanアノテーションが付いたクラスが1つあればよい

JSFXHTMLからアクセスするBeansには必ず付けないといけないと思ってたけど、1つあれば充分らしい。
ただ、1つもないとダメ。1つだけ付けるのは気持ち悪いので、実戦では

  • 全部に付ける
  • ダミーを用意してそいつにだけ付ける

のどちらかの手法を取ると思います。

XHTMLの#{}からCDIで管理しているBeansにアクセスできない

JDK5でコンパイルしてしまうとこうなることがあるようです。

contains an unknown id 'xxx' というエラー

のrender属性のidを持つタグは、はの中にないといけないようです。
デザイン上の制約になるかもしれません。

@PersistenceContextでインジェクトしたEntityManagerが動かない

過去のエントリで報告している現象で、まだ未解決。
組み込みGlassfishでのみ起きる、厄介な現象です。。。

@Producesを使って@PersistenceContextを使わないで済ませるという逃げは可能だけど、本質的な解決ではないです。

ただ、実は@Producesを使って@InjectでEntityManagerをインジェクト出来るようにするのは悪いアイデアではない、と思っています。
インジェクトのためのアノテーションが@Injectで統一出来るから。