8000 GitHub - icanit/java-plugins
[go: up one dir, main page]

Skip to content

icanit/java-plugins

Repository files navigation

Репозиторий к докладу на JPoint 2025 Модульный монолит: как построить гибкое Java-приложение с hot reload

Контакты для связи со мной

E-mail: icanitgs@gmail.com

Telegram: https://t.me/icanit

Полезные ссылки

Тут указаны ссылки на ресурсы которые использовались в докладе или же могут быть полезны в контексте темы доклада.

Доклады

Статьи:

< 9526 ul dir="auto">
  • Статья на Хабре про класслоадеры
  • Spring Boot Classloader and Class Overriding
  • Документации

    OSGI

    Фреймворки

    Про код в репозитории

    Данный код собран из моей личной песочницы в рамках которой я тестировал плагинную архитектуру. Данный реп представляет собой прототип монорепы, в которой содержатся как и родительское приложения, так и плагины.

    Основные проекты в репозитории:

    app

    Тут находится springboot приложение которое позволяет запускать внутри себя инстанс плагина. Для простоты оно поддерижвает только один инстанс плагина внутри себя, хотя ничего не мешается переписать инициализацию с конфигурацией и запускать несколько плагинов.

    в _conf/application.yml находится пример конфига этого приложения, который, в том числе, содержит настройки для запуска плагина. При запуске приложение вычитывает директорию с плагинами, которая в примере настроена на директорию куда gradle собирает плагины (см. gradle таску bundlePlugin)

    Приложение также поддерживает вычитку репозитория с плагинами, но для этого нужено поднять nexus/reposilite и в него публишить собираемые плагины. (см. gradle таску publishPlugin)

    build-conventions

    Тут содержатся билд скрипты для упрощения конфигурирования подпроектов в gradle

    framework

    Тут содержатся разные утилиты для упрощения работы с сущностями в коде + базовые классы для плагинной системы.

    plugins-lib

    Тут содержатся интерфейсы плагинов, а также интерфейсы бинов, которые ядро может инжектить в контекст плагина т.е. по факту Plugin API и Core API

    plugins

    Тут находятся подпроекты плагинов, gradle корневого проекта настроен так, что все подпроекты в этой директории сами добавляются автоматически в корневой проект

    Как работать с песочницей:

    Сначала нужно собрать плагины, вызывав:

    gradle bundlePlugin

    после чего можно запускать JavaPluginApp не забыв указать пусть к конфигу ./_conf/application.yml

    В данном репозитории в директории ./_run хранится конфигурации запуска для IDEA для бандлинга плагинов и запуска приложения.

    Приложение содержит внутри себя swagger-ui, который доступен url: http://localhost:8080/swagger-ui/index.html после его запуска. Через него можно дергать методы менеджера плагинов и эмулировать запрос к самому плагину и смотреть его результат.

    Например:

    curl -X 'POST' \
      'http://localhost:8080/api/plugin/action/doSomething' \
      -H 'accept: application/json' \
      -H 'Content-Type: application/json' \
      -d 'foo'
    

    вернет результат:

    {
      "data": "Bar",
      "error": null,
      "success": true
    }
    

    Куда смотреть в коде:

    com.paidora.app.services.plugin.PluginsManager - тут по факту код отвечающий за жизненый цикл работы с плагинами. com.paidora.framework.modules - это классы базового каркаса для работы с плагинами которые уже нас стороне приложения нужно переопределить и подтюнить под конкретную задачу.

    примеры реализации плагинов в: com.paidora.modules.plugins.foobar.FoobarPlugin com.paidora.modules.plugins.helloworld.HelloWorldPlugin

    About

    No description, website, or topics provided.

    Resources

    License

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published

    Languages

    0