2012-02-23 14 views
5

En el origen de datos de JBoss, ¿cómo puedo asignar varias cadenas de conexión para la conmutación por error de la base de datos en la que deseo?Fallo de la base de datos en Jboss Fuentes de datos

Habrá dos Mysql db con las mismas tablas que digan DB1 y DB2. Quiero insertar datos en DB1, si DB1 está inactivo, entonces necesito insertarlo en DB2. Durante la inserción en DB2 si aparece el DB1, necesito insertar el resto de los datos en DB1. ¿Cómo puedo configurar esto en mi JBoss?

+1

Es posible que desee configurar un clúster MySQL adecuado: http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-replication-failover. html – home

Respuesta

2
<?xml version="2.0" encoding="UTF-8"?> 
<!-- $Id$ --> 

<!-- Datasource config for MySQL using 3.0.9 available from: 
    http://www.mysql.com/downloads/api-jdbc-stable.html 
     --> 
    <datasources> 
    <local-tx-datasource> 

     <jndi-name>MySqlDSTest</jndi-name> 
     <use-java-context>true</use-java-context> 
     <connection-url>jdbc:mysql:loadbalance://ip1,ip2:3306/dbname?</connection-url> 
     <url-delimiter>|</url-delimiter> 
     <driver-class>com.mysql.jdbc.Driver</driver-class> 
     <connection-property name="readOnly">false</connection-property> 
     <autoReconnect>true</autoReconnect> 
     <failOverReadOnly>false</failOverReadOnly> 
     <user-name>userName</user-name> 
     <password>password</password> 
     <check-valid-connection-sql>selcect count(*) from TEST_TAB</check-valid-connection-sql> 
     <maxReconnects>0</maxReconnects> 
     <initialTimeout>15</initialTimeout> 
     <idle-timeout-minutes>0</idle-timeout-minutes> 
     <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name> 
     <!-- Advanced options for the MySQL Driver can be set with 
       <connection-property name="property">value</connection-property> 
     --> 
     <min-pool-size>5</min-pool-size> 
     <!-- Don't set this any higher than max_connections on your 
      MySQL server, usually this should be a 10 or a few 10's 
      of connections, not hundreds or thousands --> 
     <max-pool-size>20</max-pool-size> 
     <!-- Don't allow connections to hang out idle too long, 
      never longer than what wait_timeout is set to on the 
      server...A few minutes is usually okay here, 
      it depends on your application 
      and how much spikey load it will see --> 

     <!-- If you're using Connector/J 3.1.8 or newer, you can use 
      our implementation of these to increase the robustness 
      "mysql-ds.xml" 64L, 3683C  of the connection pool. --> 
     <exception-sorter-class-name> 
     com.mysql.jdbc.integration.jboss.ExtendedMysqlExceptionSorter 
     </exception-sorter-class-name> 
     <valid-connection-checker-class-name> 
     com.mysql.jdbc.integration.jboss.MysqlValidConnectionChecker 
     </valid-connection-checker-class-name> 
     <!-- sql to call when connection is created --> 
     <new-connection-sql>select 1</new-connection-sql> 
     <!-- sql to call on an existing pooled connection when it is obtained from pool - MySQLValidConnectionChecker is preferred for newer drivers --> 
     <check-valid-connection-sql> 
     select 1 
     </check-valid-connection-sql> 
     <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml --> 
     <metadata> 
     <type-mapping>mySQL</type-mapping> 
     </metadata> 
    </local-tx-datasource> 
    </datasources> 

Esto funcionará para el mapeo de JBoss

+0

Si omite false, la conexión de conmutación por error (DB2) será de solo lectura y obtendrá un error como este: ### Causa : java.sql.SQLException: la conexión es de solo lectura. Las consultas que conducen a la modificación de datos no están permitidas ; SQL []; La conexión es de solo lectura. Las consultas que conducen a la modificación de datos no están permitidas; la excepción anidada es java.sql.SQLException: la conexión es de solo lectura. Las consultas que conducen a la modificación de datos no están permitidas en ... –

2

Siga esta documentación. Jboss tiene configuración de configuración. https://community.jboss.org/wiki/JBossJCADatabaseFailover

Además, si usted no está utilizando JNDI y llamada JDBC llanura I hav otra solución - Digamos que usted está haciendo una llamada JDBC entonces usted tendrá que obtener una conexión de base de datos, si la base de datos se ha reducido por lo que recibirá la base de datos excepción de conexión, en el bloque intento de captura, si se encuentra con excepción de conexión, crear una conexión en sí mismo bloque de captura de la segunda base de datos :-)

Cuestiones relacionadas