2011-11-15 10 views
3

Javaクラスの.classファイルを実行中のアプリケーションサーバーのearファイルに追加するだけで、再起動する必要はありません。この方法でJVMクラスローダーはどのようにロードされますか。私はクラスローダーが起動時にファイルをロードするという印象を受けていました。実行中のアプリケーションサーバーでクラスファイルを変更する場合は、サーバーを再起動する必要があります。実稼働環境でのクラスファイルの追加

答えて

1

EARは、いくつかの追加情報があるJARファイルです。したがって、J2EEコンテナと同じ方法を使用できます。新しいクラスローダを作成して(試してURLClassLoader)、新しいクラスをロードするために必要な情報を与えます。

これは新しいクラスで機能します。これらのクラスのすべてのインスタンスに元の型への参照が含まれているため、既存のクラスを置き換えることは別の問題です。これを解決するための一般的なアプローチはありませんが、JRebelの人はそれを行うことができるクラスローダーを書いています(いくつかの制限があります)。

0

ホットコードの置き換えの場合、JRebel 耳に.classを追加するだけで十分ではないので、アーカイブを完全に再構築する必要があります。

1

クラスがまだロードされていない場合は、クラスローダーが利用できるようにするだけです(展開する展開されたフォルダ(WEB-INF/classesなど))にコンパイルするだけです。これは、パッケージ化されたEARからデプロイするときは正常に動作しません。デプロイメント時に通常は展開されるためです。

クラスが既にロードされている場合は、変更を認識するクラスローダーが必要です。あなたのコンテナがあなたのためにそれを行うか、またはあなたが偉大な作品JRebelを見てみることができます。

関連する問題