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

jboss - OSGi バンドルから JBoss 7.1.1 に動的クラスをロード中に ClassNotFoundException が発生する

簡単な OSGi テストバンドルを JBoss 7.1.1 にデプロイし、次のようにして Jacorb ORB を動的にインスタンス化しようとしました。

私が得たのは

私がすでにしたこと:

  • モジュールがロードされるように、JBoss 構成standalone.xmlで osgi-subsystem に capability を追加しました。私のテストバンドルのインストールが失敗するという問題は、すでに解決されています。<capability name="org.jacorb" startlevel="1"/>org.jacorb
  • Dependencies-Descriptor onを宣言しorg.jacorbましたMANIFEST.MF(オプションの有無にかかわらず試しましたexport):Dependencies: org.jacorb export

  • 次の内容でjboss-deployment-structure.xmlを myに追加しましたMETA-INF

    <?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <module name="org.jacorb" /> </dependencies> </deployment> < /jboss-デプロイメント構造>

また、私は ClassLoader を使って実験を行い、ContextClassLoader がnull. Class.forName()しかし、最終的には、特定のクラスローダーを使用するように変更できないため、これを非テスト コードとして有効にすることはできません。

では、なぜこの ClassNotFoundException が発生するのでしょうか?

前もって感謝します

アレックス

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

android - アンドロイド。動的にロードされた jar からのリソースの使用

私の最後の希望:)

タクシー サービスのドライバー向けの Android アプリケーションを開発しています。この製品の存続期間中に多くの更新が発生する可能性があるため、アプリケーションの内部手段によってそれらを維持しようとしています. そこで、インターネット経由で jar を読み取るランチャーを作成し、DexClassLoader の助けを借りて、動的にロードされたコードを起動する必要がなくなりました。マニフェストを通じて登録された基本アクティビティを使用しますが、実際のコードを実行するために動的にロードされる一種のアダプターを使用します。

このような単純なアダプターは、アクティビティに正常にリンクされ、実行されます。しかし、setContentView() でレイアウトを動的に設定することにも失敗しました。すべての R ファイルを動的にロードされた jar ファイルに手動で配置しましたが、それらのリソースを使用する方法をまだ見つけていませんでした。

これを行う方法は本当にありませんか?いいえの場合、それは冗談だと思います: ほとんどすべてのコードを外部の場所から動的にロードして実行できますが、そのような場所からリソースを使用することはできません:(

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

java - OneJar と動的クラス ローディング

現在、アプリケーションでの OneJar の使用を調査していますが (さまざまな理由から)、アプリケーションは多数のカスタム を使用してURLClassloaderアプリケーション拡張機能をロードしています。

「OneJar」Jar としてバンドルされると、ClassNotFound例外が発生します。問題のクラスはバンドルされた Jar に存在し、親子関係を解決するためにクラスローダー メカニズムに依存しているだけです。

あれは。interfaceバンドルされた Jar (親のクラスローダー コンテキスト内にある必要があります) に格納されている共通があります。拡張機能はこれを実装しinterface(拡張機能を呼び出すことができるようにする)、親クラスローダーのリソース検出機能を使用する子クラスローダーの機能に依存します。

これを経験した人はいますか、それを解決する方法について何か光を当てていますか.

他の同様のメカニズムに興味があります(ライブラリのJarを単一のJarリソースにバンドルするため、すべてを解凍してJarを単一のファイルにする必要はありません)

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

java - java.lang.IllegalAccessError: 動的にロードされる子の内部クラスから親クラスのフィールドにアクセスしようとしています

子クラスを動的に使用してプログラムにデータをインポートできるように、既存のコードを変更しようとしています。しかし、私は問題に遭遇しました。動的にインポートしようとしているクラスの 1 つに、Java が IllegalAccessError をスローする原因となる抽象親クラス フィールドにアクセスする 2 つのサブクラスが含まれています。私が抱えている問題を実証するために、小さなテストプログラムを作成しました。

呼び出しコードは、URL クラス ローダーを作成し、クラスをロードしてから、do work メソッドを呼び出します。

Parent クラスには、3 つの int フィールドと抽象メソッドが含まれています。

子クラスは、do work が呼び出されると、内部クラスを作成し、親データ フィールドにアクセスしようとし、例外がスローされます。

public class ChildClass extends SuperClass {

エラーは、子クラスを jar としてエクスポートし、実行時に jar をロードするプログラムを実行した後にのみ発生します。

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

java - JAVAでの動的クラス読み込みのパフォーマンスコスト

カスタマイズされたバージョンのTomcatを使用してアプリケーションを開発します。テスト環境や開発環境でよく使用する動的クラス読み込みがサポートされており、本番環境でも使用した場合の影響が気になります。

私の知る限り、動的クラスローディングは、各アクセスでクラスローダーがクラスをポーリングするため、パフォーマンスの問題のために本番環境では使用されません。

ただし、このアプリケーションサーバーは、新しいクラスをロードするためのポーリング頻度の構成をサポートしています。

正しく理解していれば、動的クラスの読み込みをかなり長い時間(つまり、1時間)ごとにポーリングするように構成すれば、パフォーマンスへの悪影響をほとんど回避する必要があります。

本番環境では、このメカニズムは限られた数の方法で使用されます
。1)ユーザーのダウンタイムなしの緊急パッチ(最初のシャットダウン時に修正がリリースされます)
2)ソースがないクラスの永続的なパッチ(レガシーサードパーティ) libs)

これは信頼できるソリューションですか?

ありがとう

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

android - 動的アクティビティ登録

Android のアクティビティと AndroidManifest.xml に関する質問があります。私がJavaサーブレットを扱っていて、「モジュールベース」またはプラグインベースのサーバーに似たものを作成したかったときに、疑問が生じました。これは正常に動作しており、次のようなコード アプローチを使用して、必要なサーブレットを動的に読み込むことができます:動的にサーブレットを servletConfig に追加します。サーブレットは、サーバーの起動時に動的に検出され、マップされます。

ここでの問題は、適切なアクティビティを見つける方法、それらの新しいインスタンスを作成する方法、またはそれらを開始する方法ではなく、私が理解している部分です。パッケージを反復処理して、適切なアクティビティ クラスを見つけ、それらの新しいインスタンスを作成し、リストに追加できます。

私は、interfaceすべてのアクティビティが有効なアクティビティになるために実装する必要がある を使用しています。そうすれば、自分のアプリケーション用に新しいパーツ、エクステンション、または新しい機能を作成でき、すべてがうまく機能します。私のアプリケーションには、ユーザーがクリックできるボタンのリストがあり、ボタン リストは、ListView.

どこで次のようcontentに宣言されています

ListButtonAdapter拡張しBaseAdapterます。

問題ありません。問題は、AndroidManifest.xml ですべてのアクティビティを宣言する必要があることです。そのファイルは、表示可能なアクティビティの大きなリストのようなもので、ちょっと面倒なので、ここではコードを表示しません。

マニフェストに 1 つのアクティビティを追加する必要があることはわかっていますが、1 つのアクティビティで十分であることを望んでいました。私のアプローチは、多くの点でFront Controller パターンと見なすことができます。ここでは、各アクティビティが、必要なアクティビティの読み込みと表示を担当します。

マニフェストにアクティビティを動的に登録する(または別の方法で実行できるようにする)ことさえ可能かどうかを単に尋ねているだけです。そうでない場合、他の有効な解決策はありますか?

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

java - 動的ローディング抽象ファクトリ

抽象ファクトリパターンのバリエーションを作成しようとしています。
Factoryは、具体的なファクトリの新しい実装をプラグインのように挿入できるようにすることになっています。

例えば

問題に正しく取り組んでいるのか、デザインを再考する必要があるのか​​わかりません。

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

java - どの ClassLoader がクラスをロードするかを制御するにはどうすればよいですか?

目の前の状況は、タイトルが示すように単純ではありません。

JWS 経由で実行される Java 1.6_17。

私はクラスを持っており、MyClassそのインスタンスメンバー変数の1つは、クラスの初期化中に動的にいくつかの独自のクラスをロードしようとする誤ったサードパーティライブラリのタイプClass.forName(String)です。これらのケースの 1 つで、たまたま動的に呼び出されます: Class.forName("foo/Bar").このクラス名は、バイナリ名の JLS に従っていないため、最終的にjava.lang.NoClassDefFoundError: foo/Bar.

ClassLoaderサニタイズ メソッドを追加し、ClassLoader.findClass(String)このClassLoader.loadClass(String)問題を修正するカスタムがあります。

次のようなものを呼び出すことができます: myCustomClassLoader.findClass("foo/Bar")

その後、問題なくクラスをロードします。しかし、事前にクラスをロードしても、後で例外が発生します。これは、MyClass参照先Barの初期化中に、それらのClass.forName("foo/Bar")コードがどこかの静的ブロックで呼び出されるためです。使用しようとしていた ClassLoader が私のカスタム クラス ローダーである場合、これは実際には問題ありません。しかし、そうではありません。そんな衛生管理をしてcom.sun.jnlp.JNLPClassLoaderいないのが私の問題です。

Thread.currentThread().getContextClassLoader()カスタムクラスローダーに設定されていることを確認しました。しかし、これは (ご存知のように) 効果がありません。main()私が読んだいくつかのもののために、私が最初に行うこととしてそれを設定しましたが、それでもMyClass.class.getClassLoader()- JNLPClassLoader です。JNLPClassLoader ではなく、代わりに私のものを使用するように強制できれば、問題は解決しました。

クラスの初期化中に行われた静的な Class.forName("foo/Bar") 呼び出しを介して、どの ClassLoader を使用してクラスをロードするかを制御するにはどうすればよいですか? MyClass.class.getClassLoader()カスタム クラス ローダーを強制的に返却できれば、問題は解決すると思います。

誰かがアイデアを持っているなら、私は他のオプションを受け入れます。

TL;DR:Class.forName(String)によって参照されているサード パーティ ライブラリ内のすべての呼び出しを、MyClass自分の選択したクラスローダーを使用するように強制するのを手伝ってください。

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

java - 動的な外部クラスの読み込み

Javaでの動的クラスローディングの経験を積もうとしています。したがって、コメントやヘルプは大歓迎です。ユーザーがファイルを選択して、そのファイルに対していくつかのアクションを実行できるようにするプログラムがあります。アクションは「コマンド」であり、それらは私がロードしようとしているクラスです。

それが機能する方法は次のとおりです。ユーザーが.classファイルを目的のフォルダーに配置し、私のプログラムがフォルダー内のファイルをチェックし、.classファイルにクラスがある場合はそれをロードします。

私はそれをしましたが、私が望んでいたようではありませんでした。今のところ、それは私のプログラムでコンパイルされたクラスでのみ機能します。しかし、私が欲しいのは、クラスを含む任意の.classファイルをフォルダーに入れて、プログラムがそれをロードできることです。それは今のところ私のコードです:

ご覧のとおり、私は2つの方法を試しましたが、最初の方法は現在コメント中です。私がしていることは、フォルダ内のすべてのファイルをチェックし、それが.classファイルであるかどうかをチェックすることです。そうであれば、クラスがある場合はそれをロードしようとします。2つclassLoadersは「知っている」ファイルしかロードできないと思いますが、外部クラスをロードするにはどうすればよいでしょうか。