我不太清楚你在這裏後什麼,所以謹慎的一個詞是聽起來就像你試圖做一些事情一丁點兒的瘋狂(JPA的沒有按在運行時不喜歡動態)。
但是,有幾個選擇:我聽到的是你想改變連接到數據庫。首先,您的持久性XML只是一個起點,您不必包含數據源。這不是最好的做法,因爲DataSource和datasourse-ds.xml的想法是確保您可以配置應用程序而無需重新編譯代碼(以及多個部署等)。如果您接管管理連接的工作,則可以使用實體管理器。
我只是想澄清這可能是一個壞主意(你在談論一個ORM框架--JPA Hibernate在這種情況下),而不是使用@PersistenceContext,你可以提供你自己的實體管理器。我強烈建議考慮使用EclipseLink作爲解決方法。它不像JBoss那樣嵌入,你可以(一旦運行)從頭開始配置它。
http://wiki.eclipse.org/EclipseLink
一旦你擁有了它運行,就可以積極地創建和銷燬的實體管理器,或者您從一個連接的屬性創建大量的實體管理器。
這裏的長短:我想你會走上一條非常糟糕的道路,你可能想重新考慮設計。 JPA可能是錯誤的工具,儘管我討厭這麼說,但如果您經常更改連接,那麼您最好使用javax.sql比使用JPA數據源更好。
總之,使用Eclipselink2.X你可以不喜歡下面 - >
HashMap<String, Object> connectionA new = HashMap<String, Object>();
propsA.put("javax.persistence.jdbc.driver", "driverClass");
propsA.put("javax.persistence.jdbc.url", "connectionString");
. . .
etc...
EntityManager entityManager = Persistence.createEntityManagerFactory("myUnit").
createEntityManager(propsA);
此時您可以創建一組新的屬性(有一個新的連接支持它)每次需要經理。
噩夢?是。容器管理?不 - 你會負責處理交易,但是它應該工作嗎?絕對。
+1最後的評論。這很容易成爲一場噩夢。請注意,Hibernate通常支持類似的東西,但Daniel在配置中確實沒有提及它,因爲它隨JBoss AS提供。 –