私はJava EEに非常に慣れていないので、ローカルインターフェースとリモートインターフェースの概念を理解しようとしています。
EJB仕様の初期バージョンでは、EJBはリモートコンポーネントであると「想定」されていました。EJBを呼び出す唯一の方法は、RMIセマンティクスとそれが意味するすべてのオーバーヘッド(すべてのネットワークコールとオブジェクトのシリアル化)を使用してリモートコールを行うことでした。メソッド呼び出し)。EJBクライアントは、EJBコンテナと同じ仮想マシンに配置されている場合でも、このパフォーマンスのペナルティを支払う必要がありました。
その後、Sunはほとんどのビジネスアプリケーションが実際にはEJBを別の層に配布していないことを認識し、ローカルインターフェースの概念を導入して(EJB 2.0で)仕様を修正しました。直接メソッド呼び出し、RMIセマンティクス(および関連するオーバーヘッド)を完全にバイパスします。
Java EEの大きな利点の1つは、拡張が容易であるということです(これは、さまざまなサーバーにさまざまなコンポーネントをデプロイできることを意味します)。
Java EEはスケーリングできますが、これは必ずしもコンポーネントの配布を意味するものではありません。Web層とEJB層を分離せずに、Web + EJBアプリケーションをクラスターで実行できます。
アプリケーションのサーバーごとにコンポーネントが異なることが予想される場合は、リモートインターフェイスを使用することになっていますか?アプリケーションが1つのサーバーにのみ存在する場合は、ローカルインターフェイスを使用しますか?
私は次のように言います。クライアントが同じJVMにない場合はリモートインターフェースを使用します(これは、1つのサーバー/ JVMのみを使用することを意味するものではありません)。
(...)ローカルインターフェイスを使用して開始し、該当する場合はリモートインターフェイスに徐々にアップグレードしますか?
おそらくローカルインターフェイスを使用することから始めます。また、すでに示唆したように、リモートインターフェイスへの切り替えは必ずしも必須ではありません(連結構造をクラスター化できます)。
下記のリソースを確認することをお勧めします(最初の2つはかなり古いですが、まだ関連性があり、他の2つはより新しいものです)。
資源