問題タブ [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.
java - どのクラスローダーが使用されていますか?
クラスローダーに関していくつか質問があります。
と
それぞれの場合にどのクラスローダーが使用されますか?最初のケースでは、メソッドコードが実行されているクラスをロードするために使用されたクラスローダーを想定しています。そして2番目のケースでは、スレッドコンテキストクラスローダーを想定しています。
私が間違っている場合は、簡単な説明をいただければ幸いです。
java - jarからクラスをロードしないようにする方法
私はいくつかのアプリケーション用のプラグインを書いています。libA-1.0のアプリケーションhavaライブラリの依存関係と私のプラグインがlibA-2.0の同様の依存関係を持っていると仮定しましょう。バージョンが異なり、相互に互換性がありません(つまり、APIメソッドのシグネチャが異なります)。
プラグインがlibA-1.0からクラスをロードしないようにする方法(またはlibA.2.0からのクラスを使用するようにプラグインを強制する方法)?
カスタムクラスローダーを記述せず、forName、loadClassDefinition呼び出しを使用せずにこれを行う方法はありますか?
一部のライブラリを*.warアーカイブに配置し、Webコンテナがクラスパスに「同じ」ライブラリを持っているためにそれらがロードされない場合にも、同様の問題が発生します。
助けてくれてありがとう。
よろしく、Paweł
java - tomcat でクラス ファイルをリロードする
実行時にクラスファイルを作成しています。
クラスローダーで既存のクラスファイルを更新したものに置き換えたいです。
これは、サーバーの再起動と再デプロイを回避するホット スワップ (JRebel など) に似ています。
コンテキストをリロードするための tomcat の context.xml アプローチを見つけました。ただし、本番環境の場合はあまり役に立ちません。
実行時に ClassLoader にクラスを登録できますか? 実行時にクラスをリロードする代替手段があるかどうかを提案してください。
次のコードを使用して、現在の classLoader を取得しています。
以下はロードクラスメソッドの実装です。
クラスをリロードするには、次のコードを使用しています。
クラスローダーの私の reload メソッドは
LoggingAspect の新しいインスタンスを作成するとリロードした後も、古いインスタンスが表示されます。提案してください。
それでも私は古いインスタンスを取得しています。
classloader が変更されたクラスをロードしない理由を教えてください。
java - Thread.currentThread().getContextClassLoader().getResourceAsStream() について
コード例を見ていますが、これが何を意味するのかわかりません。
プロパティ ファイルを読み取ろうとしているようですが、MyProperty.properties の場所がわかりません。
助けてくれてありがとう、ありがとう。
java - この場合、どのクラスローダが使用されますか?
次の問題があります。
AHashMap
はプロパティの設定に使用され、キーは aClassLoader
です。
プロパティを設定するコードは次のとおりです ( AxisProperties
)。
これらの値の 1 つがどこかにキャッシュされており、このハッシュマップをリセットする必要がありますが、問題は、これを行う方法がわからないことです。私はクラスをロードすることを考えました( a を使用する
ように委譲します)が、コードが次のことを行うことがわかります: axis
URLClassLoader
getThreadContextClassLoader();
したがって、使用するクラスをロードするために使用したもの(つまり)ではなく、現在のスレッドのクラスローダーを使用すると思いますaxis
。
これを回避する方法はありますか?
注:アプリケーションの一部として既にロードさaxis
れています。したがって、別のクラスローダーを介してリロードするという考えになります
clojure - Clojure がデフォルトで Context Classloader を使用するのはなぜですか?
デフォルトでuse-context-classloaderが true に設定されているのはなぜですか?
Clojure が現在のクラスローダーを使用しないのはなぜですか?
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 の読み取り:
例外は次のとおりです。
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 クラスローダーをアップしてオーバーライドします。
どんな助けでも本当に感謝しています。ありがとうございます