Java Contexts and Dependency Injection (JCDI) の JAX-RS との使用
Java™ API for RESTful Web Services (JAX-RS) ルート・リソースおよびプロバイダー を Java Contexts and Dependency Injection (JCDI) 対応の Web アーカイブ (WAR) で使用することができます。有効な WEB-INF/beans.xml ファイルを WAR ファイルに追加するだけで、有効な JCDI Bean である JAX-RS ルート・リソースやプロバイダーで JCDI 機能を使用できるようになります。
このタスクについて
JCDI 対応のアーカイブ内の JAX-RS クラスは、@javax.inject.Inject アノテーション付き注入ポイントを持つことができ、JCDI ライフサイクル・スコープに加わることができます。 また、JCDI イベントを起動することができ、メソッド・インターセプターおよびデコレーターを使用することができます。
JAX-RS ルート・リソースおよびプロバイダー・クラスには、有効な JCDI 管理 Bean コンストラクター がなければなりません。一般に、@javax.ws.rs.core.Context アノテーション、 または @javax.ws.rs.QueryParam などの JAX-RS パラメーター・アノテーション が付けられたパラメーターを持つコンストラクターがクラスにある場合は、 代わりに JAX-RS アノテーション付き Bean プロパティーまたはフィールドを使用するように コードをリファクタリングする必要があります。@javax.annotation.PostConstruct アノテーション付きメソッドを追加すると、オブジェクトの構成が容易になります。
また、JAX-RS ルート・リソースおよびプロバイダー・クラスには、JCDI で指定されたスコープがなければなりません。スコープは、 JCDI 管理 Bean のライフサイクルを制御します。ルート・リソース・クラスは、 @javax.enterprise.context.RequestScoped などの有効なスコープを持つことができます。 これにより JAX-RS ルート・リソース・クラスは、非 JCDI 対応アプリケーション内で使用される場合と同じように動作します。javax.ws.rs.core.Application サブクラスおよび JAX-RS プロバイダーには、@javax.enterprise.context.ApplicationScoped アノテーションを付ける必要があります。
アプリケーションをより迅速にかつ容易に開発するために、 あるいはコードのテスト可能性を高めるために、JCDI を使用する場合があります。JCDI は、依存性の注入、イベント・ベースのプログラミング・モデル、および横断的関心事 (cross cutting concern) を実現するアスペクト指向アプローチなどの最新のプログラミング手法を可能にします。 開発者は、アスペクト指向プログラミングを使用して、ビジネス・ロジックの主要部分ではない機能をメソッドに 手際よく追加することができます。例えば、横断的関心事 (cross-cutting concern) の 1 つにロギングがあります。アプリケーションで特定のビジネス・メソッドが呼び出されるたびに、その開始と終了をログに記録する必要があると考える開発者もいます。開発者は、メソッド・インターセプターやデコレーターなどの JCDI 機能を使用することにより、 この機能をより手際よく追加できるようになりました。また、開発者は、依存性の注入を使用して、単体テスト時に独自のモック実装を容易に挿入することができます。以前はハードコーディングされていた依存性を分離することにより、 開発者は個々のコンポーネントをより簡単にテストすることができます。
JCDI Bean は、Enterprise JavaBeans (EJB) を注入し、 @javax.annotation.Resource 注入を使用して、 Java Platform, Enterprise Edition (Java EE) リソースを注入することができます。 EJB を JCDI Bean にすることもできます。@javax.ejb.Stateless などのアノテーション 付き EJB も JCDI 依存性の注入およびその他の JCDI 機能を使用できます。EJB は、 EJB 固有のトランザクション機能およびその他の EJB 機能を保持します。
Java Contexts and Dependency Injection (JCDI) は、 Java Platform, Enterprise Edition (Java EE) 6 の新機能です。 この機能により、プログラミング・モデルを、アプリケーションの開発がより容易で、保守容易性の向上したものにすることができます。JAX-RS 開発者は、ルート・リソース・クラスおよびプロバイダー・クラスで、@javax.inject.Inject サポートなどの JCDI 機能を使用できます。
手順
タスクの結果
エンタープライズ Bean が使用可能になり、JCDI 機能を使用する JAX-RS リソースを公開して使用できるようになりました。