Class FailoverProxy

java.lang.Object
org.mariadb.jdbc.internal.failover.FailoverProxy
All Implemented Interfaces:
InvocationHandler

public class FailoverProxy extends Object implements InvocationHandler
  • Field Details

  • 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

    • addHostInformationToException

      private static SQLException addHostInformationToException(SQLException exception, Protocol protocol)
      Add Host information ("on HostAddress...") to exception.

      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

      Parameters:
      exception - current exception
      protocol - protocol to have hostname
    • 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
    • executeInvocation

      private Object executeInvocation(Method method, Object[] args, boolean isSecondExecution) throws Throwable
      Throws:
      Throwable
    • handleFailOver

      private Object handleFailOver(SQLException qe, Method method, Object[] args, Protocol protocol, boolean isClosed) throws Throwable
      After a connection exception, launch failover.
      Parameters:
      qe - the exception thrown
      method - the method to call if failover works well
      args - the arguments of the method
      Returns:
      the object return from the method
      Throws:
      Throwable - throwable
    • 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()