NetBeans 8.0.1 で JavaEE7 な CDI を利用する際の注意点
NetBeans は JavaEE 開発にとってなくてはならない優秀な IDE だが、CDI を利用する場合に注意点が存在する。JavaEE6 以降ではすっかり主軸となった CDI についての注意点を紹介する。
新規プロジェクト作成時の注意点
新規プロジェクトから以下の「Webアプリケーション」を選んだ場合、CDI のライブラリに参照が張られない点だ。
cdi-api.jar への参照が存在しないため、CDI を管理コンテナとして明示する以下のアノテーションが利用できない。
- @javax.enterprise.context.RequestScoped
- @javax.enterprise.context.SessionScoped
- @javax.enterprise.context.ApplicationScoped
一方で、以下の JSF 2.0 の管理コンテナを利用するアノテーションは指定できてしまうので注意が必要だ(以下のアノテーションを利用しても、CDI の @Inject ではインスタンスを利用できない)。
- @javax.faces.bean.RequestScoped
- @javax.faces.bean.SessionScoped
- @javax.faces.bean.ApplicationScoped
この辺りの情報は 大混乱に陥っているJavaEE 6のアノテーションに関する使い分けについて が詳しい。
どう解決したらいいの?
以下の様に新規プロジェクトから Maven の Web アプリケーションを選択し、pom.xml を記載して参照を解決すればよい。
pom.xml は以下の様に記載する。CDI のバージョンが 1.2 よりも新しくなったら別途追記してほしい。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany</groupId> <artifactId>MavenWebApp</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>MavenWebApp</name> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.enterprise</groupId> <artifactId>cdi-api</artifactId> <version>1.2</version> <scope>provided</scope> </dependency> </dependencies> /// 中略