名前付きクエリを使ってみる。クラスの内容の大枠は把握できた。DIでは、アプリケーションサーバーなどのコンテナがオブジェクトを管理するためコンテナが必要となる。いうことは、依存性をユニットテスト実行時に解決するためには、必然的にコンテナが必要になるのだが、どうやって行うんだろう。利用するとArquillianがコンテナを管理したり、起動済みのコンテナに、パッケージを作成してデプロイしてくれるのでコンテナ上でのユニットテストが可能となる。サービスクラスのソースコードを見てみよう。EntityManagerの実装クラスがインジェクトされることは、容易に想像がつくが、一体どのように使用すべきで、どういう理屈で動いているだろう。大きく内容が異なるようだ。CDIとは何か?については、以下のサイトが非常にわかりやすい。サンプルも豊富ですばらしい。2まぁ、上記サイトを読めばいろいろ解決してしまう。いえ、自分でまとめないと覚えられないたちなので、以下にメモしていこうと思う。読みやすくわかりやすい。版が出ていれば、この検証作業も本の内容をトレースするだけですみそうなのだが。早く出版されることを願いつつ、一部要約、抜粋する。対応コンテナは、以下に示す「コンテナが管理するオブジェクト」をインジェクションする仕組みを持っている。コンテナがライフサイクルを管理する以下のオブジェクトに対してインジェクション可能。5仕様でもDI機能は盛り込まれていましたが、非常に制限された形で仕様化されていました。インジェクションするオブジェクトも、インジェクションされるオブジェクトもその種類が制限されており、インジェクションに使用するアノーテーションも、インジェクションするオブジェクトの種類によって異なるアノーテーションクラスを使用する必要がありました(例えば、EJBのインジェクションには@EJBを使用し、データソースのインジェクションには@Resourceを使うなど)。5仕様におけるインジェクションの機能は、汎用のDIと区別するため、一般に「リソース・インジェクション」と呼ばれていますということらしい。こちらの本も全体として非常にわかりやすく、サンプルも豊富な良書だと思うのだが、なぜか、CDIについての記述がかなり少ない。索引に出てきすらしないという状況。チュートリアルのCDIの箇所を斜め読みし、要点をまとめ(意訳&要約&感想)てみたい。http://docs.oracle.com/javaee/7/tutorial/doc/cdi-basic.htm#GIWHBhttps://access.redhat.com/site/documentation/ja-JP/JBoss_Enterprise_Application_Platform/6/html/Development_Guide/sect-Use_CDI_to_Develop_an_Application.htmlでは。さまざまなコンポーネントを疎結合かつタイプセーフな方法で柔軟に統合出来る。7)CDIは、オブジェクトのライフサイクルを管理し依存性を自動的に提供する。以下の様にメンバーを宣言することで、CDIランタイムにより自動的にインジェクトされる。CDIランタイムは、インスタンスのスコープを知る必要がある。CDIが管理、インジェクト出来るクラスでほとんどのJavaクラスが対象となる。CDIが提供するサービス最初の2つを基本として,大きく以下の様なことが可能となる。疎結合であることサーバーとクライアントの分離(定義された型と限定子)。Beanプリミティブ型を含むほとんどのJava型が、Bean型。