[解決済み] EJB - リモートおよび/またはローカルインターフェイスを使用するとき?
質問
私はJava EEを使い始めたばかりで、ローカル・インターフェイスとリモート・インターフェイスの概念を理解しようとしています。Java EEの大きな利点の1つは、スケールが容易であることだと聞いています(これは、異なるコンポーネントを異なるサーバーにデプロイできることを意味すると思います)。そこで、リモートインタフェースとローカルインタフェースが登場するのでしょうか。アプリケーションが異なるサーバーに異なるコンポーネントを配置することを想定している場合、リモート・インターフェースを使用することになっているのでしょうか?そして、アプリケーションが1つのサーバーにしか存在しない場合は、ローカルインターフェースを使用するのでしょうか?
もし、上記の仮定が正しいのであれば、新しいアプリケーションで、トラフィックの量がわからない場合、ローカルインターフェースとリモートインターフェースのどちらを使うか、どのように選択すればよいでしょうか。まずローカルインタフェースを使用し、必要に応じて徐々にリモートインタフェースにアップグレードしていくのでしょうか?
明確な説明と提案に感謝します。
解決方法は?
<ブロッククオート私はJava EEを使い始めたばかりで、ローカル・インターフェイスとリモート・インターフェイスの概念を理解しようとしているところです。
EJB仕様の初期バージョンでは、EJBはリモートコンポーネントであると仮定され、それらを呼び出す唯一の方法は、RMIセマンティクスとそれが意味するすべてのオーバーヘッド(メソッド呼び出しごとにネットワーク呼び出しとオブジェクトシリアライズ)を使用して、リモートコールを行うことでした。EJBクライアントは、EJBコンテナと同じ仮想マシンに配置されている場合でも、このパフォーマンス上のペナルティを支払わなければなりませんでした。
その後、Sunはほとんどのビジネスアプリケーションが実際にはEJBを別の層に分散していないことに気づき、EJBコンテナと同じ仮想マシンに配置されたクライアントがRMIセマンティクス(および関連するオーバーヘッド)を完全に回避して直接メソッド呼び出しができるように、ローカルインターフェースの概念を導入して仕様を(EJB 2.0で)修正しました。
<ブロッククオートJava EEの大きなメリットの1つは、スケールが容易なことだと聞いています(異なるコンポーネントを異なるサーバーにデプロイできるという意味だと思います)。
Java EEは拡張可能ですが、これは必ずしも以下のことを意味しません。 分散 コンポーネントを使用します。Web層とEJB層を分離しなくても、Web+EJBアプリケーションをクラスタ上で実行することができます。
アプリケーションが異なるサーバーに異なるコンポーネントを持つことを想定している場合、リモートインターフェースを使用することになっているのでしょうか?そして、アプリケーションがひとつのサーバーにしか存在しない場合は Local インターフェイスを使用するのでしょうか?
私はこのように表現します:クライアントが同じJVMにない場合、リモートインターフェースを使用します(これは1つのサーバー/JVMだけを使用するという意味ではありません)。
(...) 最初はローカルインタフェースを使用し、必要に応じて徐々にリモートインタフェースにアップグレードしていきますか?
私なら、まずローカルインターフェースを使いますね。そして、すでに示唆されているように、リモートインターフェイスへの切り替えは必ずしも必須ではありません( コロケーション の構造)。
以下のリソース(最初の2つはかなり古いものですが、まだ関連性があり、他の2つはより新しいものです)をチェックすることをお勧めします。
リソース
- J2EEクラスタリングの裏側 by 王瑜
- Java EEアプリケーションのスケーリング by 王瑜
- Java EEアプリケーションのスケーリング -- Part 2 by 王瑜
関連
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
[解決済み] Spring Data JPAにおけるCrudRepositoryとJpaRepositoryのインターフェースの違いは何ですか?
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] 静的メソッドを使用する場合
-
[解決済み] ThreadLocal変数はいつ、どのように使用すればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefinedeclipse エラー。この行に複数のアノテーションが見つかりました: - 文字列を型解決に解決できない
-
eclipse で「アクセス制限: タイプ 'HttpServer' は API ではありません」というプロンプトが表示される。
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
JQuery DataTable 详解
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決