アプリケーションがあるサーバーで実行され、データベースが別のサーバーで実行されるユース ケースでは、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 の現在の好みは、(単純な) 注釈と、構成よりも多くの規則を組み合わせたものに向いているようです。