2.9 アプリケーションサーバが対応するDependency Injection
Dependency Injection(DI)とは,ターゲットクラスのフィールドやsetメソッドにアノテーション(@EJB,@Resource,@Inject)を設定することで,オブジェクトの参照をJ2EEサーバが自動的にセットする機能です。
EJBコンテナ上で動作するクラスの中で,ターゲットクラスとなるクラスを次に示します。
-
Enterprise Bean
-
インターセプタ
また,Webコンテナ上で動作するクラスの中で,ターゲットクラスとなるクラスを次に示します。
-
サーブレット
-
フィルタ
-
リスナ
-
タグハンドラ
Enterprise Beanのホームインタフェース,またはビジネスインタフェースへの参照をDIする場合は,@EJBを設定します。
@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に適用されたインターセプタでは使用できません。