問題タブ [contextclassloader]

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 に答える
1853 参照

java - どのクラスローダーが使用されていますか?

クラスローダーに関していくつか質問があります。

それぞれの場合にどのクラスローダーが使用されますか?最初のケースでは、メソッドコードが実行されているクラスをロードするために使用されたクラスローダーを想定しています。そして2番目のケースでは、スレッドコンテキストクラスローダーを想定しています。

私が間違っている場合は、簡単な説明をいただければ幸いです。

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

java - jarからクラスをロードしないようにする方法

私はいくつかのアプリケーション用のプラグインを書いています。libA-1.0のアプリケーションhavaライブラリの依存関係と私のプラグインがlibA-2.0の同様の依存関係を持っていると仮定しましょう。バージョンが異なり、相互に互換性がありません(つまり、APIメソッドのシグネチャが異なります)。

プラグインがlibA-1.0からクラスをロードしないようにする方法(またはlibA.2.0からのクラスを使用するようにプラグインを強制する方法)?

カスタムクラスローダーを記述せず、forName、loadClassDefinition呼び出しを使用せずにこれを行う方法はありますか?

一部のライブラリを*.warアーカイブに配置し、Webコンテナがクラスパスに「同じ」ライブラリを持っているためにそれらがロードされない場合にも、同様の問題が発生します。

助けてくれてありがとう。

よろしく、Paweł

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

java - tomcat でクラス ファイルをリロードする

実行時にクラスファイルを作成しています。

クラスローダーで既存のクラスファイルを更新したものに置き換えたいです。

これは、サーバーの再起動と再デプロイを回避するホット スワップ (JRebel など) に似ています。

コンテキストをリロードするための tomcat の context.xml アプローチを見つけました。ただし、本番環境の場合はあまり役に立ちません。

実行時に ClassLoader にクラスを登録できますか? 実行時にクラスをリロードする代替手段があるかどうかを提案してください。


次のコードを使用して、現在の classLoader を取得しています。

以下はロードクラスメソッドの実装です。

クラスをリロードするには、次のコードを使用しています。

クラスローダーの私の reload メソッドは

LoggingAspect の新しいインスタンスを作成するとリロードした後も、古いインスタンスが表示されます。提案してください。

それでも私は古いインスタンスを取得しています。

classloader が変更されたクラスをロードしない理由を教えてください。

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

java - Thread.currentThread().getContextClassLoader().getResourceAsStream() について

コード例を見ていますが、これが何を意味するのかわかりません。

プロパティ ファイルを読み取ろうとしているようですが、MyProperty.properties の場所がわかりません。

助けてくれてありがとう、ありがとう。

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

java - この場合、どのクラスローダが使用されますか?

次の問題があります。
AHashMapはプロパティの設定に使用され、キーは aClassLoaderです。
プロパティを設定するコードは次のとおりです ( AxisProperties)。

これらの値の 1 つがどこかにキャッシュされており、このハッシュマップをリセットする必要がありますが、問題は、これを行う方法がわからないことです。私はクラスをロードすることを考えました( a を使用する
ように委譲します)が、コードが次のことを行うことがわかります: axisURLClassLoadergetThreadContextClassLoader();

したがって、使用するクラスをロードするために使用したもの(つまり)ではなく、現在のスレッドのクラスローダーを使用すると思いますaxis
これを回避する方法はありますか?

注:アプリケーションの一部として既にロードさaxisれています。したがって、別のクラスローダーを介してリロードするという考えになります

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

clojure - Clojure がデフォルトで Context Classloader を使用するのはなぜですか?

デフォルトでuse-context-classloaderが true に設定されているのはなぜですか?

Clojure が現在のクラスローダーを使用しないのはなぜですか?

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

eclipse - Eclipse OSGi コンテナー内で Spring を使用してクラスをロードしても、うまくいかないようです。修理?

私は、Eclipse OSGi コンテナ (これを実行しようとしている TIBCO ActiveMatrix ランタイムの基礎です) 内での Spring のクラスローディング動作について少し困惑しており、これを以下の簡単な例にまとめました。

その中で (TestComponent オブジェクトは OSGi バンドルの Activator クラス内で作成され、呼び出されますが、ここでは重要ではないと思います) まずオブジェクトを直接作成し、そのクラスが存在し、インスタンス化できることを再確認します。 . もちろん、これは期待どおりに機能します... 次に、Spring を使用してまったく同じクラスの 2 番目のオブジェクトを作成したい (最初に意図したとおり) が、これは ClassNotFoundException で失敗します。

Spring は、(パッケージとクラス名が確実に一致していても) そのクラスを見つけることができないと主張しているため、.setClassLoader(...) 呼び出しを追加して、まったく同じクラスを正常にロードした同じクラスローダーを渡しました。 、しかしSpringはまだそのクラスを見つけることができません。それがなぜそうなのかの手がかりはありますか?私はアイデアを使い果たしました。私は何が欠けていますか?

後で編集: クラッシュするのは ...getBean(...) メソッド呼び出しではなく、既に ClassPathXmlApplicationContext() コンストラクターであることを認識しなければなりませんでした。つまり、オブジェクトはそのコンストラクターで既に作成されており、その後の getBean(...) メソッド呼び出しだけではありません。したがって、クラスローダーを渡そうとする私の試みは、すでに遅れているため無駄です。したがって、問題は次のとおりです。コンテキストのクラスローダーをそのコンストラクター (またはファクトリー、または Spring が ClassPathXmlApplicationContext オブジェクトを作成するために内部で使用するもの) に渡すにはどうすればよいですか?

私の例:

最初に、Spring 経由で作成されるクラスのインターフェースを定義しました。

...そして、このインターフェースを実装するクラス:

私のテストプログラムの読み取り

使用されている /META-INF/package1_beans.xml の読み取り:

例外は次のとおりです。

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

java - サード パーティのクラス ローダーをオーバーライドする

Drools 5.6.0.Final of knowledge-api drools コードを使用しています。この CompositeClassLoader http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.drools/knowledge-api/5.6.0.Final/org/drools/util/CompositeClassLoader を使用しています。 java#CompositeClassLoader

これはhttp://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.drools/knowledge-api/5.6.0.Final/org/drools/utilによって呼び出されると思います/ClassLoaderUtil.java?av=f

CompositeClassLoader.java には、CachingLoader (HashMap put メソッド) のマルチスレッド環境に関するバグがあります。

drools コード自体にパッチを適用することを避け、独自のカスタム ローダーでラップしようとしています。

誰でも方法を教えてもらえますか?

これらのhttp://www.javablogging.com/java-classloader-2-write-your-own-classloader/を読みまし たが、アプリケーションの起動時に作成しようとしているコードがどのように呼び出されるかはまだわかりませんdrools クラスローダーをアップしてオーバーライドします。

どんな助けでも本当に感謝しています。ありがとうございます