==Java EE JNDI ENC 注入==
[[Java EE]]
{{amazon|4873115086}}
*EJB3.xでは、ENCが強化され、JNDI ENC参照をBeanクラスのフィールドに直接注入できるようになった
*このためにアノテーションが主に利用されるがm,XMLデプロイメント記述子も利用可能
<<blockquote>>EJB、インターフェースへの参照、JMSキューまたはトピックの送信先、JMS接続ファクトリ、データソース、JCAリソース、プリミティブ型など、様々なものをENCに登録できる<</blockquote>>
===JNDI ENCへの投入方法===
*2つの異なる方法で設定できる
*ejb-local-ref:MyEJBがMyEJB2のローカルビジネスインターフェースへの参照を必要としていることをEJBコンテナに通知
*ejbs/referenceToMyEJB2 という名前でJNDI ENC に登録
<<ejb-jar>> <<enterprise-bean>> <<session>> <<ejb-name>>MyEJB<</ejb-name>> <<ejb-local-ref>> <<ejb-ref-name>>ejbs/referenceToMyEJB2<</ejb-ref-name>> <<ejb-ref-type>>Session<</ejb-ref-type>> <<local>>org.ejb3book.example.MyEJB2LocalBusiness<</local>> <<ejb-link>>MyEJB2<</ejb-link>> <</ejb-local-ref>> <</session>> <</enterprise-bean>> <</ejb-jar>>
====アノテーションによる設定====
*アノテーションで定義された情報でJNDI ENCに投入
java:comp/env/org.ejb3book.example.MyEJBBean/otherBean
====XMLによる注入====
*フィールドの初期化にアノテーションを利用したくない場合、ejb-jar.xmlデプロイメント記述子で<<jnjection-target> > を利用できる <<ejb-jar>> <<enterprise-bean>> <<session>> <<ejb-name>>MyEJB<</ejb-name>> <<ejb-local-ref>> <<ejb-ref-name>>ejbs/referenceToMyEJB2<</ejb-ref-name>> <<ejb-ref-type>>Session<</ejb-ref-type>> <<local>>org.ejb3book.example.MyEJB2LocalBusiness<</local>> <<ejb-link>>MyEJB2<</ejb-link>> <<injection-target>> <<injection-target-class>>
org.ejb3book.example.MyEJBBean
<</injection-target-class>> <<injection-target-name>>otherBean<</injection-target-name>> <</injection-target>> <</ejb-local-ref>> <</session>> <</enterprise-bean>> <</ejb-jar>>
====XMLによるオーバーライド====
*注入アノテーションを使うと、Beanクラスのコードに構成をハードコーディングすることになるとみなされる場合もある
*EJB仕様ではXMLデプロイメント記述子を使って注入アノテーションをオーバーライドできる
<<blockquote>>XMLは常にアノテーションメタデータよりも優先される。XMLはハードコーディングされたアノテーションを再構成する手段を提供する<</blockquote>>
====注入と継承====
*Beanクラスをクラス階層に含めることができる
}
*このようにすると、SomeEJBではなく、AnotherEJBが注入される
<<blockquote>>someMethod が private の場合、Base には SomeEJBが注入される<</blockquote>>
===参照の注入と型 ===