12

Swing統合のためにライブラリを拡張JPAし、構成JPAを可能な限り自動化 (および移植可能) することで拡張しようとしています。これは、プログラムで<class>要素を追加することを意味します。AnnotationConfiguration(HibernateまたはEclipseLinkを介して実行できることはわかっていますがServerSession、移植性があります)。Springまた、この単一の目的のためだけに使用することも避けたいと思います。

その場でを作成し、指定したパッケージの要素を (Reflections ライブラリ経由で)persistence.xml埋めることができます。これをプロバイダー<class>にフィードしようとすると、問題が発生します。私が考えることができる唯一の方法は を設定することですが、有効な. ( )経由でファイルを提供するためのソケットを設定するようです...わかりません、悪ですか?persistence.xmlJPAURLClassLoaderURLURLlocalhost:xxxx

この問題を解決する方法を知っている人はいますか? 1 つのライブラリを使用しないようにするのは大変な作業のように思えますが、それが可能かどうかを知りたいだけです。

編集(より明確にするための試み):

動的に生成されたものはオブジェクトXMLに保持されStringます。永続化プロバイダで利用できるようにする方法がわかりません。また、ファイルをディスクに書き込まないようにしたい。

私の問題の目的のために、永続化プロバイダーは、クラスパスをスキャンしてMETA-INF/persistence.xml. 一部の実装では、 の動的な作成を受け入れるように作成できますがXML、共通のインターフェイスはありません (特に、ファイルの重要な部分である<class>タグ)。

私の考えは、カスタムを設定するClassLoaderことです-他に何かあれば、私は感謝します.私はこれに設定していません.

私が見つけた唯一の簡単に拡張/構成可能なものはURLClassLoader. それはURLオブジェクトで機能しますが、最初に実際に XML をディスクに書き込まずにオブジェクトを作成できるかどうかはわかりません。

それが私が物事を設定する方法ですが、persistenceXmlFile = new File("META-INF/persistence.xml")ディスクに書き込むことで機能しています:

Thread.currentThread().setContextClassLoader(
    new URLResourceClassLoader(
        new URL[] { persistenceXmlFile.toURI().toURL() },
        Thread.currentThread().getContextClassLoader()
    )
);

URLResourceClassLoaderisURLCLassLoaderのサブクラスであり、 をオーバーライドすることで、クラスだけでなくリソースも検索できますpublic Enumeration<URL> findResources(String name)

4

2 に答える 2