5.2.5 DIの使用

Dependency Injection(DI)とは,EJBやインターセプタクラスのフィールドやsetterメソッドに,@EJBや@Resourceアノテーションを指定することで,Enterprise Beanやリソースへの参照をEJBコンテナが自動的にセットする機能です。DIを使用すると,Enterprise Beanやリソースへの参照を,JNDIを使用してルックアップする必要がなくなります。

ここでは,@Resourceアノテーションで指定できるリソースのタイプ,およびDIに関する注意事項について説明します。

<この項の構成>
(1) @Resourceアノテーションで指定できるリソースのタイプ
(2) 注意事項

(1) @Resourceアノテーションで指定できるリソースのタイプ

@Resourceアノテーションを使用して,リファレンスを定義できます。@Resourceアノテーションで指定できるリソースのタイプを次の表に示します。

表5-9 @Resourceアノテーションで指定できるリソースのタイプ

リソースのタイプ指定可否
javax.sql.DataSource※1
javax.mail.Session
java.net.URL×
javax.jms.ConnectionFactory
javax.jms.QueueConnectionFactory※2
javax.jms.TopicConnectionFactory
javax.jms.Queue※2
javax.jms.Topic
javax.resource.cci.ConnectionFactory※3
javax.resource.cci.InteractionSpec×
javax.transaction.UserTransaction※4
org.omg.CORBA_ 2_3.ORB※5
javax.xml.rpc.Service×
javax.xml.ws.Service×
javax.jws.WebService×
javax.ejb.EJBContext※6
javax.ejb.SessionContext※6
javax.ejb.TimerService※6※7
JavaBeansリソース独自
java.lang.String※8
java.lang.Character※8
java.lang.Integer※8
java.lang.Boolean※8
java.lang.Double※8
java.lang.Byte※8
java.lang.Short※8
java.lang.Long※8
java.lang.Float※8

(凡例) ○:指定できる ×:指定できない

注※1 DB Connectorが該当します。

注※2 TP1/Message Queue - Access,Cosminexus RMが該当します。

注※3 uCosminexus TP1 Connectorが該当します。

注※4 CMTで動作するEnterprise Beanまたはインターセプタでは使用できません。

注※5 ORBのshareable属性はtrueが指定されているものとして動作します。なお,注入されるORBオブジェクトは,ほかのコンポーネントでも使用される共有のインスタンスです。

注※6 Webコンテナ上で動作するクラスでは使用できません。

注※7 Stateful SessionBeanやStateful SessionBeanに適用されたインターセプタでは使用できません。

注※8 <env-entry-value>タグに,DIまたはルックアップで取得できる値を設定できません。


(2) 注意事項