回答:
Springは当初からEJBの代替として開発されたので、答えはもちろんEJBの代わりにSpringを使用することです。
EJBを使用する「利点」がある場合、チームのスキルに依存すると思います。Springの専門知識がなく、EJBの経験が豊富な場合は、EJB 3.0を使用することをお勧めします。
EJB標準をサポートするように作成されたアプリサーバーは、理論的には、1つの準拠Java EEアプリサーバーから別のアプリサーバーに移植できます。しかし、それは、1つのベンダーに縛られるベンダー固有の拡張機能から離れることを意味します。
アプリサーバー(WebLogic、Tomcat、JBOSSなど)に依存しないため、それらの間で簡単にSpringポート。
しかし、あなたは春に閉じ込められています。
Springは、Guiceや別のDIフレームワークに切り替えることを決定した場合でも、影響のある問題に利益をもたらす優れたOO設計プラクティス(インターフェース、レイヤー、懸念の分離など)を奨励します。
更新:この質問と回答は2014年に5年目です。プログラミングとアプリケーション開発の世界は、その時代に大きく変化したと言われる必要があります。
それはもはや、JavaかC#、SpringかEJBの間の単なる選択ではありません。vert.xそれは全くのJava EEを避けることが可能です。アプリサーバーがなくても、拡張性の高いポリグロットアプリケーションを作成できます。
更新:2016年3月です。Spring Bootは、Java EEアプリサーバーなしでアプリケーションを作成するさらに優れた方法を提供します。実行可能JARを作成して、JVMで実行できます。
OracleがJava EE仕様を引き続きサポートするかどうか疑問に思います。EJBはWebサービスに引き継がれました。EJBソリューションは機能していません。(ちょうど私の意見です。)
まず、はっきり言っておきますが、Springを使用するべきではないと言っているのではありません。
EJB 3は標準ですが、Springはそうではありません(事実上の標準ですが、同じことではありません)。これは当面は変更されません。Springフレームワークは任意のアプリケーションサーバーで使用できますが、Springアプリケーションは、Spring自体と、Springに統合するために選択した特定のサービスの両方にロックされます。
Springフレームワークは、アプリケーションサーバーとサービスライブラリの上に配置されます。サービス統合コード(データアクセステンプレートなど)はフレームワークに常駐し、アプリケーション開発者に公開されます。対照的に、EJB 3フレームワークはアプリケーションサーバーに統合され、サービス統合コードはインターフェースの背後にカプセル化されます。したがって、EJB 3ベンダーは、アプリケーションサーバーレベルで作業することにより、パフォーマンスと開発者エクスペリエンスを最適化できます。たとえば、JPAエンジンをJTAトランザクション管理に密接に結び付けることができます。別の例は、EJB 3開発者に透過的なクラスタリングサポートです。
ただし、EJB 3は完全ではありませんが、いくつかの機能が不足しています(たとえば、単純なPOJOなどの非管理対象コンポーネントのインジェクション)。
パスカルのポイントは有効です。ただし、春を支持して次のようなものがあります。
EJB仕様は実際には少し緩いため、さまざまな動作がさまざまなアプリケーションサーバーで確認できます。もちろん、これはほとんどの場合には当てはまりませんが、一部の「暗いコーナー」ではそのような問題がありました。
Springには、spring-test、AOP、MVC、JSF統合などの追加機能がたくさんあります。EJBにはそれらの一部(インターセプターなど)がありますが、私の意見では、それほど開発されていません。
結論として、それは主にあなたの正確なケースに依存します。
EJBContainer.createEJBContainer()
、埋め込みコンテナを使用するための標準APIがあります。したがって、それでも、あなたの発言は間違っています。
SpringはEJBを補完するものであり、EJBを置き換えるものではありません。SpringはEJBの上にあるレイヤーです。ご存知のとおり、EJBのコーディングはAPIを使用して行われます。つまり、Springフレームワークを使用してAPIにすべてを実装する必要があります。ボイラープレートコードを作成し、そのプレートを取得し、それに何かを追加するだけで、すべてが完了します。内部的にSpringはEJBと接続されています-SpringはEJBなしには存在しません。
Springを使用する主な利点は、クラス間にまったく結合がないことです。