2012-02-15 119 views
2

我正試圖在同一個glassfish 3域中的2個獨立實例上部署我的JPA應用程序。 兩個實例都將使用相同的JNDI名稱查找數據源,但我希望它們能夠找到不同的數據源。 我試圖定義2個數據源並將它們綁定到不同的目標,但是即使DAS綁定到不同的目標,DAS也不允許使用相同的JNDI名稱的2個數據源。如何在glassfish 3上部署期間覆蓋JPA數據源JNDI名稱?

我試圖使用屬性替換,但沒有奏效。 有誰知道如何解決這個問題?似乎不可能在同一個域中兩次部署應用程序。

回答

1

JNDI名稱是特定對象的地址,它們必須是唯一的。擁有兩個JNDI名字就像當你的手機中有兩個數字代表「alex」。沒有辦法知道你在撥號。

我會做什麼,哪些應該適用於任何JPA實現,就是在您的persistent.xml中有兩個PU,一個使用JNDI數據源,另一個使用另一個JNDI數據源。這也是有道理的,因爲您可能在兩個數據源上都沒有相同的業務對象。

然後,當你得到你EntityManager時,明確指定你想要的PU。您可以將其設置爲配置文件或以其他方式動態確定。

entfactory = OpenJPAPersistence.createEntityManagerFactory(*persistentUnitName*, (String) null); 

希望這有助於 -

-Alex