問題タブ [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 投票する
2 に答える
4760 参照

java - Thread.getContextClassLoader() == null?

Thread.getContextClassLoader()null にすることはできますか? javadoc はあまり明確ではありません。
図書館はこのケースを考慮に入れる必要がありますか?

更新:私が尋ねた理由は、この場合は機能しないbeansbinding.dev.java.netためです(そして私のコードは機能しますsetContextClassLoader(null)

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

java - この Java コンテキスト クラスローダーの問題を安全に解決するにはどうすればよいですか?

何百人ものユーザーのうち、Java デスクトップ アプリの起動に問題があるのは 1 人だけです。彼にとっては、約3分の1の時間しか始まりません。他の 3 分の 2 の時間は、起動時に NullPointerException がスローされます。

スタックトレースをたどったところ、原因が次のとおりであることがわかりました

JEdi​​torPane では null が返されます。

グーグル検索によると、これは散発的で、非常にまれで、少数の人々に影響を与える不可解な問題であることが明らかになりました。

私の質問は、回避策として何ができますか? EditorPane を作成する前に呼び出すと、これが機能する可能性があります。

しかし、私はクラスローダーを自分が望むほどよく理解していません (そして、それらをよりよく理解しようとしました)。EDT で contextClassLoader を変更すると、悪影響が生じる可能性があると思います。

私にできることはありますか?

編集: Java ClassLoaders をよく理解している人と連絡がありました。これはあいまいな ClassLoader 競合状態のようです。つまり、Java のバグです。

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

java - メソッドが文字通り呼び出されたときにJavaがスレッドコンテキストクラスローダーを使用できないのはなぜですか?

次のテストケースは緑色なので、それ自体は問題なく動作するカスタムクラスローダー「JarClassLoader」を作成しました。

ただし、次のテスト ケースは機能しません。

凝視された行に注目してください。文字通りメソッドを呼び出すときに、スレッド コンテキスト クラスローダーを使用したかったのです。

私は何十もの Web ページやドキュメントを読みましたが、太字の行が機能するかどうかを確実に教えてくれるものはありません。どこが間違っていたのか理解できません。

文字通り呼び出されたメソッドは、クラスローダーを使用して対応するクラスをロードできますか? そうでない場合、なぜできないのですか?ベンダーが提供するjarでの呼び出しは文字通り、リフレクションなどを使用していないため、機能する必要があり、ベンダーjarでの名前の衝突を避けるために、異なるスレッドに異なるクラスローダーを割り当てる必要があります。

誰でも私を助けることができますか?どうもありがとう!

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

java - クレイジーClassLoaderの質問

クラス:

問題は、なんらかの奇妙な理由で、子のInterClassLoaderを使用してインターフェースをロードし、のClassLoaderを使用して実装クラスをロードする必要があることです。Impl

この場合NoClassDefError、実装をロードしようとしている親のClassLoaderは、子のClassLoaderにロードされImplたインターフェイスを認識していないため、を取得します。Inter

子ClassLoader(コンテキストClassLoader)を使用して実装をロードする方法はありますか?または、(委任ルールを破ることによって)両方をロードするためにカスタムClassLoaderを作成する必要があるかもしれませんか?

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

java - カスタムTomcatWebappClassLoader

Tomcat用のカスタムクラスローダーを実装しようとしています。私の最初の試みはクラスキャスト例外をもたらしました(どうやら、tomcatは私のローダーをorg.apache.catalina.loader.WebappLoaderにキャストしようとします)。了解しました。WebappLoaderを拡張し、catalina.jarをビルドパスに追加しました。

これで、展開する準備ができました(私は思います)。このエラーが発生します:

重大:Catalina.start:LifecycleException:開始:: java.lang.NoClassDefFoundError:org / apache / catalina / loader / WebappLoader

Tomcatには実行用のcatalina.jarが付属しているので、99.9%はすでにtomcatにロードされていると確信しています。これを確認するために、apacheWebappLoaderが含まれている/server/lib/catalina.jarを確認しました。さらに、で別のcatalina.jarを手動でリンクすると、予想どおり、問題が全体的に混乱します。

よくわかりません。どんなヒントも熱くなるでしょう。

ありがとう!

更新:興味深いことに、tomcat6(WebappLoaderの拡張、tomcat5.5で動作)でも同じことが発生し、ClassCastExceptionが発生します。キャストを実行するクラスが、クラスをロードしたローダーとは異なるローダーを使用してロードされたように聞こえます。どこかに別の不足しているTomcat構成がない限り、とにかくそれをどのように制御できるかわかりません。tomcat6のアイデアもありますか?

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

java - クラスローダー固有のプロパティ

コンテナ内で実行される独立したアプリケーションごとに新しいクラスローダーを作成するアプリケーション コンテナを開発しました。特定のアプリケーションが呼び出されると、スレッドのコンテキスト クラスローダーがアプリケーションのクラスローダーで適切に設定されます。

ThreadLocal の使用を回避すると、クラスローダー内にプロパティを格納できますか?この場合、アプリケーション固有のプロパティをクラスローダーから直接取得できます。

たとえば、コンテキストクラスローダーにアクセスするときに、何らかの方法でプロパティを保存してから後で取得できるようにしたいと考えています。

これは可能ですか?それとも、ThreadLocal が唯一の実行可能なオプションですか?

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

jakarta-ee - Tomcat コンテナーを使用した Geronimo でのカスタム注釈スキャン

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

java - contexClassLoader が必要な理由

Java がスレッドに contexClassLoader を導入した理由が不思議です。クラスを動的に見つけてロードする必要があるフレームワークとアプリケーションサーバーで通常使用されることを私は知っています。

ただし、必要なクラスローダーを保持するフィールドを追加するだけで同じ機能を実現できるのに、Java が contexClassLoader を導入した理由がわかりません。

0 投票する
5 に答える
75517 参照

java - クラスローダーからクラスパスを取得するにはどうすればよいですか?

'-classpath'コマンドライン引数を指定してもjava.class.pathを設定せず、代わりにクラスローダーを作成し、コマンドラインで指定されたクラスパス上のアイテムのすべてのURLをクラスローダーに追加するサードパーティのコードを使用しています、次にそれをコンテキストクラスローダーに設定します。私が書いたこのコードのプラグインクラスで、このクラスローダーのインスタンスを取得し、JavaCompiler.getTask(...の呼び出しで使用できるように、基になるクラスパスを取得するためにそれを使用する必要があります。 )そして他のコードをその場でコンパイルします。ただし、ClassLoaderからClassPathを取得する方法はないようです。また、java.class.pathが設定されていないため、アプリケーションが最初に呼び出された基になるクラスパスにアクセスできないようです...何かアイデアはありますか?

0 投票する
3 に答える
227 参照

java - 実行中の JVM が複数のクラスローダーを使用しているかどうかを検出するにはどうすればよいですか?

私の質問は自明だと思います。使用している JVM が複数のクラス ローダーを使用していることを確認する最も迅速で正確な方法は何ですか? その場合、プログラムが正しく実行されるようにするには、どのような注意を払う必要がありますか?

編集:2つのクラスローダーが同じクラスをロードできるという事実について、明確にする必要があると思いますか?単一のインスタンスのみが必要なシングルトンのようなクラスの場合、どうすればそれを防ぐことができますか?