public class FailoverProxy
extends java.lang.Object
implements java.lang.reflect.InvocationHandler
Modifier and Type | Field and Description |
---|---|
private Listener |
listener |
java.util.concurrent.locks.ReentrantLock |
lock |
private static Logger |
logger |
private static java.lang.String |
METHOD_ABORT |
private static java.lang.String |
METHOD_CLOSED_EXPLICIT |
private static java.lang.String |
METHOD_COM_MULTI_PREPARE_EXECUTES |
private static java.lang.String |
METHOD_EXECUTE_PREPARED_QUERY |
private static java.lang.String |
METHOD_EXECUTE_QUERY |
private static java.lang.String |
METHOD_GET_CATALOG |
private static java.lang.String |
METHOD_GET_LOCK |
private static java.lang.String |
METHOD_GET_MAJOR_VERSION |
private static java.lang.String |
METHOD_GET_NO_BACKSLASH |
private static java.lang.String |
METHOD_GET_OPTIONS |
private static java.lang.String |
METHOD_GET_PROXY |
private static java.lang.String |
METHOD_GET_READ_ONLY |
private static java.lang.String |
METHOD_GET_SERVER_THREAD_ID |
private static java.lang.String |
METHOD_GET_TIMEOUT |
private static java.lang.String |
METHOD_GET_URLPARSER |
private static java.lang.String |
METHOD_IN_TRANSACTION |
private static java.lang.String |
METHOD_IS_CLOSED |
private static java.lang.String |
METHOD_IS_EXPLICIT_CLOSED |
private static java.lang.String |
METHOD_IS_MASTER_CONNECTION |
private static java.lang.String |
METHOD_IS_VALID |
private static java.lang.String |
METHOD_PROLOG |
private static java.lang.String |
METHOD_PROLOG_PROXY |
private static java.lang.String |
METHOD_RESET |
private static java.lang.String |
METHOD_SESSION_STATE_AWARE |
private static java.lang.String |
METHOD_SET_READ_ONLY |
private static java.lang.String |
METHOD_VERSION_GREATER_OR_EQUAL |
Constructor and Description |
---|
FailoverProxy(Listener listener,
java.util.concurrent.locks.ReentrantLock lock)
Proxy constructor.
|
Modifier and Type | Method and Description |
---|---|
private static java.sql.SQLException |
addHostInformationToException(java.sql.SQLException exception,
Protocol protocol)
Add Host information ("on HostAddress...") to exception.
|
private java.lang.Object |
executeInvocation(java.lang.reflect.Method method,
java.lang.Object[] args,
boolean isSecondExecution) |
Listener |
getListener() |
private java.lang.Object |
handleFailOver(java.sql.SQLException qe,
java.lang.reflect.Method method,
java.lang.Object[] args,
Protocol protocol)
After a connection exception, launch failover.
|
boolean |
hasToHandleFailover(java.sql.SQLException exception)
Check if this Sqlerror is a connection exception.
|
java.lang.Object |
invoke(java.lang.Object proxy,
java.lang.reflect.Method method,
java.lang.Object[] args)
Proxy that catch Protocol call, to permit to catch errors and handle failover when multiple
hosts.
|
void |
reconnect()
Launch reconnect implementation.
|
private static final java.lang.String METHOD_IS_EXPLICIT_CLOSED
private static final java.lang.String METHOD_GET_OPTIONS
private static final java.lang.String METHOD_GET_URLPARSER
private static final java.lang.String METHOD_GET_PROXY
private static final java.lang.String METHOD_EXECUTE_QUERY
private static final java.lang.String METHOD_SET_READ_ONLY
private static final java.lang.String METHOD_GET_READ_ONLY
private static final java.lang.String METHOD_IS_MASTER_CONNECTION
private static final java.lang.String METHOD_VERSION_GREATER_OR_EQUAL
private static final java.lang.String METHOD_SESSION_STATE_AWARE
private static final java.lang.String METHOD_CLOSED_EXPLICIT
private static final java.lang.String METHOD_ABORT
private static final java.lang.String METHOD_IS_CLOSED
private static final java.lang.String METHOD_EXECUTE_PREPARED_QUERY
private static final java.lang.String METHOD_COM_MULTI_PREPARE_EXECUTES
private static final java.lang.String METHOD_PROLOG_PROXY
private static final java.lang.String METHOD_RESET
private static final java.lang.String METHOD_IS_VALID
private static final java.lang.String METHOD_GET_LOCK
private static final java.lang.String METHOD_GET_NO_BACKSLASH
private static final java.lang.String METHOD_GET_SERVER_THREAD_ID
private static final java.lang.String METHOD_PROLOG
private static final java.lang.String METHOD_GET_CATALOG
private static final java.lang.String METHOD_GET_TIMEOUT
private static final java.lang.String METHOD_GET_MAJOR_VERSION
private static final java.lang.String METHOD_IN_TRANSACTION
private static final Logger logger
public final java.util.concurrent.locks.ReentrantLock lock
private final Listener listener
public FailoverProxy(Listener listener, java.util.concurrent.locks.ReentrantLock lock) throws java.sql.SQLException
listener
- failover implementation.lock
- synchronisation lockjava.sql.SQLException
- if connection error occurprivate static java.sql.SQLException addHostInformationToException(java.sql.SQLException exception, Protocol protocol)
example :
java.sql.SQLException: (conn=603) Cannot execute statement in a READ ONLY transaction.
Query is: INSERT INTO TableX VALUES (21)
on HostAddress{host='mydb.example.com',
port=3306},master=true
exception
- current exceptionprotocol
- protocol to have hostnamepublic java.lang.Object invoke(java.lang.Object proxy, java.lang.reflect.Method method, java.lang.Object[] args) throws java.lang.Throwable
invoke
in interface java.lang.reflect.InvocationHandler
proxy
- the current protocolmethod
- the called method on the protocolargs
- methods parametersjava.lang.Throwable
- the method throwed error if not catch by failoverprivate java.lang.Object executeInvocation(java.lang.reflect.Method method, java.lang.Object[] args, boolean isSecondExecution) throws java.lang.Throwable
java.lang.Throwable
private java.lang.Object handleFailOver(java.sql.SQLException qe, java.lang.reflect.Method method, java.lang.Object[] args, Protocol protocol) throws java.lang.Throwable
qe
- the exception thrownmethod
- the method to call if failover works wellargs
- the arguments of the methodjava.lang.Throwable
- throwablepublic boolean hasToHandleFailover(java.sql.SQLException exception)
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"
exception
- the Exceptionpublic void reconnect() throws java.sql.SQLException
java.sql.SQLException
- exceptionpublic Listener getListener()