ぺんぎんらぼ

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です。たまに絵を描きます。

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です

Jakarta EE (Java EE) Topics - @Inject or @EJB ?

Java EEではコンポーネントの管理に「CDI」と「EJB」があります。
どちらかで統一したいところですが、それぞれ役割が分かれていて、Backing Beanのような画面のコンポーネントは「CDI」、ビジネスロジックや永続化のコンポーネントは「EJB」と、使い分けることがほとんどだと思います。

コンポーネントのインジェクト方法

CDI」のManaged Beanから「EJB」のビジネスロジックを呼び出すときは、「CDI」の中で「EJB」のコンポーネントをインジェクトする必要があります。
フィールドインジェクションの場合、アノテーションを指定してインジェクションしますが、その時のアノテーションが「@Inject」と「@EJB」の2種類があり、どちらを指定すればよいのか迷うところです。

@Injectアノテーション

@Inject
private SampleLogicBean bean;

ざっくり解釈で、CDIEJBの両方のBeanをインジェクトできる、です。
ただし、リモートインターフェースのEJBはインジェクトできません。

EJBアノテーション

@EJB
private SampleLogicBean bean;

ざっくり解釈で、EJBのBeanのみインジェクトできる、です。
リモートインターフェースのEJBもインジェクトできます。

結論

@Injectアノテーションで統一、でいいと思います。
リモートインターフェースのEJBを使う場合は、泣きながら@EJBアノテーションでインジェクトすることにします。