Implement Oracle Fast Connection Failover (FCF) in Red Hat JBoss Enterprise Application Platform 6 or 7

Updated -

Summary

Red Hat JBoss Enterprise Application Platform (EAP) uses the JDBC API to access databases using JDBC 4.x compliant drivers supplied by database vendors. These drivers must adhere to the JDBC 4.x specification, although some vendors provide additional proprietary features. Fast Connection Failover (FCF) is one of these features. This functionality is vendor-specific and not part of the JDBC standard specification.

Implement Oracle Fast Connection Failover (FCF) in JBoss EAP

To gain access to Oracle's connection caching and FCF with Oracle RAC, you must use Oracle Universal Connection Pool (UCP). Oracle's UCP has not been tested or certified by Red Hat is not supported in JBoss EAP1. JBoss EAP is compatible with load-balancing and failover with Oracle RAC only to the degree that vendor-specific features are transparent to the application server to which they are deployed. For example, you can supply a detailed URL to the Oracle JDBC driver and the driver will provide transparent load-balancing and fail-over. The following is an example URL that provides load-balancing and fail-over.

<xa-datasource-property name="URL">jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=ON)(FAILOVER=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=my.host1.org)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=my.host2.org)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=servjboss)(failover_mode=(type=select)(method=basic)))</xa-datasource-property>

Note that the failover URL impacts creation of new connections only. Requests for connections from the EAP pool are not delegated to the Oracle implementation unless no available connections exist in the JBoss EAP pool (i.e. the pool is empty or all connections are "checked out"/reserved by application components). In a case where an available connection can be found in the JBoss pool, it may still reference a previous endpoint even after one or more other connections are created using a different endpoint based on the failover URL. For this reason, fault tolerance configuration is mandatory in order to permit JBoss to detect and evict stale connections from the idle pool.

For more information, see Using Oracle UCP / Oracle FCF / Oracle MMA in JBoss EAP.


  1. Note that EAP does not delegate to the underlying JDBC driver each time a connection is requested by application components. Instead, connections obtained from the underlying driver are pooled within EAP (until they time out or are evicted from the pool due to validation failure). Pooling outside of the JDBC driver layer may be incompatible with the expectations / requirements of 3rd party functionality.