swarm/io.thorntail: Как определить 2 источника данных xa и где?
Мне нужно иметь 2 источника данных xa-dat для моего приложения 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) в этих двух файлах?
И в любом случае этот конф не работает:
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 работали в моем проекте? Спасибо...
1 ответ
Наконец, нет необходимости в *-ds.xml файлах, все, что находится в этих файлах, может быть в project-default.yml. Наконец, мой проект-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
Затем позаботьтесь о том, чтобы в вашем каталоге ресурсов были нужные модули. И это все.
Надеюсь, что это может помочь некоторым людям, потому что я посчитал, что доктор немного беден по этому поводу
Вы почти у цели. Настройте свойства URL следующим образом:
xa-datasource-properties:
URL:
value: jdbc:oracle:thin:@oracle:1521:XE
Я получил решение от этой темы: https://issues.jboss.org/browse/THORN-1270
Мне потребовалось некоторое время, чтобы понять это.