# Class FailoverProxy

java.lang.Object
org.mariadb.jdbc.internal.failover.FailoverProxy

All Implemented Interfaces:
  `InvocationHandler`

public class FailoverProxy extends Object implements InvocationHandler

## Field Summary

Fields
Modifier and Type
Field
Description
`final ReentrantLock`
`lock`
`final LruTraceCache`
`traceCache`

## Constructor Summary

Constructors
Constructor
Description
`FailoverProxy(Listener listener, ReentrantLock lock, LruTraceCache traceCache)`
Proxy constructor.

## Method Summary

Modifier and Type
Method
Description
`Listener`
`getListener()`
`boolean`
`hasToHandleFailover(SQLException exception)`
Check if this Sqlerror is a connection exception.
`Object`
`invoke(Object proxy, Method method, Object[] args)`
Proxy that catch Protocol call, to permit to catch errors and handle failover when multiple hosts.
`void`
`reconnect()`
Launch reconnect implementation.

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### lock

public final ReentrantLock lock

### traceCache

public final LruTraceCache traceCache

## Constructor Details

### FailoverProxy

public FailoverProxy(Listener listener, ReentrantLock lock, LruTraceCache traceCache) throws SQLException
Proxy constructor.

Parameters:
  `listener` - failover implementation.
  `lock` - synchronisation lock
  `traceCache` - trace cache
Throws:
  `SQLException` - if connection error occur

## Method Details

### invoke

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
Proxy that catch Protocol call, to permit to catch errors and handle failover when multiple hosts.

Specified by:
  `invoke` in interface `InvocationHandler`
Parameters:
  `proxy` - the current protocol
  `method` - the called method on the protocol
  `args` - methods parameters
Returns:
  protocol method result
Throws:
  `Throwable` - the method throwed error if not catch by failover

### hasToHandleFailover

public boolean hasToHandleFailover(SQLException exception)
Check if this Sqlerror is a connection exception. if that's the case, must be handle by failover

error codes : 08000 : connection exception 08001 : SQL client unable to establish SQL connection 08002 : connection name in use 08003 : connection does not exist 08004 : SQL server rejected SQL connection 08006 : connection failure 08007 : transaction resolution unknown 70100 : connection was killed if error code is "1927"

Parameters:
  `exception` - the Exception
Returns:
  true if there has been a connection error that must be handled by failover

### reconnect

public void reconnect() throws SQLException
Launch reconnect implementation.

Throws:
  `SQLException` - exception

### getListener

public Listener getListener()