2016-07-29 13 views
0

私など私たちはのjavaコマンドを使用して、スタンドアロンのJavaアプリケーションを実行する場合、アプリケーションごとにJVMの新しいインスタンスが別々のヒープを使用して作成されていることのJava EEにおけるJava EEアプリケーションサーバーで単一のJVMインスタンスが必要な理由

  1. しかし、なぜをお願いしたいと思いますアプリケーションサーバーには、アプリケーションサーバーインスタンスにデプロイされたearファイルまたはwarファイルごとに1つのJVMインスタンスしかありませんか?
  2. アプリケーションごとに別々のクラスローダを使用して、なぜアプリケーションを区別するのか、代わりにJVMインスタンスを分離するのはなぜですか?
  3. サーブレット、jsp、ejbなどのライフサイクルを管理するために、Appサーバーで単一のJVMインスタンスが必要ですか?

答えて

0

oracleまたはjbossのようなアプリケーション・サーバーを起動したとします.jvmのチューニング・プロパティーを、binおよび* .batファイルに構成する必要があります。すべてのjvmチューニング・プロパティーはアプリケーション・サーバー上でのみ使用できます。アプリケーションサーバーの上にデプロイされている複数のwarファイルをデプロイしている間は、サーバーからjavaプロパティを取得します。

しかし、この場合よりもスタンドアロンアプリケーションを使用している間は、すべてのアプリケーションが独自のjvmプロパティーで構成されています。

0

クラスローダーに関して - アプリケーション(EAR/WAR)と各アプリケーションを互いに(理論上)分離します。たとえば、サーバーがSpring 3.xを使用し、アプリケーション1がSpring 4.xを使用しているとします。アイソレーションでは、サーバは3.xしか見ることができませんが、アプリ1は4.xしか見ることができません。

しかし、アプリ1にEAR/WARにSpring 4.x jarsが含まれていないとどうなりますか?親クラスローダ(サーバ)はSpringを読み込もうとしますが、もちろんこれは3.xです。次に、サーバーコンテキストから依存関係もロードされます。これは実際には機能的に動作するようですが(恐ろしい)、MethodNotFound例外とClassNotFound例外が発生する可能性が高くなります。

関連する問題