実行中のアプリサーバーのearファイルにJavaクラスの.classファイルを追加するだけで、再起動する必要はありませんか?JVMクラスローダーはこの方法でどのようにロードしますか。クラスローダーは起動時にファイルをロードするという印象を受けました。実行中のアプリサーバーでクラスファイルを変更する場合は、サーバーを再起動する必要があります。
3 に答える
EAR はいくつかの追加情報を含む JAR ファイルであるため、J2EE コンテナーと同じアプローチを使用できます。新しいクラスローダーを作成し (試してくださいURLClassLoader
)、新しいクラスをロードするために必要な情報を与えます。
これは新しいクラスで機能します。これらのクラスのすべてのインスタンスには元の型への参照が含まれているため、既存のクラスを置き換えることは別の問題です。これを解決するための一般的なアプローチはありませんが、JRebelの担当者はそれも実行できるクラスローダーを作成しました (いくつかの制限があります)。
クラスがまだロードされていない場合は、デプロイ元の展開されたフォルダー (WEB-INF/classes など) にクラスをコンパイルすることにより、クラス ローダーで使用できるようにするだけです。通常、これらは展開時に展開されるため、パッケージ化された EAR から展開する場合、これは機能しません。
クラスがすでにロードされている場合は、変更対応のクラスローダーが必要です。コンテナがそれを行うか、うまく機能するJRebelを見ることができます。
ホット コード置換の場合は、JRebelを使用できます。ear に .class を追加するだけでは十分ではないため、アーカイブを完全に再構築する必要があります。