现在的位置: 首页 > 综合 > 正文

was下jpa配置多个数据源 more datasource

2013年09月05日 ⁄ 综合 ⁄ 共 1925字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.