2016-03-15 67 views
0

經過多次嘗試,看起來組合xa-datasource < - > postgres驅動程序不支持具有非默認端口(5432)的故障轉移配置。 我想,驅動程序不會實現xa所期望的所有方法。在HA模式下使用Postgresql JDBC驅動程序配置xa-datasource(Wildfly)

我會很高興,如果有人能告訴我,我錯了......

這個例子是工作,但使用默認端口:

<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> 
+0

嘗試改變connction,網址爲'JDBC:在PostgreSQL://服務器1:5432/DB_NAME,JDBC:在PostgreSQL://服務器2:5432/db_name' –

+0

@費德里科-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 – Marc

+0

嘗試一個不同的'url-delimiter'例如' |'並且檢查URLs之間不存在空間 –

回答

0

這可能會晚點回復,但它可能會幫助正在尋找postgres xa-datasource配置的人。 首先,您需要在Wildfly模塊中安裝postgre驅動程序,然後進行配置。 您可以使用子系統通過命令行進行安裝,也可以將企業驅動程序的postgresql(enterprise)驅動程序名稱設置爲「org.edb.Driver」。使用module.xml將edb-jdbc17.jar放在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>