Class DynamicClassManager

java.lang.Object
ru.bgcrm.dynamic.DynamicClassManager

public class DynamicClassManager extends Object
Загрузчик динамического кода. Подгружает классы прямо из БД по данному соединению. Может работать в двух режимах относительно БД: read\write (для сервера) и read-only (для остальных).

В режиме r\w отлавливает изменения в сорцах, компилирует их заново и пишет в базу, бросая при этом событие обновления класса с заданным именем. Плюс осуществляет те же действия, что и в режиме read-only.

В режиме read-only не следит за сорцами и ничего не компилирует, только слушает сообщения об изменении классов в БД, по получении которых форсит classLoader на перечитывание класса из БД.
  • Field Details

  • Method Details

    • findClassImplements

      public <T> List<Class<?>> findClassImplements(@NotNull @NotNull Class<T> clazz)
    • getClassFile

      public static File getClassFile(String className)
      Возвращает File, соответствующий файлу с исходным кодом указанного класа.
      Parameters:
      className - имя класса
      Returns:
      file
    • getInstance

      public static DynamicClassManager getInstance()
      Возвращает инстанцию менеджера динамических классов. По умолчанию инициализируется ReadOnlyClassManager'ом.
      Returns:
    • getDynamicClassNames

      public List<String> getDynamicClassNames()
      Возвращает список имён классов.
      Returns:
      список классов
    • recompileAll

      public CompilationResult recompileAll() throws BGException
      Throws:
      BGException
    • recompile

      public CompilationResult recompile(List<String> targetClassNames) throws BGException
      Throws:
      BGException
    • getActualDynamicClassloader

      public ClassLoader getActualDynamicClassloader()
    • loadClass

      public Class<?> loadClass(String className)
      Возвращает актуальную версию загруженного класса по его имени.
      Parameters:
      className - полное имя класса
      Returns:
      класс
    • getClass

      public static Class<?> getClass(String className) throws ClassNotFoundException
      Возвращает актуальный класс по его имени. Динамический либо обычный.
      Parameters:
      className -
      Returns:
      Throws:
      ClassNotFoundException
    • newInstance

      public static <T> T newInstance(String implClassName) throws BGException, ClassNotFoundException
      Возвращает актуальный инстанс имплементации некоего интерфейса. Данный метод всегда будет возвращать актуальную версию некоего класса.
      Parameters:
      implClassName - полное имя класса
      Returns:
      объект, реализующий интерфейс
      Throws:
      BGException
      ClassNotFoundException