この質問はすでに聞かれていることは知っていますが、趣向が異なるので、POV からもう一度質問します。
私たちのアプリケーションサーバーには、いくつかのEJBが存在します(つまり、知る限り、EJB呼び出しごとに1つずつ、いくつかのスレッドがあります)。一部の EJB は、適切に機能するために DocumentBuilder ファクトリが xerces インスタンスを生成する必要があり、一部の EJB は crimson インスタンスを必要とします。
現在、xerces をデフォルトとして強制する選択が行われたため、xerces クラスはグローバルな適切な System.property に注入されました。
私が見る限り、DocumentBuilder クラスは最初に System.property を探し、次にプロパティ ファイルを JRE フォルダに探し、次に再びプロパティ ファイルを JAR/Services に探します。
真紅が必要なライブラリを分離するために、カスタムクラスローダーを作成したため、それらのjarはクラスパスに含まれず、「スイート」の他の部分が健全で干渉から安全であることを確認できます.
しかし、これらの jar を分離したとしても、前述のように実装を探す DocumentBuilder を利用します。ライブラリの呼び出しに必要な厳密な時間のために System.property を変更すると、他の EJB が正しく実装されないため、クラッシュする危険があります。
呼び出し元のスレッドに基づいて newInstance の結果を切り替える偽の DocumentBuilder クラスも作成しようとしましたが、これは機能しませんでした (残念なことに、呼び出されたライブラリは、元の例外をキャッチし、元のメッセージのみを取得して新しい例外をスローすることで例外をマスクします。ポイントを得るには不十分です)
プロパティの変更をスレッド レベルで分離する方法を探していますが、わかりません。
何かご意見は?ありがとうございました!