swarm / io.thorntail: Как определить 2 источника данных xa и где? - PullRequest
0 голосов
/ 30 сентября 2018

Мне нужно иметь 2 источника данных xa для моего приложения thorntail / swarm, но я не могу понять, где разместить соответствующую информацию.Судя по тому, что я прочитал, мне нужен файл project-default.yml, например:

 swarm:
  datasources:
    xa-data-sources:
      statsDS:
        driver-name: postgresql
        connection-url: jdbc:postgresql://postgres:5432/stats
        user-name: stats
        password: stats++
      OracleDS:
        driver-name: oracle
        connection-url: jdbc:oracle:thin:@oracle:1521:XE
        user-name: ora
        password: ora++
    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

И некоторые файлы * -ds.xml, а также в этих * -ds.xmlВ файлах я нахожу некоторую идентичную информацию, чем в project-default.yml.Например, oracle-ds.xml:

<?xml version="1.0" encoding="UTF-8"?>
<datasources xmlns="http://www.jboss.org/ironjacamar/schema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.jboss.org/ironjacamar/schema http://docs.jboss.org/ironjacamar/schema/datasources_1_0.xsd">
    <!-- The datasource is bound into JNDI at this location. We reference this 
        in META-INF/persistence.xml -->
    <xa-datasource
        jndi-name="java:jboss/datasources/oracleDS" pool-name="oracle">
        <xa-datasource-property name="URL">
            jdbc:oracle:thin:@oracle:1521:XE
        </xa-datasource-property>
        <driver>oracle</driver>
        <security>
            <user-name>ora</user-name>
            <password>ora++</password>
        </security>
        <validation>
            <valid-connection-checker
                class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker" />
            <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" />
        </validation>
    </xa-datasource>
</datasources>

Почему те же данные (драйвер, пользователь, passwd, url) в этих 2 файлах?

И в любом случае этот conf не работает:

2018-09-30 14:07:19,377 ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 6) WFLYCTL0013: Operation ("add") failed - address: ([
    ("subsystem" => "datasources"),
    ("xa-data-source" => "statsDS")
]) - failure description: "WFLYCTL0155: 'jndi-name' may not be null"

Просто чтобы завершить postgresql-ds.xml:

<?xml version="1.0" encoding="UTF-8"?>
<datasources xmlns="http://www.jboss.org/ironjacamar/schema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.jboss.org/ironjacamar/schema http://docs.jboss.org/ironjacamar/schema/datasources_1_0.xsd">
    <xa-datasource jndi-name="java:jboss/datasources/statsDS"
        pool-name="PostgresXADS">
        <xa-datasource-property name="URL">
            jdbc:postgresql://postgres:5432/stats
        </xa-datasource-property>
        <driver>postgresql</driver>
    <security>
            <user-name>stats</user-name>
            <password>stats++</password>
        </security>
        <validation>
            <valid-connection-checker
                class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker">
            </valid-connection-checker>
            <exception-sorter
                class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter">
            </exception-sorter>
        </validation>
    </xa-datasource>
</datasources>

Если я не использую project-default.yml и только файлы * -ds.xml,У меня есть:

"WFLYCTL0412: Required services that are not installed:" => ["jboss.jdbc-driver.oracle"],
"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.data-source.\"jboss.naming.context.java.jboss.datasources.oracleDS\" is missing [jboss.jdbc-driver.oracle]"]

Я могу уточнить, что у меня есть каталог module.xml и ojdbcxxx.jar в моих каталогах resources / modules / com / oracle / main.

Как мне это сделать?чтобы мои 2 источника данных XA работали в моем проекте?Спасибо ...

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Вы почти у цели.Настройте свойства URL следующим образом:

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

Я получил решение из этой темы: https://issues.jboss.org/browse/THORN-1270

Мне потребовалось некоторое время, чтобы понять это.

0 голосов
/ 30 сентября 2018

Наконец, * * .ds.xml файлы не нужны, все, что находится в этих файлах, может быть в project-default.yml.Наконец, мой project-default.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://postgres: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

Затем позаботьтесь о том, чтобы в вашем каталоге ресурсов были нужные модули.И это все.

Надеюсь, что это может помочь некоторым людям, потому что я нашел документ немного бедным по этому поводу.

...