0

Tomcat の Web アプリケーションは .war ファイルにラップされ、Tomcat にスローされます。アプリケーションは、war ファイルおよび含まれている jar ファイル内のクラスを使用できます。これにより、Tomcat のランタイム クラスがアプリケーション クラスから分離されます。

ストーム (storm-project.net を参照) を使用する場合、同様の分離はありません。むしろ、推奨される方法では、「ファット jar」を作成する必要があります。これは、必要なクラス ファイルをすべて独自の jar からアンラップした後に含む jar を示します。単純な状況ではこれは機能しますが、結果として得られるファット jar には、すべてのマージされた jar からのすべての META-INF/* ファイルが正しくマージされている必要があり、これは半自動的には機能しません。

戦争ファイルのようなものをシミュレートする独自のクラスローダーを書くことを恥ずかしがりません。ただし、デプロイするすべてのクラスをロードするデフォルトのクラスローダーをインターセプトする方法がわかりません。

私の理論では、アプリケーションのクラスの 1 つがデフォルトのクラス ローダーによって最初にロードされるというものです。おそらくその - セクションでstatic、すべての依存クラスが自分のクラスローダーによってロードされるように、魔法のクラスローダースペルをキャストします。これにより、適切と思われるものから必要なクラスを取得する方法になります。

説明されている一般的な問題と、必要な特定の魔法に関するヒントをいただければ幸いです。

4

1 に答える 1

0

クラスローダのインターセプト: デフォルトのクラスローダは、現在実行中のクラスをロードしたものです。したがって、別のクラスローダを使用して WAR のエントリ ポイントを取り込む場合、それまたはその (実行時/作成) 子孫からのすべてのクラス参照は、デフォルトでそのクラスローダを通過します。その後、そのクラスローダは、独自の解決規則を使用して、より高いレベルのクラスローダに何を参照し、何をリロードする必要があるかを決定できます。単純な規則は、「このプラグインで利用できないものについてのみ親に尋ねる」という単純な規則です。 、「親の最後」とも呼ばれ、多くの場合十分です。

于 2014-02-22T18:53:22.620 に答える