問題タブ [dynamic-class-loaders]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2022 参照

java - クラスをリロードして、その静的メンバーが再初期化されるようにする

次のようなクラスがあるとします

明らかに、FIELD_*最初に を参照したときにすべてが読み込まれますFoo。my が純粋に機能的ではないと仮定しEnv.getProperties(String)ます (つまり、異なる値を返す可能性があります。どのように? ここでは重要ではありません)

Fooすべてのクラス初期化コードが再実行されるように、クラスを強制的に「リロード」するにはどうすればよいですか(静的フィールドに異なる値を設定できるようにするためです)。

(さまざまな理由から、これらのフィールドを非静的または非最終的なものにすることはできません。そのため、さまざまな getter メソッドをオーバーライドして Foo をインターフェイスにするなどの解決策を提案しないでください)

ありがとう

0 投票する
1 に答える
1014 参照

java - 複数のクラスローダーで cglib BeanCopier を使用する

Java である Bean を別の Bean にコピーしたいと思います。classloading-juggler フレームワーク内にあり、両方のクラスが現在のクラスローダーとは異なる別のクラスローダーによってロードされるという問題。

最も効率的な方法で行う必要があるため、リフレクションベースではなく、バイトコード生成ソリューション (cglib BeanCopier など) を使用するのが最善の方法です。

問題は、この場合 cglib BeanCopier が機能しないことです。それを示す最も簡単なコードは次のとおりです。

それは例外を与えます:

私はそれを解決する方法を見つけています。私の場合、両方のクラスは同じですが、カスタム クラスローダーがロードされています。また、プロパティには java.* からの privimives とクラスのみが含まれます (したがって、これらは標準のクラスローダーによってロードされます)。

0 投票する
1 に答える
164 参照

java - アプリケーションをランタイム環境から分離するためのサンドボックス化またはウォール化されたクラスローダー

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

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

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

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

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

0 投票する
0 に答える
949 参照

java - Java Class Loader がクラスにインポートされたクラスをロードしない

次のように ClassLoader を使用してクラスをロードしようとしています

Example クラスが他のクラスをインポートする場合。そのクラスは JVM によって自動的にロードされますか?? クラスExampleにインポートされ、ロードできない別のクラスExample2があるというエラーNoClassDefFoundErrorがスローされているためです。

何が起こっているのか真剣にわかりません。

前もって感謝します

0 投票する
2 に答える
2184 参照

c# - Assembly.GetExecutingAssembly() を使用して、他のクラス ライブラリからアセンブリを取得します。

エンティティ フレームワークを使用して、クラス内のデータベース内のクラスをマップしますObjectContext

上記のコードはすべてのクラスを取得しますtypeof(EntityTypeConfiguration<>)。私の「EntityMap」クラスが私のオブジェクト コンテキストと同じクラス ライブラリにある場合は問題map classesありませんが、別のクラス ライブラリに書いた場合は機能しません。Map classesで識別できませんObjectContext

0 投票する
1 に答える
742 参照

java - ホット デプロイはクラスローディングとどのように関連していますか?

クラスローディングと についての良いプレゼンテーションを読んでいOSGIます。しかし、次のフレーズには誤解があります。

このプレゼンテーションのスライド 17 です。

スライドの画面:

ここに画像の説明を入力

これを明確にしてください。

0 投票する
2 に答える
2322 参照

java - jar の動的なロードとアンロード


foo.com/{game}/rules
foo.com/{game}/players
foo.com/{game}/matchesのような呼び出しを公開する Java ベースの (ジャージー + グリズリー) REST サーバーがあります 。


任意の数のゲームが存在する可能性があります
各ゲームには、ルール、プレイヤー、マッチの異なる実装が あります
歴史的な理由から、ゲームの実装ごとに個別の jar が必要です


したがって、REST サーバー
があり、foo.com/tennis/rules のような呼び出しがある場合
、REST サーバーに「tennis」jar を動的にロードさせる必要があります。瓶はその操作を行います。その後、jar をアンロードする必要があります
。次の呼び出しが foo.com/football/players に対するものであった場合、REST サーバーに「football」jar を動的にロードさせる必要があります。瓶はその操作を行います。次に、jar をアンロードする必要があります


これを行うテクニックはありますか?
どうやら [これ] に関して非常に古い質問があるようです: java: jar の動的なロードとアンロードを可能にするフレームワークはありますか (osgi は不可)?

0 投票する
1 に答える
1241 参照

scala - Scala オブジェクトを動的にロードする

データベースを操作するオブジェクト (クラスではない) がいくつかあります。小さなヘルパー クラスを作成して、メソッドjava my.helper.class my.database.classを実行できるようにしたいと考えています。run

たとえば、これはコンパイルされます

そして、私が期待することをします。

これもコンパイルします

しかし、これは起こります:

これは理にかなっており、これでうまくいくと思いました:

しかし、それも失敗します。これらすべての静的オブジェクトをクラスにできることはわかっていますが、このアプリケーションでは意味がないので、これを行うためのエレガントな方法を具体的に探しています。

0 投票する
1 に答える
3715 参照

java - 実行時に既存のクラスを、実行時に動的に生成およびコンパイルされた Java .classfile に置き換える必要がある

私の目的は、実行時に新しい属性 + getter setter メソッドをクラス定義に動的に注入することです。現在、新しく追加された属性を使用してコードを再生成し、生成されたコードをコンパイルする方法があります。

まず、コンパイル時に各クラスのテンプレートを用意します。プロジェクトを実行すると、テンプレート クラスがランタイムに読み込まれます。Javaコードを動的に生成してコンパイルするコードをいくつか書きました。以下のコードを使用して新しく作成したクラスをロードすると、注入されたメソッドにアクセスできません。既存のランタイム定義を上書きできないと思います。たくさんのブログを見てきましたが、それでも理由を理解できませんでした。助けてください。

DROOLS で新しく追加されたメソッドにアクセスしていますが、コンパイル中に問題が発生する可能性がある他のクラスでは参照されていません。新しい属性を持つルール エンジンのルールは実行時に更新されるため、それに応じてコードを調整する必要があります。以下は ClassLoader コードです。このコードは例外をスローしませんが、私の目的を解決できません。コーディングが正しいかどうかはわかりません。