Java EE アプリケーション・リソースの宣言
外部リソースおよび構成パラメーターで依存関係を宣言するよう Java™ Enterprise Edition (Java EE) アプリケーションを構成できます。 これらのリソースは、アプリケーション・コードに注入される、または Java Naming and Directory Interface (JNDI) を使用してアプリケーションによってアクセスされる場合があります。
リソース参照によって、アプリケーションがデプロイされるときに、リソースにバインドできる論理名をアプリケーションが定義および使用できます。
次のリソース・タイプを Java EE アプリケーションによって宣言できます。単純な環境エントリー、Enterprise JavaBeans (EJB) 参照、Web サービス参照、リソース・マネージャー接続ファクトリー参照、リソース環境参照、メッセージ宛先参照、パーシスタンス・ユニット参照、およびパーシスタンス・コンテキスト参照。
単純な環境エントリー
Java EE アプリケーションの構成パラメーターを定義し、単純な環境エントリーを使用してビジネス・ロジックをカスタマイズできます。Java EE 6 アプリケーションで説明するように、単純な環境エントリーの値は、次の Java のいずれかの型になります。String、Character、Byte、Short、Integer、Long、Boolean、Double、Float、Class、および Enum のサブクラス。
アプリケーション・プロバイダーは、アプリケーション・コードからアクセスされる単純な環境エントリーをすべて宣言する必要があります。単純な環境エントリーは、アプリケーション・コードでアノテーション (javax.annotation.Resource) を使用するか、XML デプロイメント記述子で env-entry エレメントを使用して宣言されます。
アプリケーションからの次の例では、アノテーションは環境エントリーを宣言します。
// Retry interval in milliseconds
@Resource long retryInterval = 3000;
上記の例では、フィールドのデフォルト値は 3000 です。使用できる値は env-entry-value で、この値を変更するには XML デプロイメント記述子で定義します。
次の例では、アプリケーションは型 Class の単純な環境エントリーを宣言し、Class が XML デプロイメント記述子で env-entry-value エレメントを使用して注入されるよう定義します。
@Resource(name=TraceFormatter) Class<?> traceFormatter;
<env-entry>
<env-entry-name>TraceFormatter</env-entry-name>
<env-entry-value>com.sample.trace.StdOutTraceFormatter</env-entry-value>
</env-entry>
上記の例では、フィールドの値は、com.sample.trace.StdOutTraceFormatter Class オブジェクトに設定されます。
次の例では、validationMode という単純な環境エントリーを、アプリケーションが com.sample.Order クラスの Enum のサブクラスとして宣言し、CALLBACK の Enum の値を、XML デプロイメント記述子のエレメントを使用して注入するよう構成します。
<env-entry>
<env-entry-name>JPAValidation</env-entry-name>
<env-entry-type>javax.persistence.ValidationMode</env-entry-type>
<env-entry-value>CALLBACK</env-entry-value>
<injection-target>
<injection-target-class>com.sample.Order</injection-target-class>
<injection-target-name>validationMode</injection-target-name>
</injection-target>
</env-entry>
上記の例では、validationMode フィールドは値 CALLBACK Enum に設定されます。アノテーションおよび XML コードを使用して単純な環境エントリーを宣言する場合は、同じアプローチを取ります。例:
@Resource (name=JPAValidation)
javax.persistence.ValidationMode validationMode;
<env-entry>
<env-entry-name>JPAValidation</env-entry-name>
<env-entry-value>CALLBACK</env-entry-value>
</env-entry>
Enterprise JavaBeans (EJB) 参照
Java EE 6 の仕様で説明されているように、EJB 参照と呼ばれる論理名を使用して、エンタープライズ Bean ホームまたはエンタープライズ Bean インスタンスへの参照を宣言するよう Java EE アプリケーションを開発できます。
アプリケーションが EJB への参照を宣言するとき、参照する EJB は、次の手法のいずれかを使用して解決されます。
- ibm-ejb-jar-bnd.xml ファイルまたは ibm-web-bnd.xml ファイルで EJB バインディングを指定する
- ejb-jar.xml ファイルまたは web.xml ファイルで <ejb-link> エレメントを指定する
- javax.ejb.EJB アノテーションで beanName 属性を指定する
- ejb-jar.xml ファイルまたは web.xml ファイルで <lookup-name> エレメントを指定する
- javax.ejb.EJB アノテーションで lookup 属性を指定する
- EJB 参照の型として宣言されたインターフェースを実装するエンタープライズ Bean を見つける (AutoLink と呼ばれる)。
EJB コンテナーは、リストされた順序で上記の手法を使用して、EJB 参照を解決しようとします。
次の例では、アプリケーションはアノテーションを使用して EJB 参照を宣言し、解決のためにバインディングを提供します。
@EJB(name="Cart")
Cart shoppingCart;
<ejb-ref name="Cart" binding-name="java:app/SampleEJB/SampleCart"/>
次の例では、アプリケーションはアノテーションを使用して EJB 参照を宣言し、解決に ejb-link エレメントを提供します。
@EJB(name="Cart")
Cart shoppingCart;
<ejb-local-ref>
<ejb-ref-name>Cart</ejb-ref-name>
<ejb-link>SampleEJB/SampleCart</ejb-link>
</ejb-local-ref>
次の例では、アプリケーションはアノテーションを使用して EJB 参照を宣言し、ソース Bean com.sample.SourceBean から解決に lookup 属性を提供します。
@EJB(name="Cart" lookup="java:app/SampleEJB/SampleCart")
Cart shoppingCart;
アプリケーションは、次の例のように、代わりに XML デプロイメント記述子で <lookup-name> エレメントを使用して、EJB 参照を宣言できます。
<ejb-local-ref>
<ejb-ref-name>Cart</ejb-ref-name>
<lookup-name>java:app/SampleEJB/SampleCart</lookup-name>
<injection-target>
<injection-target-class>com.sample.SourceBean</injection-target-class>
<injection-target-name>ShoppingCart</injection-target-name>
</injection-target>
</ejb-local-ref>
次の例では、アプリケーションはアノテーションを使用して EJB 参照を宣言し、解決のために beanName 属性を提供します。
@EJB(name="Cart" beanName="SampleEJB/SampleCart")
Cart shoppingCart;
リソース環境参照
Java EE 6 の仕様で説明するように、管理対象オブジェクトへの参照を宣言するようアプリケーションを開発できます。そのようなオブジェクトには、Connecter CCI InteractionSpec インスタンスなど、リソースに関連付けられているもの、または javax.transaction.UserTransaction、 javax.ejb.EJBContext、javax.ejb.TimerServcie、org.omg.CORBA.ORB、javax.validation.Validator、 javax.validation.ValidatorFactory、javax.enterprise.inject.spi.BeanManager など、EJB コンテナーによって管理されるものがあります。
アプリケーションが管理対象オブジェクトへの参照を宣言する場合、アプリケーションをデプロイするときに、管理対象オブジェクトへのバインディングを指定する必要があります。 アプリケーションをデプロイするときに、管理コンソールを使用してバインディングを指定できます。または、WebSphere® のバインディング XML ファイルの ibm-ejb-jar-bnd.xml または ibm-web-bnd.xml にバインディングを追加できます。
次の例では、アプリケーションはリソース環境参照を宣言して、リソースへのバインディングを提供します。
@Resource(name="jms/ResponseQueue")
Queue responseQueue;
<session name="StatelessSampleBean">
<resource-env-ref name="jms/ResponseQueue" binding-name="Jetstream/jms/ResponseQueue"/>
</session>
次の例のように、アプリケーションはバインディングを要求するのではなく、代わりに lookup 属性を使用してリソース環境参照を宣言できます。
@Resource(name="jms/ResponseQueue", lookup="Jetstream/jms/ResponseQueue")
Queue responseQueue;
<resource-env-ref>
<resource-env-ref-name>jms/ResponseBean</resource-env-ref-name>
<resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
</resource-env-ref>
アプリケーションがコンテナー管理対象オブジェクト・タイプへの参照を宣言する場合、バインディングは使用されません。 コンテナーは、参照されるオブジェクトの適切なインスタンスを提供します。次の例では、アプリケーションは コンテナー管理対象オブジェクトへのリソース環境参照を宣言します。
@Resource
javax.validation.Validator validator;
リソース参照へのリソース参照
@Resource(name="java:global/env/jdbc/ds1ref",
lookup="java:global/env/jdbc/ds1",
authenticationType=Resource.AuthenticationType.APPLICATION,
shareable=false)
DataSource ds1ref;
@Resource(name="java:global/env/jdbc/ds1refref",
lookup="java:global/env/jdbc/ds1ref",
authenticationType=Resource.AuthenticationType.APPLICATION,
shareable=true)
DataSource ds1refref;
検索では、参照の最も内側のネストを使用します。この場合では、「java:global/env/jdbc/ds1ref」です。