EJB3.0のDependency Injection
うすうす気付いてはいたが、EJB3.0のDependency Injectionは汎用性が低いようだ。
Please note that EJB 3.0 dependency injection annotations only works in EJB objects -- not generic POJOs. For instance, you cannot use the dependency injection annotations in a servlet to obtain session bean objects. In addition, EJB 3.0 dependency injection only works in the local JNDI. Hence you cannot inject objects from remote servers.
EJB3.0のDependency InjectionアノテーションはEJBオブジェクトにのみ有効である - 一般的なPOJOは対象外である。例えば、ServletでSessionBeanを取得するのにDependency Injection Annotationは使用できない。更に、EJB3.0のDependency Injectionはlocal JNDIに対してのみ働く。ゆえにリモートサーバのオブジェクトはインジェクトできない。
うーーーむ。
上記は全部SpringやSeasarなどの既存のDIコンテナではできるぞ。
しかもDIできるオブジェクトが限定されているって、EJBで実装されていないコンポーネントを持って来るとか考えられていなし、RMIなど他にも色々DIしたいものはあるぞ。
JBoss Seamを使うと@Inアノテーションで、任意のオブジェクトをインジェクトできそう(未確認)ではあるが・・・。
EJB3.0時代になってもDIコンテナはまだまだ必要だろう。というかDI使いたいなら、素直にDIコンテナを使うべきか。
ここで死亡宣言をされてしまったEJBだが、EntityBeanはPersitence APIで息を吹き返しそうなものの、SessionBeanはLocalインターフェースやDIを取り入れたりで、どうもふらふらしている。分散オブジェクトとしては、SOA時代が到来しリアルタイムのトランザクショナルなシステム間連携が求められた時に蘇るような気がするが。