質問: JavaEEのCDIとEJBの関係や使い分けについて、混乱しています。 DIをしたい → @RequestScoped等のスコープを指定する(CDI Beanを作る?)アノテーションと、@Injectアノテーションを使う。 トランザクション管理をしたい → @Transactionalアノテーションを使う。 この程度の要件であれば、EJBのアノテーション(@Statelessとか@EJBとか)は、使う理由が無いのですか? CDIとEJBとで機能的に重複しているものが多いように感じていますが、どう考えたら良いのでしょうか? そもそも「CDIかEJBか」という対比ができるような概念なのかもよく分かっていません。 関連する質問:@Statelessと@RequestScopedの用途の違い
回答: 英語ですが、次のページが参考になるかもしれません。 When to prefer EJB over CDI ここでは、「EJB = CDI + container services」とまとめてます。 Where to use EJB 3.1 and CDI? ここでは、「EJB >= CDI」と言ってます。