Class ConnectionTracker

java.lang.Object
xyz.cofe.sql.cpool.proxy.MethodCallAdapter
xyz.cofe.sql.cpool.proxy.ConnectionTracker
All Implemented Interfaces:
MethodArgsRewrite, MethodCallListener, MethodCallRewrite

public class ConnectionTracker
extends MethodCallAdapter
Трекер соединения с базой данных
Author:
Kamnev Georgiy
  • Field Summary

    Fields 
    Modifier and Type Field Description
    protected xyz.cofe.fn.Fn4<java.lang.Object,​java.lang.Object,​java.lang.reflect.Method,​java.lang.Object[],​java.lang.String> collectName  
    protected java.lang.Boolean isClosed  
    protected boolean shared  
    protected boolean trackClose  
    protected boolean trackStatements  
    protected java.lang.ref.WeakReference<java.sql.Connection> wconn  
    protected java.lang.ref.WeakReference<ConnectPool> wcpool  

    Fields inherited from class xyz.cofe.sql.cpool.proxy.MethodCallAdapter

    rewriteArguments
  • Constructor Summary

    Constructors 
    Constructor Description
    ConnectionTracker​(ConnectPool cpool, java.sql.Connection conn)  
  • Method Summary

    Modifier and Type Method Description
    void beginCall​(java.lang.Object proxy, java.lang.Object source, java.lang.reflect.Method meth, java.lang.Object[] args)
    Вызывается перед началом метода
    protected void collectActivity​(java.lang.Object proxy, java.lang.Object source, java.lang.reflect.Method meth, java.lang.Object[] args)
    Собирает статистику вызова метода
    HookResult endCall​(java.lang.Object proxy, java.lang.Object source, java.lang.reflect.Method meth, java.lang.Object[] args, java.lang.Object callResult, java.lang.Throwable err)
    Отслеживает вызов close() и создает событие ConnectPoolEvent.Disconnected.
    xyz.cofe.fn.Fn4<java.lang.Object,​java.lang.Object,​java.lang.reflect.Method,​java.lang.Object[],​java.lang.String> getCollectName()
    Указывает функцию определяющую имя метрики для метода
    boolean isCollectActivity()
    Возвращает собирать или нет статистику вызова методов
    boolean isRewriteCall​(java.lang.Object proxy, java.lang.Object source, java.lang.reflect.Method method, java.lang.Object[] args)
    Определяет надо переопределять вызов метода или нет
    boolean isShared()
    Соединение является общим (shared) для клиентов.
    boolean isTrackClose()
    Отслеживать вызов метода close().
    boolean isTrackStatements()
    Создавать proxy для Statement
    java.lang.Object rewriteCall​(java.lang.Object proxy, java.lang.Object source, java.lang.reflect.Method method, java.lang.Object[] args)
    Вызывается вместо вызова исходного метода, если вызов метода isRewriteCall вернуло true
    void setCollectName​(xyz.cofe.fn.Fn4<java.lang.Object,​java.lang.Object,​java.lang.reflect.Method,​java.lang.Object[],​java.lang.String> fn)
    Указывает функцию определяющую имя метрики для метода
    void setShared​(boolean shared)
    Соединение является общим (shared) для клиентов
    void setTrackClose​(boolean trackClose)
    Отслеживать вызов метода close()
    void setTrackStatements​(boolean trackStatements)
    Создавать proxy для Statement

    Methods inherited from class xyz.cofe.sql.cpool.proxy.MethodCallAdapter

    isRewriteArguments, rewriteArguments, setRewriteArguments

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • wcpool

      protected final java.lang.ref.WeakReference<ConnectPool> wcpool
    • wconn

      protected final java.lang.ref.WeakReference<java.sql.Connection> wconn
    • collectName

      protected volatile xyz.cofe.fn.Fn4<java.lang.Object,​java.lang.Object,​java.lang.reflect.Method,​java.lang.Object[],​java.lang.String> collectName
    • trackClose

      protected boolean trackClose
    • trackStatements

      protected boolean trackStatements
    • shared

      protected boolean shared
    • isClosed

      protected volatile java.lang.Boolean isClosed
  • Constructor Details

  • Method Details

    • getCollectName

      public xyz.cofe.fn.Fn4<java.lang.Object,​java.lang.Object,​java.lang.reflect.Method,​java.lang.Object[],​java.lang.String> getCollectName()
      Указывает функцию определяющую имя метрики для метода
      Returns:
      функция сопоставления имени метода и названия метрики
    • setCollectName

      public void setCollectName​(xyz.cofe.fn.Fn4<java.lang.Object,​java.lang.Object,​java.lang.reflect.Method,​java.lang.Object[],​java.lang.String> fn)
      Указывает функцию определяющую имя метрики для метода
      Parameters:
      fn - функция сопоставления метода и название метрики, если функция вернет null, то метрика не будет собираться для указанного метода
      fn( proxy, source, method, arguments ) : metricName
    • isCollectActivity

      public boolean isCollectActivity()
      Возвращает собирать или нет статистику вызова методов
      Returns:
      true - собирать статистику
    • collectActivity

      protected void collectActivity​(java.lang.Object proxy, java.lang.Object source, java.lang.reflect.Method meth, java.lang.Object[] args)
      Собирает статистику вызова метода
      Parameters:
      proxy - прокси объект (содинение)
      source - исходный объект
      meth - метод
      args - параметры метода
      See Also:
      setCollectName(xyz.cofe.fn.Fn4<java.lang.Object, java.lang.Object, java.lang.reflect.Method, java.lang.Object[], java.lang.String>)
    • isTrackClose

      public boolean isTrackClose()
      Отслеживать вызов метода close().

      при закрытии соединения посылает сообщение ConnectPoolEvent.Disconnected в ConnectPool

      Returns:
      true - отслеживать вызов close
    • setTrackClose

      public void setTrackClose​(boolean trackClose)
      Отслеживать вызов метода close()
      Parameters:
      trackClose - true - отслеживать вызов close
      See Also:
      isTrackClose()
    • isTrackStatements

      public boolean isTrackStatements()
      Создавать proxy для Statement
      Returns:
      true - создавать proxy для Statement
    • setTrackStatements

      public void setTrackStatements​(boolean trackStatements)
      Создавать proxy для Statement
      Parameters:
      trackStatements - true - создавать proxy для Statement
    • isShared

      public boolean isShared()
      Соединение является общим (shared) для клиентов.

      Если соединение является общим, то при вызове close прокси соединения, вызывается очистка связанных объектов (statements/resultset)

      Returns:
      true - является общим
    • setShared

      public void setShared​(boolean shared)
      Соединение является общим (shared) для клиентов
      Parameters:
      shared - true - является общим
      See Also:
      isShared()
    • beginCall

      public void beginCall​(java.lang.Object proxy, java.lang.Object source, java.lang.reflect.Method meth, java.lang.Object[] args)
      Description copied from interface: MethodCallListener
      Вызывается перед началом метода
      Specified by:
      beginCall in interface MethodCallListener
      Overrides:
      beginCall in class MethodCallAdapter
      Parameters:
      proxy - Прокси объект
      source - Исходный объект
      meth - Метод
      args - Аргументы
    • endCall

      public HookResult endCall​(java.lang.Object proxy, java.lang.Object source, java.lang.reflect.Method meth, java.lang.Object[] args, java.lang.Object callResult, java.lang.Throwable err)
      Отслеживает вызов close() и создает событие ConnectPoolEvent.Disconnected.
      Отслеживает вызов createStatement, prepareCall, prepareStatement и создает прокси
      Specified by:
      endCall in interface MethodCallListener
      Overrides:
      endCall in class MethodCallAdapter
      Parameters:
      proxy - прокси соединения с бд
      source - исходный объект соединения с бд
      meth - метод
      args - аргументы вызова
      callResult - результат вызова
      err - исключение если оно было
      Returns:
      результат перехвата
    • isRewriteCall

      public boolean isRewriteCall​(java.lang.Object proxy, java.lang.Object source, java.lang.reflect.Method method, java.lang.Object[] args)
      Description copied from interface: MethodCallRewrite
      Определяет надо переопределять вызов метода или нет
      Specified by:
      isRewriteCall in interface MethodCallRewrite
      Overrides:
      isRewriteCall in class MethodCallAdapter
      Parameters:
      proxy - прокси объекта
      source - исходный объект
      method - метод
      args - аргументы метода
      Returns:
      true - необходимо переопределить вызов - вызвать rewriteCall
      See Also:
      MethodCallRewrite.rewriteCall(Object, Object, Method, Object[])
    • rewriteCall

      public java.lang.Object rewriteCall​(java.lang.Object proxy, java.lang.Object source, java.lang.reflect.Method method, java.lang.Object[] args)
      Description copied from interface: MethodCallRewrite
      Вызывается вместо вызова исходного метода, если вызов метода isRewriteCall вернуло true
      Specified by:
      rewriteCall in interface MethodCallRewrite
      Overrides:
      rewriteCall in class MethodCallAdapter
      Parameters:
      proxy - прокси объекта
      source - исходный объект
      method - метод
      args - аргументы метода
      Returns:
      результат вызова