0

具体的には、元の.warファイルをアプリケーションサーバーにデプロイしている場合、これをサポートするためにベースコードを変更することなく、元のファイルにクラスのさまざまな実装を提供する.warをデプロイできますか?

編集。私は問題を間違って定式化しました、それは実際にはもっと簡単だと思います。WARごとに異なるパスではなく、同じベースパス内の2つの異なるWARからのアクションを公開する必要があります。コンテナ構成レベルで実行できますか?それとも、URL書き換えなどを採用することをお勧めしますか?

4

1 に答える 1

1

簡単ではありません。通常、デプロイされたWARはJava EEサーバー内の個別のWebアプリになり、独自のクラスローダーを取得します。2番目のデプロイメントは別のクラスローダーを取得します。それらは確かにいくつかの祖先を共有しますが、他のWARからのものを再実装することはできません。2番目のデプロイメントは、その方法のためにそれを「見る」ことができません。クラスローダーは一緒にチェーンされます。

自明ではありませんが、 Javaエージェントを使用して実行中のクラスを書き換えることは可能です。新旧のコードを使用してヒープ上にオブジェクトが存在する可能性があるという問題がありますが、変換(着信)クラスを変換(着信)クラスを書き換えることができ、ライブ(インスタンス化)クラスを書き換えることができるはずです。

クラスの書き換えは、Eclipseのホットコード置換がどのように機能するか、またJRebelの高速再配置ソリューションがどのように機能するかです。

これを本当に追求したい場合は、 AspectJのようなAOPシステムを使用できるかもしれませんが、 AOPがより適切なソリューションであるという問題ではなく、ビルドまたはデプロイの問題を解決しようとしているようです。

于 2012-09-24T15:47:19.573 に答える