2016-02-07 24 views
5

私はホットコードの展開にEclipseサーバー機能を使用しています。 WebサーバーとしてのTomcatの使用。しかし、私はそれがどのように動作するのか分かりません。私は自分自身が理解するために、どのようにして が内部的に働く必要があります。ホット展開は内部的にどのように機能しますか?

私の理解: -開発者がコードを変更したときに(Eclipseというクラス)、Eclipseは修正されたコンパイルされたクラスを適切な場所に配置/公開します(特定のweb/appサーバーでなければなりません。 (HDD))。これでWebサーバー固有のクラスローダーが画像に入ります。 HDDの下に新しいエントリがあります。さて、それはクラスがすでにパーマ世代空間のクラスローダによってロードされている場合、ウェブサーバはpermgen空間から、それをアンロードし、新しい変化(バイトコード)が反映されるように、サーバの再起動なしで1内部で新しいをロード見つけました。リロードの一環として、webserverは、新しい変更が反映されるように、既存のEpmloyeeオブジェクトをperm gen spaceの 新しいクラス定義とリンクします。

は、私の理解は正しいですか?

thisのようなリンクでは、Eclipseのホットデプロイメントは再デプロイメントの自動化です。私が信じているのは、Eclipseが自動的にサーバーを停止し、再発行し、開発者の介入なしに再起動するということです。 Buti私はこのプロセスがスタート/パブリッシュ/リスタートに比べて本当に速いので、それは真実ではないと思います。 また、それが本当だったなら、セッションや他のライブオブジェクトが再起動後にどう生き続けるか?は、このリンクになっていることがあり、私は熱い展開が瓶の中のクラスのために働く見つけるとしても、今

過去に本当だったではなく
+2

[ホットデプロイメントを「難しい問題」にする原因]?(http://stackoverflow.com/questions/660437/what-makes-hot-deployment-a-hard-problem) –

+0

@ivanその重複する。あなたが言及したリンクは、ホットデプロイメントの内部についてではなく、彼が挑戦することに関するものです。 – emilly

+0

それに受け入れられる答えは、内部的に何が起こっているのかを説明します。たぶん詳細はもっと必要ですが、それは別の問題です。 –

答えて

2

ホットコードの展開は、ランタイム機能に依存します。 linkedへの答えは、自動化がサーバーを停止して新しいコードをデプロイし、サーバーを再始動することを意味しません。これは無駄でした。

代わりに、ほとんどのJavaアプリケーションサーバーは、アプリケーションをに再デプロイすることができます。これは、場合によってはそれが(HTTPセッションをデシリアライズ/シリアライズ)状態に移行し、アプリケーションの古いバージョンをドロップします、サーバーがこの新しいクラスローダによってアプリケーションの新しいバージョンをロードし、新しいWebアプリケーションクラスローダを作成することを意味します。

今すぐ再配備速度はアプリケーション自体に非常に依存 - アプリケーションが初期化される方法。キャッシュをウォーミングアップする必要がありますか?依存関係(a-las Spring、CDI)を満たす必要がありますか? Hibernate SessionFactoryを初期化する必要がありますか?多くの要因が関与しています。

何のEclipse WTPが自然に行うことは、それはアプリケーションのコンテナの再デプロイのプロセスをトリガーすることができるということです - それはそれです。小さなアプリケーションはもちろん、再デプロイメントに時間がかかりません。

特別なランタイムテクノロジ/コンテナ/フレームワークがなく、特定のテクノロジ用に更新されたホットコードをトリガーするフックをEclipse用に開発した特別なコネクタがあります。 OSGiランタイムの良い例はbndtoolsです。

そして、ちょうどいくつかの混乱を削除するには:

多くの人々がHotSwapホットデプロイを混乱させる。最初のHotSwapは、実行時にクラス定義を更新するJVMの機能です。後者のホットデプロイメントは、JVMプロセスを再起動せずに、アプリケーションサーバーがアプリケーションを自動的にデプロイするかどうかを自動的にデプロイする機能です。

私の答えはHotSwapではなく、ホットデプロイについてです。したがって、プラットフォームの基本的なメカニズムではなく、ホット・デプロイメントを「オートメーション」と呼んでいます。

+0

ありがとうAntan。 '代わりに、ほとんどのJavaアプリケーションサーバーはアプリケーションを再デプロイできますが、Eclipse(ID)がアプリケーションに再デプロイする必要があることをサーバーに伝える方法を教えてください。特定の場所に新しいクラスファイルを配置し、サーバーはそれらのファイルまたは完全なアプリケーションのみを再デプロイしますか? – emilly

+0

第2のポイントは、 '(HTTPセッションのシリアライズ/デシリアライズ)'状態を移行する場合がありますが、私の質問はセッションオブジェクトとは別のドメイン/サービスオブジェクトのような他のオブジェクトの状態を移行しますか? – emilly

+0

@emily Eclipseは完全なアプリケーションの再デプロイを起動します。状態の移行に関しては、完全に実装固有のものでなければなりません。私は、HTTPセッションのほかに他のどの状態も移行されているのを見ていません。 –

関連する問題