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的经验,希望能带给你些提示。