CDI
今回は Java EE 7 連載の最終回として、CDI の拡張機能を紹介する。 CDI は拡張ポイントを提供して独自の拡張ができるようにしている。具体的に可能なのは以下のようなことである。 独自スコープを追加する CDI Beanでないクラスを CDI Bean として登録し、…
前回の記事では WebSocket の基本的な実装方法を示した。 WebSocket を用いて本格的なアプリケーションを作る場合、メッセージの送受信をどのように行うかが課題となる。WebSocket には、HTML の FORM のように、構造的なデータを送る仕組みはない。このため…
以前の記事 で、 Java EE7から追加された @Transactional による宣言的トランザクションについて解説した。その中で、glassfish4.1 では、ロールバック時に根本原因がわからないという不具合があることを述べた。 また、その対策として例外ログを出力するイ…
CDIを使用したクラスのユニットテスト、すなわちJUnitなどのテストツールを使用した自動テストはどのように行うべきだろうか。 今回はユニットテストの方法について紹介する。 テスト対象のクラス 今回テストを行う対象は、前回の記事で紹介した、DAOを通じ…
Java EE7から、CDI Beanに対する宣言的トランザクションが使用可能になった。 宣言的トランザクションの使用を宣言しておくと、メソッドの開始と同時に暗黙的にトランザクションを開始し、メソッドの終了時にトランザクションをコミットまたはロールバックで…
前回までで、CDIの基本的な仕組みを紹介した。今回は、CDIのスコープの中でも特殊なスコープである、会話スコープ(@ConversationScoped) について解説する。 @RequestScoped, @SessionScopde, @ApplicationScoped はServletのスコープにもあるので、多くの方…
前回の記事では、インジェクションするクラスの候補が複数ある場合の様々な対処方法を紹介した。 今回は、Producerの効果的な利用方法を2つ紹介する。 リソースパラメータをProducerフィールドで一元管理する まずはProducerフィールドを使って、データソー…
前々回と前回の記事で、CDIの基本的な部分であるスコープとインジェクションについて解説した。 今回は、インジェクション候補のクラスが複数ある場合の様々な対処方法を紹介する。 実装や継承関係がある場合のスコープ指定 実装や継承関係がある場合は、実…
前回は、CDIの定義方法を解説した。 今回は、CDI Beanをインジェクションする方法を紹介する。 インジェクションが可能なクラスの種類 インジェクションを行うには、@Injectアノテーションを使用する。 @Injectが使用可能なクラス、すなわちCDI Beanをプロパ…
前回の記事では、CDIの概要とインジェクションのサンプルを紹介した。 今回から2回に分けて、CDIの基本的な利用方法を紹介する。前半の今回は、CDI Beanの定義で指定するスコープについて解説する。 CDI Beanに指定できるクラス CDI Beanに指定できるクラス…
今回から数回に分けてCDI(Contexts and Dependency Injection)を紹介する。 CDIは Java EE 6から追加されたDI(Dependency Injection、依存性注入)のための仕様である。 Java EE 7におけるCDIのバージョンは1.1であり、またJava EE 7から CDIはデフォルト…