对Wildfly使用多个数据源

问题描述:

我在我的java web应用程序中使用了多个数据源。 这里是Wildfly配置(独立运行模式):对Wildfly使用多个数据源

<datasource jta="false" jndi-name="java:jboss/datasources/DS1" pool-name="DS1" enabled="true" use-ccm="false"> 
    <connection-url>URL1</connection-url> 
    <driver>ojdbc7</driver> 
    <security> 
     <user-name>login</user-name> 
     <password>password</password> 
    </security> 
    <validation> 
     <validate-on-match>false</validate-on-match> 
     <background-validation>false</background-validation> 
    </validation> 
    <statement> 
     <share-prepared-statements>false</share-prepared-statements> 
    </statement> 
</datasource> 

<datasource jta="false" jndi-name="java:jboss/datasources/DS2" pool-name="DS2" enabled="true" use-ccm="false"> 
    <connection-url>URL2</connection-url> 
    <driver-class>org.h2.Driver</driver-class> 
    <driver>h2</driver> 
    <security> 
     <user-name>sa</user-name> 
     <password>sa</password> 
    </security> 
    <validation> 
     <validate-on-match>false</validate-on-match> 
     <background-validation>false</background-validation> 
    </validation> 
    <statement> 
     <share-prepared-statements>false</share-prepared-statements> 
    </statement> 

在我的EJB子项目

的jboss.xml:

<session> 
    <ejb-name>Bean1</ejb-name> 
    <resource-description> 
     <res-ref-name>DS1</res-ref-name> 
     <jndi-name>java:jboss/datasources/DS1</jndi-name> 
    </resource-description> 
</session> 
<session> 
    <ejb-name>Bean2</ejb-name> 
    <resource-description> 
     <res-ref-name>DS2</res-ref-name> 
     <jndi-name>java:jboss/datasources/DS2</jndi-name> 
    </resource-description> 
</session> 

在EJB Bean1/Bean2数据源经由

@Resource(name="DS1/DS2") 
private DataSource dataSource; 

.... 

Connection connection = dataSource.getConnection(); 
称为

使用显示的配置我遇到了以下问题:

  1. 我可以访问只有当它在我的独立,full.xml的<default-bindings>段设置为默认的数据源。如果是空的,我得到

    "JBAS014771: Services with missing/unavailable dependencies"

指向部署过程中使用的豆数据源的列表。

  1. 如果我设置DS1作为默认的,下一次DS2被注入,它将包含

    LocalManagedConnectionFactory

  2. 指向的数据源DS1。 mcf变量

    正如我从这个主题了解 Why different persistence units with separated data sources query the same data source? 此问题可能是由容器管理的持久性引起的。

    但在特定情况下,我没有使用任何ORM。所以我只能使用jndi和服务器配置来操作数据源。

    那么有什么办法可以通过使用一些额外的野蛮配置/应用程序的任何操作来解决这种情况,或者我必须使用ORM并自己管理持久性?

    感谢您的回复。

开始=>

建议使用ORM(最佳情况下为JPA),因此您将使用entityManager和persitence.xml来使用多个数据源。

<persistence-unit name="DB1_PU"> 
    <jta-data-source>java:jboss/datasources/ds1</jta-data-source> 
</persistence-unit> 
<persistence-unit name="DB2_PU"> 
    <jta-data-source>java:jboss/datasources/ds2</jta-data-source> 
</persistence-unit> 

,你可以调用DS这样的:

@PersistenceContext(unitName = "DB1_PU") 
protected EntityManager entityManager1; 

@PersistenceContext(unitName = "DB2_PU") 
protected EntityManager entityManager2; 
+0

你有一个错字:persitence.xml - > PERSI计划** S ** tence.xml – ChristophS