【问题标题】:Configuring a xa-datasource(Wildfly) in HA mode with a Postgresql JDBC driver使用 Postgresql JDBC 驱动程序在 HA 模式下配置 xa-datasource(Wildfly)
【发布时间】:2016-03-15 14:22:58
【问题描述】:

经过多次尝试,组合 xa-datasource postgres 驱动程序似乎不支持具有非默认端口(5432)的故障转移配置。 我猜,驱动程序并没有实现 xa 所期望的所有方法。

如果有人能告诉我我错了,我会很高兴...

这个例子可以运行,但是使用默认端口:

<xa-datasource jndi-name="java:/Foo" pool-name="Foo" enabled="true" use-ccm="true" statistics-enabled="true">
    <xa-datasource-property name="url">
    jdbc:postgresql://server1,server2/db_name
    </xa-datasource-property>
    <xa-datasource-property name="ApplicationName">
    MyApp
    </xa-datasource-property>
    <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
    <driver>postgresql-jdbc4</driver>
    <url-delimiter>,</url-delimiter>
    <xa-pool>
    <min-pool-size>6</min-pool-size>
    <max-pool-size>40</max-pool-size>
    <prefill>true</prefill>
    <is-same-rm-override>false</is-same-rm-override>
    <interleaving>false</interleaving>
    <pad-xid>false</pad-xid>
    <wrap-xa-resource>false</wrap-xa-resource>
    </xa-pool>
    <security>
    <user-name>foo</user-name>
    <password>blah</password>
    </security>
    <validation>
    <validate-on-match>false</validate-on-match>
    <background-validation>false</background-validation>
    </validation>
    <timeout>
    <blocking-timeout-millis>3000</blocking-timeout-millis>
    <idle-timeout-minutes>60</idle-timeout-minutes>
    </timeout>
    <statement>
    <share-prepared-statements>false</share-prepared-statements>
    </statement>
</xa-datasource>

【问题讨论】:

  • 尝试将 connction-url 更改为 jdbc:postgresql://server1:5432/db_name, jdbc:postgresql://server2:5432/db_name
  • @federico-sierra 谢谢,但这也不起作用。 jdbc:postgresql://server1:5555/db_name,jdbc:postgresql://server2:5555/db_name => org.postgresql.util.PSQLException: 错误: 没有这样的数据库: db_name,jdbc:postgresql://server2:5555 /db_name
  • 尝试不同的url-delimiter 例如&lt;url-delimiter&gt;|&lt;/url-delimiter&gt; 并检查网址之间是否存在空格
  • @federico 嗨,我尝试了更多组合,但没有任何帮助,而且我对 xa 的洞察力不足以清楚地解释问题所在。 (不兼容或错误?)。无论如何,谢谢,马克
  • 我不确定问题是配置 xa-datasource 端口,还是配置时无法工作。反正;这是我配置端口的方式:/subsystem=datasources/xa-data-source=MyXA_DS/xa-datasource-properties=PortNumber:add(value=9999)。或者,您可以在 gui 控制台中将其添加为名称为 PortNumber 的属性。不过,我不知道这是否可以在 HA 模式下工作......

标签: datasource wildfly xa wildfly-cluster


【解决方案1】:

对于 Oracle 数据库,您可以使用以下配置。

jdbc:oracle:thin:@(description=(connect_timeout=5)(address_list=(load_balance=on)(failover=on) (address=(protocol=tcp)(host= server1)(port=1521)) (address=(protocol=tcp)(host= server2)(port=1521)) )(connect_data=(service_name=xyzabc)))

【讨论】:

    【解决方案2】:

    这可能是迟到的回复,但它可能会帮助正在寻找 postgres xa-datasource 配置的人。 首先,您需要在 Wildfly 模块中安装 postgre 驱动程序,然后进行配置。 您可以使用子系统通过命令行安装它,或将 postgresql(enterprise) 驱动程序名称设置为企业驱动程序的“org.edb.Driver”。将 edb-jdbc17.jar 和 module.xml 放在 WILDFLY_HOME\modules\system\layers\base\org\edb\main 目录下。

    某些驱动程序没有在其数据源类中实现 getURL() 方法。因此,我们必须为它们指定不同的数据源配置。

    Postgres 没有 getURL 方法。因此,我们将在 stanalone.xml/domain.xml 文件中指定这样的属性。

    <xa-datasource-property name="ServerName">DatabaseHostName</xa-datasource-property>
    <xa-datasource-property name="PortNumber">DatabasePortName</xa-datasource-property>
    <xa-datasource-property name="DatabaseName">DatabaseName</xa-datasource-property>
    <xa-datasource-class>com.edb.xa.PGXADataSource</xa-datasource-class>
    <driver>postgresql</driver>
     <xa-pool>
                                <min-pool-size>5</min-pool-size>
                                <initial-pool-size>5</initial-pool-size>
                                <max-pool-size>30</max-pool-size>
                                <use-strict-min>true</use-strict-min>
                                <is-same-rm-override>false</is-same-rm-override>
                                <no-tx-separate-pools>true</no-tx-separate-pools>
                            </xa-pool>
    <security>
         <user-name>database.username</user-name>
         <password>database.password</password>
    </security> 
    <validation>
            <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
            <background-validation>true</background-validation>
            <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
     </validation>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 2013-08-12
      • 2012-11-26
      • 2013-10-25
      相关资源
      最近更新 更多