問題タブ [classloader]
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.
eclipse - Equinox osgi コンテナに javax.swing.* クラスをロードするのは誰ですか?
分点コードとドキュメントを読みました。現在、java.*パッケージのクラスロードのみが親クラスローダーに委任されていることを理解するようになりました(ちなみにnullのように見えるorg.osgi.bootdelegationプロパティを変更していないことを前提としています)。次に、誰が javax.swing.* クラスをロードしているのか。インポートされたパッケージ/必要なバンドルのどこにも言及していませんが、それでも問題なくロードされます。誰が「正式に」それをロードする責任があるのか 知りたかったのですか?よろしくお願いします。
caching - クラスローダー/EJB間のシングルトン:複数のクラスローダー/ EJBが原因でJCSキャッシュの複数のインスタンスを回避するにはどうすればよいですか?
JCS(Java Cache System)を使用して、重複検索を回避するために複数のEJB(クラスローダー)で共有する必要があるLDAPクエリをキャッシュしたいと思います。JCSキャッシュのインスタンスを1つだけ作成するシングルトンラッパーを作成しましたが、各EJBには独自のクラスローダーがあるため、JCSキャッシュの複数のインスタンスが作成されるため、LDAP検索結果は再利用されません。
複数のEJB/クラスローダーで共有できる真のシングルトンを作成する方法はありますか?私の友人の1人が、私のシングルトンにEJBラッパーを作成することを提案しました。それは正しいアプローチですか?EJBなしで実装できませんか?「AbsoluteSingleton」の実装方法についての記事を見ましたが、解決策を試してもうまくいきませんでした。「絶対シングルトン。実際にはそうではありません。」を参照してください。
java - ClassLoader が間違ったファイルをロードしている
このコード スニペットを使用して、ファイルを入力ストリームとして取得します。ファイル version.txt は、アプリの jar の一番上のフォルダーにパッケージ化されています。
これはほとんど常に機能します。しかし、あるユーザーの場合、別の version.txt を取得していますが、それは私の jar にはありません。これにより、jar にある特定の version.txt ファイルが確実に読み込まれるようにするにはどうすればよいですか?
caching - 複数の EJB 間で Java Caching System (JCS) リソースを共有する方法
複数の EJB で共有する必要がある LDAP 検索結果を格納するために JCS を使用しています。JCS を 1 回だけ初期化するシングルトン クラスを作成しましたが、EJB のクラスローダーが原因で、独自のコピーで複数回初期化されています。そのため、検索リソースは共有されません。
複数の Bean 間でキャッシュを共有する必要がある問題をどのように解決していますか? JVM 内でキャッシュを探しています。(memcached などのリモートではありません)。
Glassfish は、アプリケーション サーバーとして使用されます。
eclipse - equinoxでバンドルのクラスローダーを取得するにはどうすればよいですか?
私はこれについて多くの分点コードを読みましたが、それでも日食の分点設定でosgiバンドルのクラスローダーを取得するためのハッキーでない方法を理解することはできません。ありますか?
java - Java Enums: 2 つの列挙型があり、それぞれに相互参照が含まれていますか?
互いに参照する 2 つの列挙型を持つことによって引き起こされるクラスの読み込みの問題を回避する方法はありますか?
次のように定義された Foo と Bar の 2 つの列挙セットがあります。
上記のコードは、次の出力を生成します。
なぜそれが起こるのか理解しています - JVM は Foo のクラスローディングを開始します。Foo.A のコンストラクターで Bar.Alpha を認識し、Bar のクラスローディングを開始します。Bar.Alpha のコンストラクターへの呼び出しで Foo.A 参照が確認されますが、(まだ Foo.A のコンストラクターにいるため) Foo.A はこの時点で null であるため、Bar.Alpha のコンストラクターには null が渡されます。2 つの for ループを逆にすると (または、Foo の前に Bar を参照すると)、Bar の値はすべて正しくなるように出力が変更されますが、Foo の値は正しくありません。
これを回避する方法はありますか?静的マップと 3 番目のクラスで静的マップを作成できることはわかっていますが、それはかなりハックな気がします。外部マップを参照する Foo.getBar() および Bar.getFoo() メソッドを作成することもできるので、インターフェイス (パブリック フィールドの代わりにインスペクターを使用している実際のクラス) も変更されませんが、それでも感じられます。私にはちょっと不潔です。
(実際のシステムでこれを行っている理由: Foo と Bar は、2 つのアプリが相互に送信するメッセージのタイプを表します。Foo.b フィールドと Bar.f フィールドは、特定のメッセージに対して予想される応答タイプを表します。サンプル コードでは、app_1 が Foo.A を受信すると、Bar.Alpha で応答する必要があり、その逆も同様です)。
前もって感謝します!
java - Java Classloader - 異なるバージョンの jar を参照する方法
これはよくある問題です。私は 2 つのライブラリA.jarとB.jarを使用していますが、これらは同じ jar の異なるバージョンに依存しています。実行時にTHIS.xxxjar
が必要だとしましょう
特定の jar (A.jar/B.jar) をその依存関係に対してコンパイルできますが、実行時に 1 つのバージョンのみをロードする必要があります。どれ?
依存関係 (最新バージョン) を 1 つだけ読み込むということは、ライブラリに下位互換性がない場合 (下位互換性のあるライブラリはありますか?)、私のコードはおそらく実行時例外をスローすることを意味します。
とにかく、OSGi のようなものがこの問題を解決できることを知っています。
この種の問題を解決する古い方法は何だろうと思っています...
どうもありがとう
jpa - JPA アプリケーションでは、誰が誰を確認する必要がありますか?
JPA を使用したコードがあり、開発環境と単体テストですべて正常に動作します。しかし、私のモジュールを OSGi ターゲット環境にデプロイすると、最も奇妙なクラスのロードの問題に定期的に遭遇します。私は OSGi が本当に好きですが、これを完全に修正できない場合は、ひどく狂ってしまいます。そして、どのクラスが他のどのクラスから見える必要があるかを理解していない限り、OSGi を適切にセットアップすることはできません。
したがって、私が見る限り、実行中のコードの一部から見える場合と見えない場合がある次の項目があります。それらを「サブジェクト」と呼びましょう。
- JPA アノテーション付きエンティティークラス
- a
persistence.xml
- の持続性 API
javax.persistence
- 永続化プロバイダ クラス
そして、私のコードには次のような状況があります:
- とを作成
EntityManagerFactory
するEntityManager
- 新しいエンティティ オブジェクトをインスタンス化する
- これらのオブジェクトを に渡し
EntityManager
て、永続化コンテキストに入れます - それらを使用し続け、時々 EntityManager に変更を保存するように依頼します
- エンティティ オブジェクトをデータベースに保存したり、明示的に EntityManager のメソッドを呼び出したりせずにインスタンス化、使用、および破棄する
- エンティティ オブジェクトをインスタンス化する代わりに、EM にデータベースからそれらをロードするように依頼します。これにより、インスタンス化が見えない場所で発生します。
- これらのインスタンスの使用、変更、保存、破棄
では、上記のどの状況で、どの被写体を表示する必要があるのでしょうか?
おそらくそれは明らかだと思います
- 持続性プロバイダーとエンティティークラスは、javax.persistence を認識している必要があります
- EntityManager を作成するコードは、javax.persistence を参照する必要があります (そして、永続化プロバイダーを推測しますが、それは私自身のコードのいずれにも直接表示されません)。
java - プログラムがjarから実行されるときの動的ローディングの問題
特定のインターフェースに準拠するJavaクラスを介して拡張可能なアプリケーションがあります。コマンドラインクラスからプログラムを実行すると、次のコマンドを使用してアドオンクラスをインスタンス化できます。
ただし、アプリケーションをjarファイルに保存すると(メインクラスを正しく設定すると)、クラスが見つからないという例外が発生します。誰かがここで何が起こっているのかを明らかにすることができますか?
TIA、アダム
java - java: jar の動的なロードとアンロードを可能にするフレームワークはありますか (osgi は不可)?
jar を動的にロードおよびアンロードしたり、jar でアクティベーター クラスを呼び出したりできるメカニズムが必要です。面倒なインポート/エクスポート メカニズムがあるため、OSGi を使用したくありません。