web-dev-qa-db-ja.com

Spring vs EJB。 SpringはEJBを置き換えることができますか?

Spring[〜#〜] ejb [〜#〜] と同様にトランザクションを使用できるためです。私にとって、SpringはEJBを使用する要件を置き換えることができます。誰でもEJBを使用することの追加の利点を教えてもらえますか?

96
cometta

Springは、EJBの最初から開発された代替手段として開発されたため、EJBの代わりにSpringを使用することができます。

EJBの使用に「利点」がある場合、それはあなたのチームのスキルに依存すると言うでしょう。 Springの専門知識がなく、EJBの経験が豊富な場合は、EJB 3.0に固執することをお勧めします。

理論的には、EJB標準をサポートするように作成されたアプリサーバーは、ある準拠するJava EEアプリサーバーから別のアプリサーバーに移植できます。ただし、 1つのベンダーに。

Springはアプリケーションサーバー(例:WebLogic、Tomcat、JBOSSなど)に簡単に移植できます。これは、それらに依存していないためです。

ただし、Springにロックされています。

Springは、Guiceや他のDIフレームワークに切り替えることを決めた場合でも、触れるあらゆる問題に役立つ良いOOデザインプラクティス(インターフェイス、レイヤー、関心の分離など)を推奨します。

更新:この質問と回答は2014年で5年目です。プログラミングとアプリケーション開発の世界はその間に大きく変わったと言う必要があります。

JavaまたはC#、Spring、EJBの間の選択だけではなくなりました。 vert.x を使用すると、eschew Java EEアプリサーバーを使用しなくても、高度にスケーラブルな多言語アプリケーションを作成できます。

更新:2016年3月です。 Spring Bootは、Java EEアプリサーバーなしでアプリケーションを作成するためのさらに優れた方法を提供します。実行可能JARを作成してJVMで実行できます。

OracleがJava EE仕様。WebサービスがEJBを引き継いでいます。EJBソリューションは死んでいます。

201
duffymo

まず、はっきり言っておきましょう。Springを使用しないでくださいと言っているわけではありませんが、いくつかの利点を求めているので、少なくとも2つはここにあります。

  • EJB 3は標準ですが、Springは標準ではありません(事実上の標準ですが、同じことではありません)。これは近い将来に変更されることはありません。 Springフレームワークはどのアプリケーションサーバーでも使用できますが、Springアプリケーションは、Spring自体と、Springに統合することを選択した特定のサービスの両方にロックされています。

  • Springフレームワークは、アプリケーションサーバーとサービスライブラリの上にあります。サービス統合コード(データアクセステンプレートなど)はフレームワークに常駐し、アプリケーション開発者に公開されます。対照的に、EJB 3フレームワークはアプリケーションサーバーに統合され、サービス統合コードはインターフェイスの背後にカプセル化されます。したがって、EJB 3ベンダーは、アプリケーションサーバーレベルで作業することにより、パフォーマンスと開発者エクスペリエンスを最適化できます。たとえば、JPAエンジンをJTAトランザクション管理に密接に結び付けることができます。別の例は、EJB 3開発者に透過的なクラスタリングのサポートです。

EJB 3は完璧ではありませんが、まだいくつかの機能が欠けています(例:単純なPOJOのような非管理コンポーネントのインジェクション)。

48
Pascal Thivent

パスカルのポイントは有効です。ただし、Springを支持する次のものがあります。

  • EJB仕様は実際には少し緩いため、異なるアプリケーションサーバーで異なる動作を観察できます。もちろん、これはほとんどの場合に当てはまりませんが、いくつかの「暗いコーナー」でこのような問題が発生しました。

  • Springには、Spring-Test、AOP、MVC、JSF統合など、多くの追加機能があります。EJBにはそれらの一部(インターセプターなど)がありますが、私はそうは考えていません。

結論として、それは主に正確なケースに依存します。

22
Bozho