EEコンポーネントが、アプリケーションのライフサイクル内で明確なスコープを持って存在できるようにするためのアーキテクチャを提供します。EEコンポーネントが注入可能になり、イベントの起動や監視による疎結合方式の対話が可能になります。6というタイトルのブログをベースにしています。Webプロジェクトを設定する方法を示します。CDI管理対象BeanをFaceletsページに接続する方法を示し、最後にEJBテクノロジとのCDI統合の簡単な例を示します。IDEは、コンテキストと依存性の注入のサポートを組込みでサポートしています。CDI構成ファイルを生成するオプション、注釈のためのエディタおよびナビゲーション・サポート、一般的に使用されるCDIアーティファクトを作成するための各種ウィザードなどが含まれています。このチュートリアルを完了するには、次のソフトウェアとリソースが必要です。Editionも含まれています。Webプロジェクトを作成します。)ボタンをクリックします([Ctrl]-[Shift]-[N]、Macの場合は[⌘]-[Shift]-[N])。Web」カテゴリを選択してから「Webアプリケーション」を選択します。「次」をクリックします。プロジェクト名として「cdiDemo」と入力し、プロジェクトの場所を設定します。「次」をクリックします。サーバーをGlassFishサーバーに設定します。EEバージョンによって、アプリケーションに対して有効なCDIバージョンが決まります。1.1には重要な違いがあります。Webを指定した場合は、「コンテキストと依存性の注入を有効にする」オプションが選択されていることを確認します。「コンテキストと依存性の注入を有効にする」オプションが選択されると、プロジェクト・テンプレートの作成時に、プロジェクトの`WEB-INF`フォルダに`beans.xml`ファイルが生成されます。EE準拠のサーバーに伝えます。1.0がバージョンとして指定されます。ない場合、デプロイされるアーカイブは*暗黙的Beanアーカイブ*です。Webアプリケーションで手動で`beans.xml`ファイルを生成する場合、デフォルトではデプロイされるアーカイブは*明示的Beanアーカイブ*になります。7チュートリアルのCDIアプリケーションのパッケージを参照してください。CDIオプションを選択すると、プロジェクトのbeans.xmlファイルが生成される「次」をクリックします。Faces」オプションを選択します。「構成」タブをクリックし、「優先ページ言語」として「Facelets」が選択されていることを確認します。「終了」をクリックします。「終了」をクリックすると、IDEはWebアプリケーション・プロジェクトを生成し、`index.xhtml`開始ページがエディタに表示されます。Server」ノードを展開すると、`weld-osgi-bundle.jar`ライブラリが自動的に追加されていることがわかります。CDI仕様のJBossの実装であるWeldが含まれています。Webを指定した場合は、「Web」ページ>「WEB-INF」フォルダに`beans.xml`ファイルが含まれます。現時点でこのファイルは空ですが、注釈の代替として、XMLでBeanの関連情報を指定するために使用できます。JSFの式言語からのBeanへのアクセスこの課題では、EL構文を使用してCDI管理対象BeanをFaceletsページに接続する方法を示します。「プロジェクト」ウィンドウで「ソース・パッケージ」ノードを右クリックし、「新規」>「Javaクラス」を選択します。新規Javaクラス・ウィザードで、「クラス名」に「MessageServerBean」、「パッケージ」に「exercise1」と入力します。(ウィザードの完了時に新しいパッケージが作成されます。)「終了」をクリックします。新しいパッケージおよびクラスが生成され、エディタでクラスが開きます。クラスに`@Named`および`@Dependent`注釈を付けて、文字列を返す1つのメソッドを作成します。}*}@Dependent`および@Named`注釈の入力中に[Ctrl]-[Space]を押すと、エディタのコード補完サポートとJavadocドキュメントを呼び出せます。エディタのコード補完機能を使用して注釈を適用する(適切な注釈を選択して[Enter]を押す)と、自動的に`import`文がファイルに追加されます。)ボタンをクリックし、別個のウィンドウにフルサイズのJavadocを表示することもできます。注釈は、管理対象Beanのスコープを定義します。*暗黙的Beanアーカイブ*では、管理対象Beanは検出可能なだけで、スコープが指定されている場合にコンテナによってのみ管理されます。Webを指定すると、このチュートリアルのアプリケーションは暗黙的Beanアーカイブとしてパッケージされます。7チュートリアルの注釈を使用した管理対象Beanの構成を参照してください。ファイルを保存します([Ctrl]-[S]、Macの場合は[⌘]-[S])。`@Named`注釈を追加することで、CDIで定義されているように`MessageServerBean`クラスは_管理対象Bean_になります。Faceletsページに切り替え、`<h:body>`タグに次の内容を追加します。#{messageServerBean}*</h:body>EL式で[Ctrl]-[Space]を押すと、コード補完の候補を利用できます。エディタのコード補完によって、管理対象Beanおよびそのプロパティが一覧表示されます。MessageServerBean`クラスは@Named`注釈によってCDI管理対象Beanに変換されるため、JSF管理対象Beanと同じようにEL構文内でアクセスできるようになります。)ボタンをクリックします。プロジェクトがコンパイルされてGlassFishにデプロイされ、アプリケーションの開始ページ(index.xhtml)がブラウザで開きます。World!」メッセージが`MessageServerBean`によってページに表示されます。Weld!」など)に変更します。ファイルを保存([Ctrl]-[S]、Macの場合は[⌘]-[S])してからブラウザをリフレッシュします。新しいメッセージが自動的に表示されます。IDEの「保存時にデプロイ」機能によって、保存した変更はすべて自動的にコンパイルされてサーバーに再デプロイメントされます。ページの3行目から、クラス名が`exercise1.MessageServerBean`であることが確認できます。Object)であることに注目してください。EEで開発しているにもかかわらず、トランザクションやインターセプタなどが複数のレイヤーに重なった複雑なクラス階層は必要ありません。仕組みアプリケーションがデプロイされると、サーバーはCDI管理対象Beanを探します。7アプリケーションでは、パスのクラスでCDI注釈がデフォルトでスキャンされます。6アプリケーションでは、モジュールに`beans.xml`ファイルが含まれる場合、パスのクラスでCDI注釈がスキャンされます。CDIモジュールでは、すべてのBeanはWeldに登録され、@Named`注釈を使用してBeanが注入ポイントと照合されます。`index.xhtml`ページがレンダリングされたとき、JSFは、JSFに登録された式リゾルバを使用してページの`messageServerBean`の値を解決しようとしました。@Named`注釈で別の名前を指定することもできましたが、指定しなかったため、クラス名の最初の文字を小文字にしたデフォルト名で登録されました。Weldリゾルバは、JSFからのリクエストに応じてこのBeanのインスタンスを返します。EL式を使用する場合にのみBeanを命名する必要があります。CDIではクラスの型と修飾子注釈を使用することで、型を保証して注入できるため、注入の機構としてBeanの命名を使用しないでください。3.1のおかげで少し変更を加えるのみでBeanをEJBとして簡単にデプロイできます。EJB!」に変更します。}}ファイルを保存([Ctrl]-[S]、Macの場合は[⌘]-[S])してからブラウザに移動してリフレッシュします。次のような出力が表示されます。驚くことに、ただ1つの注釈でPOJOが各種機能を備えたEJBに変わりました。変更を保存してからページをリフレッシュすると、変更した内容が表示されました。これを行うために、独特のプロジェクト構成、ローカル・インタフェース、または難解なデプロイメント・ディスクリプタは一切必要ありませんでした。異なるEJBのタイプ@Stateful`注釈を使用することもできます。シングルトン・インスタンスのための新しい@Singleton`注釈を試すこともできます。すると、javax.ejb.Singleton`と`javax.inject.Singleton`の2つの注釈があることに気付くでしょう。シングルトンが2つあるのでしょうか。EJB以外の環境でCDIを使用している場合、CDIのシングルトン(`javax.inject.Singleton)を使用してEJBの外部でシングルトン・インスタンスを定義できます。EJBのシングルトン(javax.ejb.Singleton)は、トランザクション管理などのEJBの機能をすべて提供します。必要に応じて、またはEJB作業環境の有無に応じて選択できるようになっています。EE環境での依存性の管理のためにCDIを使用する方法について詳しく見ていきます。2.0の詳細は、次のリソースを参照してください。