jpa 下配置多個數據源 ,可以依據jpa的規範,在persistence.xml 裏面配置多個<persistence-unit>,
當然,persistence-unit的名字不能重複:
<persistence-unit name="TODS" transaction-type="JTA">
<provider>
org.apache.openjpa.persistence.PersistenceProviderImpl
</provider>
<jta-data-source>jdbc/TODS</jta-data-source>
<class>com.ibm.its.itmc.entity.Zone</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="openjpa.jdbc.Schema" value="TODS" />
<property name="openjpa.jdbc.DBDictionary" value="db2" />
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/>
</properties>
</persistence-unit>
<persistence-unit name="TADS" transaction-type="JTA">
<provider>
org.apache.openjpa.persistence.PersistenceProviderImpl
</provider>
<jta-data-source>jdbc/testVD</jta-data-source>
<class>com.ibm.its.itmc.entity.TadsZone</class>
<class>com.ibm.its.itmc.entity.TadsRoad</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="openjpa.jdbc.Schema" value="db2admin" />
<property name="openjpa.jdbc.DBDictionary" value="db2" />
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/>
</properties>
</persistence-unit>
當然也可以配置更多的數據源,我這裏只配了兩個。
在調用的時候,只要指定不同的unit-name給jpa的EntityManager就可以了:
@PersistenceContext(unitName="TADS")
private EntityManager em;
或者
@PersistenceContext(unitName="TODS")
private EntityManager em;
然後通過em就可以訪問不同的數據源下面的實體了。至於orm.xml不用修改,注意一定是unitName, 而不是name,
如果只是一個數據源,寫name就能默認找到datasource , 但是多個數據源不配置@PersistenceContext(unitName="TADS")
而只寫@PersistenceContext(name="TADS"), 會報TODS can not resolve. 的錯誤。
這只是在was下面使用jpa的經驗,希望能帶給你些提示。