0

我使用 Thorntail 2.2.0 (BOM),插入分数数据源并设置了 project-defaut.yml:

swarm:
  datasources:
    xa-data-sources:
      statsDS:
        driver-name: postgresql
        jndi-name: java:jboss/datasources/statsDS
        user-name: stats
        password: stats++
        valid-connection-checker-class-name: org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
        exception-sorter-class-name: org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter
        xa-datasource-properties:
          URL: jdbc:postgresql://postgres4stats:5432/stats

      oracleDS:
        driver-name: oracle
        jndi-name: java:jboss/datasources/oracleDS
        user-name: ora
        password: ora++
        valid-connection-checker-class-name: org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker
        validate-on-match: true
        background-validation: false
        stale-connection-checker-class-name: org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker
        exception-sorter-class-name: org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter
        xa-datasource-properties:
          URL: jdbc:oracle:thin:@oracle:1521:XE

    jdbc-drivers:
      oracle:
        driver-class-name: oracle.jdbc.OracleDriver
        xa-datasource-class: oracle.jdbc.xa.client.OracleXADataSource
        driver-module-name: com.oracle
      postgresql:
        driver-class-name: org.postgresql.Driver
        xa-datasource-class: org.postgresql.xa.PGXADataSource
        driver-module-name: org.postgresql

在中,我有一个 module.xml 文件,并且在正确的目录 ( )Resources/modules/com/oracle/main中与 postgresql 相同。org/postgresql/main

一切似乎都加载正常,到目前为止,当我启动我的 uber-jar 时没有错误。我可以看到INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-3) WFLYJCA0001: Bound data source [java:jboss/datasources/statsDS]和 oracle 一样。后来在日志中:(Controller Boot Thread) WFLYSRV0025: Thorntail 2.2.0.Final (WildFly Core 3.0.8.Final) started in 3390ms - Started 221 of 413 services (256 services are lazy, passive or on-demand)

至此,我很高兴……但是……

据我了解,在启动控制器启动后,swarm 开始加载我的 War。在尝试创建连接之前,一切都运行正常:

DEBUG [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (ServerService Thread Pool -- 5) statsDS: getConnection(null, WrappedConnectionRequestInfo@3ce4c9a9[userName=stats]) [0/20]
2018-10-01 12:26:21,025 DEBUG [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (ServerService Thread Pool -- 16) oracleDS: getConnection(null, WrappedConnectionRequestInfo@1427a5a3[userName=ora]) [0/20]
2018-10-01 12:26:21,026 WARN  [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (ServerService Thread Pool -- 16) IJ000604: Throwable while attempting to get a new connection: null: javax.resource.ResourceException: IJ031084: Unable to create connection
    at org.jboss.jca.adapters.jdbc.xa.XAManagedConnectionFactory.getXAManagedConnection(XAManagedConnectionFactory.java:509)
    at org.jboss.jca.adapters.jdbc.xa.XAManagedConnectionFactory.createManagedConnection(XAManagedConnectionFactory.java:416)
    at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.createConnectionEventListener(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:1327)
    at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.getConnection(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:499)
    at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:632)
    at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:604)
    at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:624)
    at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:430)
    at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:789)
    at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:138)
    at org.jboss.as.connector.subsystems.datasources.WildFlyDataSource.getConnection(WildFlyDataSource.java:64)
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:254)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:228)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:848)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:875)
    at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:167)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:125)
    at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:640)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:209)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
    at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: javax.resource.ResourceException: IJ031101: XADataSourceClass is undefined
    at org.jboss.jca.adapters.jdbc.xa.XAManagedConnectionFactory.getXADataSource(XAManagedConnectionFactory.java:621)
    at org.jboss.jca.adapters.jdbc.xa.XAManagedConnectionFactory.getXAManagedConnection(XAManagedConnectionFactory.java:493)
    ... 35 more

无法创建连接;xadatasourceclass undefined ...我看不出我做错了什么;和谷歌也没有!

所以,如果你有任何想法,请告诉我,谢谢。

4

3 回答 3

0

根据http://docs.wildfly-swarm.io/2.2.0.Final/#_datasources您需要设置 XA 数据源驱动程序类,如下所示:

jdbc-drivers:
  oracle:
    driver-class-name: oracle.jdbc.OracleDriver
    driver-xa-datasource-class-name: oracle.jdbc.xa.client.OracleXADataSource
    driver-module-name: com.oracle
  postgresql:
    driver-class-name: org.postgresql.Driver
    driver-xa-datasource-class-name: org.postgresql.xa.PGXADataSource
    driver-module-name: org.postgresql
于 2018-10-01T13:05:42.713 回答
0

我相信您遇到了我最近遇到的同样问题:THORN-1281

基本上,这意味着,而不是做

    xa-datasource-properties:
      URL: jdbc:oracle:thin:@oracle:1521:XE

你应该写

    xa-datasource-properties:
      URL: 
        value: jdbc:oracle:thin:@oracle:1521:XE
于 2018-11-09T19:27:09.310 回答
0

根据 Thortnail 文档:http ://docs.wildfly-swarm.io/2.0.0.Final/#_datasources 。

也许您还应该在数据源定义中定义 xa-datasource-class。

并通过 driver-xa-datasource-class-name 更改 driver-class-name。

编辑:最终奏效的解决方案是使用 XML 配置文件进行数据源配置。

在我这边,我注意到 YML 配置文件在覆盖现有的 swarm 默认属性时会导致一些错误。

于 2018-10-01T13:41:43.310 回答