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 機能を使用できます。

手順

  1. 開発環境を構成します。
    1. JAX-RS アプリケーションの開発を開始する前に、クラスパスに JAX-RS ライブラリーを追加して、 開発環境をセットアップする必要があります。
  2. JAX-RS Web アプリケーションのリソースを定義します。
    1. リソースは、RESTful サービスの基本ビルディング・ブロックです。リソースは、静的または動的な更新データを含むことができます。オンライン書店アプリケーションのリソースの例には、書籍、書店からの注文、およびユーザーのコレクションが含まれます。ご使用のアプリケーションのリソースを識別することにより、サービスをさらに便利で開発しやすいものにできます。
  3. JAX-RS アプリケーションを構成します。

    お客様のニーズに応じて、複数の方法で JAX-RS アプリケーションを構成できます。 Java Platform, Enterprise Edition (Java EE) 6 の機能を活用するには、アノテーション・スキャン機能を使用します。 アノテーション・スキャンを使用することにより、JAX-RS javax.ws.rs.core.Application サブクラス を省略したり、javax.ws.rs.core.Application サブクラスの定義を最低限にすることができます。 あるいは、IBM® JAX-RS サーブレットおよびフィルターで有効な機能を 使用したい場合は、IBM JAX-RS サーブレットまたはフィルター を指定できます。

    JAX-RS バージョン 1.1 構成メソッドの 1 つを使用して、 アプリケーションで javax.ws.rs.core.Application サブクラスを省略したり、 すべての JAX-RS クラスを検索して使用するように JAX-RS ランタイム環境に通知するために 空のクラス・セットを返す javax.ws.rs.core.Application サブクラスをアプリケーションで 使用したりすることができます。 このメソッドは、アプリケーションの作成時に、関連するすべての JAX-RS クラスを javax.ws.rs.core.Application サブクラスに手動で追加する手間を省略したい場合などに使用します。

    特定の IBM JAX-RS サーブレットおよびフィルターを 指定することにより、特定の IBM JAX-RS の動作を 確実に利用することができます。例えば、IBM JAX-RS フィルターは、 同じ URL パターンの JAX-RS リソースと JavaServer Pages (JSP) ファイルを使用する Web アプリケーション を開発する際に役立ちます。

    オプションの web.xml ファイルの使用をサポートする JAX-RS V1.1 構成メソッド がありますが、セキュリティー制約またはロールを指定したい場合や、web.xml ファイルを使用して 使用可能な他の機能を利用したい場合には、web.xml ファイルに情報を指定する必要があります。

    JAX-RS アプリケーションを構成するには、以下の 3 つの方法のうち 1 つを選択します。

    • JAX-RS 1.1 メソッドを 使用して JAX-RS アプリケーションを構成する

      アノテーション・スキャン機能 または JAX-RS 1.1 構成メソッドを使用したい場合に、この方法を使用します。 アノテーション・スキャン機能を使用することにより、アプリケーションの可搬性を向上させたり、 構成コードの量を最小化したり、アプリケーション・コードを変更せずにアプリケーションを 動的に変更したりすることができます。

    • JAX-RS サーブレット用 web.xml ファイルの構成

      動作を変更するためにサーブレット初期設定パラメーターを使用して有効にする機能を指定したい場合、 および IBM JAX-RS サーブレットを確実に取得したい 場合に、この方法を使用します。サーブレットを使用する場合は、ベース URL に付加されるサーブレット・パスを web.xml ファイル内に 定義できます。

    • JAX-RS フィルター用 web.xml ファイルの構成

      さまざまな URL パターンの JSP、その他のサーブレットおよびフィルター、 および JAX-RS リソースがあり、フィルターを使用したい場合に、この方法を使用します。 有効な URL を示すフィルターを定義し、それらの URL でフィルターが起動されるように web.xml ファイルを 構成することができます。

  4. JCDI 機能を使用した JAX-RS リソースを実装します。 アプリケーションの作成、保守、およびテストをより容易にするために、 JCDI 機能を個々に使用したり、組み合わせて使用したりすることができます。
  5. JAX-RS Web アプリケーションをアセンブルします。
    1. JAX-RS Web アプリケーション用に Java クラス・ファイルを開発し、JAX-RS サーブレットを使用可能するために web.xml ファイルを編集したら、アプリケーションをアセンブルできます。Web アプリケーションを WAR パッケージにアセンブルします。必要に応じて、WAR パッケージをエンタープライズ・アーカイブ (EAR) パッケージにアセンブルできます。
  6. JAX-RS Web アプリケーションをデプロイします。
    1. JAX-RS Web アプリケーションをアセンブルしたら、Web アーカイブ (WAR) パッケージまたはエンタープライズ・アーカイブ (EAR) パッケージを、アプリケーション・サーバー上にデプロイする必要があります。

タスクの結果

エンタープライズ Bean が使用可能になり、JCDI 機能を使用する JAX-RS リソースを公開して使用できるようになりました。


トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_jcdi
ファイル名:twbs_jaxrs_jcdi.html