//fix this/ Javaコードの間違いをさがせ!
このシリーズは、あなたのコーディング・スキルを試すコーナーです。毎号オラクルのJavaエバンジェリストたちが、Javaコードに関する難問を出題し、正解と解説を掲載します。是非、毎号チャレンジして貴方のコーディング能力の向上にお役立て下さい。
Articles
Java
Java技術関連記事
Fix This
このシリーズは、あなたのコーディング・スキルを試すコーナーです。毎号オラクルのJavaエバンジェリストたちが、Javaコードに関する難問を出題し、正解と解説を掲載します。是非、毎号チャレンジして貴方のコーディング能力の向上にお役立て下さい。
Contexts and Dependency Injection(CDI)は、Java EE 6プラットフォームで新たに導入された仕様です。この仕様では、Webアプリケーションへの型保証(type-safe)された標準ベースの依存性注入について定義されています。CDIでは、JSFとEJBのプログラ ミング・モデルを統合し、EJBをJSF バッキングBeanとして使用できるようにすることでWebとトランザクション層とのギャップを埋めています。
JSF バッキングBean用の次のコードについて考察します。
@Named @Stateless
public class MyBean {
public void save() {
// データベースへの永続化のためのビジネス・ロジック
}
}
WAR構造は次のようになります。
WEB-INF/classes
/MyBean
index.xhtml
@Namedを使用すると、JSFページ用のxhtmlファイルで、式言語 #{myBean.save}でこのBeanにアクセスできます。しかし、このプログラムでは、JSFページにEJBをインジェクションできません。その理由は以下のどれでしょうか。
1) EJBでインジェクションを有効にするには、EJBをJARファイルまたはEARファイルにパッケージ化する必要がある。
2) インジェクションを有効にするには、「beans.xml」が必要である。
3) EJBのビジネス・メソッドを呼び出すには、そのパラメータとしてActionEventが必要となる。
4) CDIインジェクションは仕様で定義されたクラスからは利用できない。
<ヒント>
これは、CDI対応アプリケーションの構築時にもっともよく見られる間違いです。
正解は、2)です。インジェクションを有効にするために「beans.xml」が必要です。
CDI仕様は、beanインジェクションを稼動させるためにWEB-INFディレクトリの”beans.xml”を必要とします。なので、たとえコードに問題がなくても、ファイルが足りないと、EJBインジェクションを動作させることができません。