2011-06-13 19 views
3

各Webアプリケーションが独自のプロセス(JVM)で動作するWebコンテナを実行したいとします。着信要求は、ポート80上で実行されているプロキシWebアプリケーションによって、各自のJVM内の独自のポートで実行されている個々のWebアプリケーション(Webアプリケーション)に転送されます。別々のプロセスでWebアプリケーションを実行する

これは、3つの問題を解決する:

  • (再起動の間にJNIコードの変更)を再起動することができないJNIを使​​用してWebアプリケーション]。新しいWebアプリケーションをロードする前に古いWebアプリケーションがガベージコレクションされていることを保証する方法はないので、コードがSystem.loadLibrary()を呼び出すときにJVMがスローします。java.lang.UnsatisfiedLinkError: Native Library x already loaded in another classloader.
  • Webappがリロードされるたびに強制的にサーバーを再起動します。 Tomcatはこの問題に取り組んできましたが、決して完全に修正されることはありません。
  • 再起動が高速です。私が提案しているメカニズムは、ほぼ即時のWebアプリケーションの再起動を可能にします。古いwebappがアンロードを完了するのを待つ必要がなくなりました。これは最も遅い部分です。

私はRFE herehereを掲示しました。私はあなたの考えを知りたいです。

今日、既存のWebコンテナはこれを行っていますか?

答えて

0

コンテナごとに1つのアプリケーションを配備し、DNSエントリとリバースプロキシを使用して全く同じことを行うことはできませんか?私はWeblogicが管理ドメインの形でこれを持っていると信じています。

+0

複数のWebアプリケーションに単一の管理インターフェイスを提供することで、今日別のコンテナを使用することで不可能な生産性を向上させることができます。たとえば、ユーザーがWebアプリケーションのリロードを要求すると、コンテナマイナスWebアプリケーションをバックグラウンドであらかじめ読み込んでおくことができます。リロードリクエストが来たら、古いJVMをシャットダウンし、新しいwebappを待機中のJVMにロードするだけです。これを今日実装しようとすると、インスタンスをシャットダウンしてインスタンスを連続して再起動すると時間がかかり、開発の生産性が低下します。 – Gili

0

いいえ、AFAIKはありません。おそらく、Java WebコンテナがサーブレットAPIに従うことを強調していると思われます.HTMLリクエストごとにスレッドを停止します。あなたが望むのは、JVMレベルでの分岐です。これは、単に標準のJavaイディオムではありません。

+0

私は、各HTTP要求がそれ自身のJVMで実行されるように要求していません。私は自分のJVMで各webappを分離しています。同じwebappの各要求ではありません。 – Gili

0

正しく理解すれば、多くのJVMでアプリケーションを配布できるIBMのWebSphere Network Deployment(私はIBMで働いている免責条項)など、エンタープライズ品質サーバーの標準機能を求めています。物理マシン。

あなたの根本的な前提が正しいとは確信していません。新しいバージョンのアプリケーションをデプロイするために、JVM全体を再起動する必要はありません。多くのアプリサーバーでは、アプリのバージョンを破棄して新しいバージョンを読み込むことを許可するクラスローダー戦略を使用します。

+0

あなたは私の質問を誤解しました。 JVMにまたがるWebアプリケーションは必要ありません。私が知る限り、JNIアプリケーションを再起動する安全な方法はありません。そのため、ここでは特別なクラスローダー戦略は機能しません。 – Gili

関連する問題