【发布时间】:2016-02-02 16:32:53
【问题描述】:
我在我的 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();
使用显示的配置我遇到了以下问题:
-
只有在我的standalone-full.xml 的
<default-bindings>部分中将其设置为默认值时,我才能访问数据源。如果它是空的,我会得到 p>"JBAS014771: Services with missing/unavailable dependencies"
指向部署期间 bean 中使用的数据源列表。
-
如果我将 DS1 设置为默认值,下次注入 DS2 时,它将包含
LocalManagedConnectionFactory
指向 dataSource.mcf 变量中的 DS1
正如我从这个主题中了解到的那样 Why different persistence units with separated data sources query the same data source? 这个问题可能是由容器管理的持久性引起的。
但在特定情况下,我没有使用任何 ORM。所以我只能使用 jndi 和服务器配置来操作数据源。
那么有什么方法可以通过使用一些额外的 wildfly 配置/对应用程序进行任何操作来解决这种情况,或者我必须使用 ORM 并自己管理持久性?
感谢您的回复。
【问题讨论】:
标签: java jdbc jboss datasource wildfly