41

EJB は 3.x バージョンで多くの改善を達成しました。Spring も一般的に使用されており、バージョン 3 は優れた代替手段です。

Web には多くの記事がありますが、ejb3x と spring3x の正確な比較はありません。実際の例で、どの条件でどちらが優れているかについて何か考えはありますか?

たとえば、データベースとサーバーを分離したい場合、アプリケーションがサーバー上にあり、データベースが別のサーバーにあることを意味します.EJB リモーティングと Cluster4Spring など ?

すべての @Annotation を実行することは常に良いことですか? 構成は必要ありませんか?

4

7 に答える 7

56

アプリケーションがあるサーバーで実行され、データベースが別のサーバーで実行されるユース ケースでは、EJB と Spring のどちらを選択するかは重要ではありません。Java SE アプリケーション、Tomcat や Jetty などの単純なサーブレット コンテナー、PHP、Ruby on Rails など、すべてのプラットフォームがこれをサポートしています。

そのための明示的なリモーティングは必要ありません。データソースを定義し、DB サーバーが存在する URL を指定するだけです。

とはいえ、EJB と Spring Bean の両方がデータソースの操作を容易にします。どちらも、データソースの定義、Bean への注入、およびそれらに関連付けられたトランザクションの管理に役立ちます。

2 つのうち、EJB (および一般的な Java EE) はより軽量であり、構成よりも規約の原則に準拠しています。Spring は、同じものを取得するためにさらに冗長性を必要とし、XML ファイルに大きく依存しているため、すぐに非常に大きく扱いにくくなる可能性があります。コインの裏返しとして、Spring はそれほど魅力的ではない可能性があり、必要なものをすべて書き出すと、よりコントロールできるようになる可能性があります。

もう 1 つの問題は、EJB と Spring の開発方法です。

EJB は無料 (無料のビールのように) で、オープンソースで非独占的です。非営利組織 (Apache)、オープン ソース企業 (Redhat/JBoss)、および完全に商用化されたクローズド ソース企業 (IBM) によって行われている EJB の実装があります。私は個人的に後者を避けますが、それぞれに独自のものです。

一方、Spring は無料でオープンソースですが、独自性が強いです。Spring を作成している会社は 1 つだけで、それが Springsource です。ロッドに同意しない場合は、ご苦労をおかけします。これは必ずしも悪いことではありませんが、知っておくべき違いです。

すべての @Annotation を実行することは常に良いことですか? 構成は必要ありませんか?

本当に終わりのない議論です。XML は維持するのが難しいと主張する人もいれば、アノテーションが純粋な POJO モデルを汚すと主張する人もいます。

Bean に EJB ステートレス Bean (@Stateless) または JPA エンティティ (@Entity) としてアノテーションを付けるのは、アノテーションを使用してより明確に行われると思います。@EJB または @Inject 依存性注入についても同様です。一方で、JPQL の名前付きクエリはアノテーションではなく XML ファイルにすることを好み、純粋な構成データ (何かの最大値など) を表すインジェクションも XML にすることを好みます。

Java EE では、すべてのアノテーションを XML で指定することもできます。注釈と同等の XML の両方が存在する場合、XML は注釈を無効にします。これにより、デフォルトのケースのアノテーションから始めて、後で特定のユース ケースの XML を介してオーバーライドすることが非常に便利になります。

Java EE の現在の好みは、(単純な) 注釈と、構成よりも多くの規則を組み合わせたものに向いているようです。

于 2011-08-17T13:08:38.733 に答える
14

あなたが尋ねるべき本当の質問は、CDI / EJBまたはSpringです

于 2011-08-27T22:53:18.570 に答える
6

多くの場合、Spring 対 EJB ではなく、Spring 対 Java EE です。EJB 自体は Spring Bean に匹敵します。どちらもコンテナ (EJB コンテナまたは Spring コンテナ) 内で実行されるマネージド Bean の一種です。

全体として、2 つのテクノロジはかなり似ています。Reza Rahman は、しばらく前にこの 2 つを比較しました。

于 2011-08-17T09:31:33.837 に答える
3

両方ではなく、どちらか一方を選択してください。

私の個人的な好みは春です。私は過去 6 年間、大きな成功を収めたプロジェクトで使用してきました。他のどのソフトウェアよりも堅牢です。

アプリケーションで EJB を使用することを選択した場合、Spring は EJB を使用できますが、その逆は真ではないと思います。

余裕があれば、Web サーバー、アプリ サーバー、データベース サーバー用に個別の物理マシンをお勧めします。

Spring は、SOAP や REST Web サービスなど、いくつかのリモート オプションと連携できます。Spring Bean と EJB の比較は、この質問の範囲を超えています。それがあなたの実装と何の関係があるのか​​ わかりません。Spring POJO サービスを使用する場合、それらはリモート EJB のような別のネットワーク ホップを必要とするのではなく、メモリ内にあります。ファウラーの分散オブジェクトの法則を考えてみてください:「しないでください」。正当な理由がある場合にのみ、レイテンシーを導入してください。

于 2011-08-16T09:34:40.390 に答える
2

EJB 3.1 は、Java 6 EE アプリケーションの標準でありながら最高です。

Spring はまだ Java 6 CDI(weld) をサポートしていません。また、XML 構成に大きく依存しています。EJB 3.1 は強力でスマートです。

Spring 3.1 には XML 構成は必要ないと思います。構成に注釈を使用するオプションがあります。

于 2012-04-16T06:54:45.553 に答える