我試圖通過將JPA
配置爲自動(和便攜式)配置來集成Swing
和JPA
以擴展我的庫,並且這意味着以編程方式添加<class>
元素。 (我知道它可以通過Hibernate的AnnotationConfiguration
或EclipseLInk的ServerSession
完成,但可移植性)。我也想避免僅僅爲了這個目的而使用Spring
。是否可以創建指向內存中對象的URL?
我可以隨時創建persistence.xml
,並使用指定包中的<class>
元素(通過反射庫)填充它。當我嘗試將此persistence.xml
提供給JPA
供應商時,問題就開始了。我能想到的唯一方法是設置一個URLClassLoader
,但我想不出什麼方法不能讓我先將文件寫入磁盤,因爲唯一的能力是獲得有效的URL
。設置一個通過URL
(localhost:xxxx
)提供文件的套接字似乎......我不知道,邪惡?
有沒有人有一個想法,我可以如何解決這個問題?我知道這聽起來像避免使用一個庫很多工作,但我只想知道它是否可以完成。
EDIT(在是更清楚一試):
動態生成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