Java EEではコンポーネントの管理に「CDI」と「EJB」があります。
どちらかで統一したいところですが、それぞれ役割が分かれていて、Backing Beanのような画面のコンポーネントは「CDI」、ビジネスロジックや永続化のコンポーネントは「EJB」と、使い分けることがほとんどだと思います。
コンポーネントのインジェクト方法
「CDI」のManaged Beanから「EJB」のビジネスロジックを呼び出すときは、「CDI」の中で「EJB」のコンポーネントをインジェクトする必要があります。
フィールドインジェクションの場合、アノテーションを指定してインジェクションしますが、その時のアノテーションが「@Inject」と「@EJB」の2種類があり、どちらを指定すればよいのか迷うところです。
@Injectアノテーション
@Inject private SampleLogicBean bean;
ざっくり解釈で、CDIとEJBの両方のBeanをインジェクトできる、です。
ただし、リモートインターフェースのEJBはインジェクトできません。
@EJBアノテーション
@EJB private SampleLogicBean bean;
ざっくり解釈で、EJBのBeanのみインジェクトできる、です。
リモートインターフェースのEJBもインジェクトできます。
結論
@Injectアノテーションで統一、でいいと思います。
リモートインターフェースのEJBを使う場合は、泣きながら@EJBアノテーションでインジェクトすることにします。