私はSwing
とJPA
を統合するためにライブラリを拡張しようとしています。JPA
を自動(携帯)として設定すると、プログラムでは<class>
の要素が追加されます。 (私はそれがHibernateのAnnotationConfiguration
またはEclipseLInkのServerSession
によって実行可能であることを知っていますが、移植性はあります)。私もSpring
をこの目的のためだけに使用しないでください。メモリ内オブジェクトを指すURLを作成することはできますか?
私はpersistence.xml
をオンザフライで作成し、指定したパッケージ(Reflectionsライブラリ経由)の<class>
要素で埋め込むことができます。この問題は、このpersistence.xml
をJPA
プロバイダーにフィードしようとすると開始されます。私が考えることができる唯一の方法は、URLClassLoader
を設定することですが、有効なURL
を取得するための唯一の能力のために、どこかでディスクにファイルを書き込ませない方法は考えられません。 URL
(localhost:xxxx
)経由でファイルを提供するためのソケットを設定しているようです...私は悪いのか分かりませんか?
この問題をどのように解決できるか考えている人はいますか? 1つのライブラリを使わないようにするのはたくさんの仕事のように聞こえるが、それができるかどうかを知りたいと思う。
EDIT(より明確なものでTRY):
は動的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()
)
);
URLResourceClassLoader
はオーバーライドすることで、リソースだけでなく、クラスを検索することができますURLCLassLoader
のサブクラスであり、 public Enumeration<URL> findResources(String name)
。
あなたが本当に "[メモリを意味しますかマップされた "](http://en.wikipedia.org/wiki/Memory-mapped_file)、または"メモリ内にのみ存在するオブジェクト? " –
メモリはプロセスごとにプライベートと見なされるので、可能かどうか疑問に思っています。 –
使用しているコードは何ですか?そしてなぜそれはURLでなければならないのですか?コードを表示すると、一般的な 'Resource'やそのようなものをうまく受け入れることができます。 – yair