質問: EJBについて調べると「ビジネスロジックに使う」「サーバーサイドのコンポーネント」など抽象的な説明しか見つからず、具体例は「DB処理」か「タイマー処理」しか見たことがありません。 かくいう自分もDB処理にしか使っていないのですが他にどのような使い方があるのでしょうか? (@Transactionalアノテーションが追加されてからCDIでもトランザクション処理ができるようになりますますEJBの存在価値がわからなくなりました) よろしかったらステートレス・ステートフル・シングルトンの使い分けも教えていただけると嬉しいです。
回答: EJBの用途はありません。ありません。 じゃ、なんでEJBなんてものが存在しているのか。ざっくりいうと「歴史的理由」です。それ以上の意味はほぼないと思ってよいです。 も参照してみてください。 EJBはもともと、ビジネスロジックそのものを分散コンポーネントとして流通可能にしようとする意図で登場しました。ビジネスロジックを提供する「EJBean提供者」EJBeanを動作させる基盤となる「JavaEEサーバ(=EJBコンテナ)」、それらを組み合わせて業務を組み上げる「デプロイヤ」の3者の役割がJavaEE仕様として明確に決められていました。それら3者をつなぎ合わせるのがコンテナ設定ファイルであり、実際のデータベース接続先と論理名との対応をコンテナ設定ファイルに記載しておき、EJBeanからはその論理名だけを使うように実装することで、ビジネスロジックを実装した時点よりずっとあとに、デプロイヤが実際のデータベース名を決定する、といったことを目指したのです。 しかし、そんな仕様は複雑すぎて、設計も大変で、実行もとても重たかったため、狙っていたコンポーネント市場も形成されず、アンチEJBeanとしての「POJO」「依存性の注入」「設定より規約」という概念が登場し、その概念を実装した Spring や Seasar といったフレームワークが生まれ、これら概念がJava仕様に逆輸入された、という道のりを辿ってきました。もともとのEJBのコンセプトはすっかり骨抜きになっているため、すでにEJBの存在価値はないと言ってもよいでしょう。