Archive for 2014年1月29日
CDI 1.1 : @Vetoed アノテーション of 1/45
昨日、「Java EE 7 の新機能を 45 分で 45 個ご紹介」のエントリを書きましたが、具体的にどのような内容なのか?ご興味ある方もいらっしゃるかと思いますので、セッション内容の一例をご紹介します。
CDI 1.1 : @Vetoed アノテーション
CDI 1.1 から特定のクラスだけをインジェクション対象からはずし、インジェクションできないようにする事ができるようになりました。インジェクション対象からはずすためには、該当のクラスに対して、@Vetoed アノーテションを付加します。
ご参考:CDI 1.0 までは XML で除外対象の設定を行ってました。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"> <scan> <exclude name="com.acme.rest.*" /> <exclude name="com.acme.faces.**"> <if-class-not-available name="javax.faces.context.FacesContext"/> </exclude> </scan> </beans>
@Vetoed アノテーションの利用例として、JPA のエンティティ・クラスに対して付加する事が有効です。このアノテーションを JPA のエンティティに付加する事で、CDI のライフサイクルと JPA のライフサイクルの競合を防ぎより安全に実装することができます。下記の例では JPA のエンティティを CDI では管理できないようにし JPA の EntitiManager によってのみ管理する例を示します。
@Entity @Vetoed public class Person { @Column private String fName; @Column private String lName; }
もしくは、package-info.java を作成し、該当パッケージに含まれるクラス全てをインジェクション対象から外す事も可能です。
@Vetoed package com.yoshio3.noninjectable ; import javax.enterprise.inject.Vetoed ;
このように、本セッションは Java EE 7 で追加された新機能をいち早くご理解されたい方に有用なセッションです。前提としてコンフィグレーションの内容やソースコードを交えての説明ですので Java のコードが理解できる方の参加が必須で、金魚本や過去のセミナーなどから Java EE 5/6 を触った事のある方ならばより理解がしやすいかと想定します。