2.9 アプリケーションサーバが対応するDependency Injection

Dependency Injection(DI)とは,ターゲットクラスのフィールドやsetメソッドにアノテーション(@EJB,@Resource,@Inject)を設定することで,オブジェクトの参照をJ2EEサーバが自動的にセットする機能です。

EJBコンテナ上で動作するクラスの中で,ターゲットクラスとなるクラスを次に示します。

また,Webコンテナ上で動作するクラスの中で,ターゲットクラスとなるクラスを次に示します。

Enterprise Beanのホームインタフェース,またはビジネスインタフェースへの参照をDIする場合は,@EJBを設定します。

@Resourceを設定した場合は,次の表に示すリソースのタイプをDIできます。

表2-31 @ResourceでDIできるリソースのタイプ

リソースのタイプDIの可否※1
java.lang.String※2×
java.lang.Character※2×
java.lang.Integer※2×
java.lang.Boolean※2×
java.lang.Double※2×
java.lang.Byte※2×
java.lang.Short※2×
java.lang.Long※2×
java.lang.Float※2×
javax.xml.rpc.Service×
javax.xml.ws.Service×
javax.jws.WebService×
javax.sql.DataSource※3
javax.jms.ConnectionFactory
javax.jms.QueueConnectionFactory※4
javax.jms.TopicConnectionFactory
javax.mail.Session
java.net.URL×
javax.resource.cci.ConnectionFactory※5
org.omg.CORBA_2_3.ORB  ※6
javax.jms.Queue※3,※7
javax.jms.Topic※7
javax.resource.cci.InteractionSpec×
javax.transaction.UserTransaction  ※8
javax.ejb.EJBContext  ※9
javax.ejb.SessionContext  ※9
javax.ejb.TimerService    ※9,※10
JavaBeansリソース
管理対象オブジェクトの独自のインタフェース
(凡例)
○:使用できます。
×:使用できません。
注※1
管理対象オブジェクトへの対応づけは,Java Typeに関係なく,mappedName要素で対応づけます。リソースアダプタの表示名と管理対象オブジェクト名の区切り文字には,「!#」を使用してください。
注※2
<env-entry-value>に値を設定できないので,DI,lookupで得られる値を設定できません。
注※3
DB Connectorが該当します。
注※4
TP1/Message Queue - Access,Reliable Messagingが該当します。
注※5
TP1 Connectorが該当します。
注※6
ORBのshareable属性はtrueが設定されているものとして動作します。なお,注入されるORBオブジェクトは,ほかのコンポーネントでも使用される共有のインスタンスです。
注※7
Connector 1.5に準拠したリソースアダプタを使用する場合は,JMSで定義する管理対象オブジェクト(javax.jms.Destinationインタフェースまたはサブインタフェース)をリソースアダプタの標準DD(ra.xml)の<connector>-<resourceadapter>-<adminobject>-<adminobject-interface>タグに指定してください。
注※8
CMTで動作するEnterprise Beanまたはインターセプタでは使用できません。
注※9
Webコンテナ上で動作するクラスでは使用できません。
注※10
Stateful SessionBeanや,Stateful SessionBeanに適用されたインターセプタでは使用できません。