gpt4 book ai didi

java - 在 Wildfly 中使用多个数据源

转载 作者:太空宇宙 更新时间:2023-11-04 13:16:24 25 4
gpt4 key购买 nike

我在我的 Java Web 应用程序中使用多个数据源。这是 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. 只有在 <default-bindings> 中将数据源设置为默认值时,我才能访问数据源我的standalone-full.xml 的部分。如果它是空的,我得到

    "JBAS014771: Services with missing/unavailable dependencies"

指向部署期间 bean 中使用的数据源列表。

  • 如果我将 DS1 设置为默认值,下次注入(inject) DS2 时,它将包含

    LocalManagedConnectionFactory

  • 指向 dataSource.mcf 变量中的 DS1

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

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

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

    感谢您的回复。

    最佳答案

    建议使用 ORM(最好是 JPA),因此您将使用entityManager 和 persistence.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;

    关于java - 在 Wildfly 中使用多个数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33483601/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com