Комментарии 17
Я правильно понимаю, что на уровне VM только и исключительно замена байткода и ресурсов, и ничего более? Т.е. все что дальше (скажем, перезагрузка контекстов Spring) — это делают агент(ы)? Специальные для каждого фреймворка. И по-моему, тут иначе и никак?
Близко к этому… Хотсвап-агент поставляется с набором библиотек-агентов, которые при старте ищут свои фреймворки и нициализируются в среде… но если изменения кода проглатываются на ура, то с аннотациями в перезагружаемых классах не всётак радужно… Ни спринг, ни jackson на них у меня не реагируют (возможно старая версия хотсвапа — годовой давности).
Я бы этого и не ожидал, если честно. Ну прикиньте, есть у вас запущенное Spring-приложение, которое уже в какой-то момент просмотрело классы в поисках аннотаций, и что-то с ними сделало. Это был один этап жизненного цикла приложения, и он уже выполнен. И тут мы хотим часть приложения подменить.
Как предлагается вернуться к этапу, который уже завершен? По-хорошему, тут нужно только рестартовать приложение (Spring контекст), и ничего больше.
Т.е. в такой ситуации ожидать совсем уж полноценной работы HostSwap не стоит.
Фишка DCEVM в возможности делать произвольные изменения классов (*).
[*] На самом деле, есть несколько ограничений. Можно добавлять интерфейсы к классу, но нельзя менять базовый класс и удалять интерфейсы. Можно добавлять/удалять поля класса, но статические поля не будут должным образом проинициализированны. Сборщик мусора поддерживается только один (хотя для отладки это не столь важно). Есть некоторые проблемы со стабильностью.
Сама большая проблема DCEVM — проект никуда особо не движется и какие у него перспективы (особенно с учётом выхода Java 9) — непонятно.
Давно хотел задаться вопросом поиска более "Hot" Swap, но Java не мой основной профиль и как-то все недосуг. Прочитал вашу статью, настроил и прям работает, удобно. Спасибо.
Eще есть spring-loaded.
hibissscus
Здравствуйте. Случайно наткнуллся на ваш инструмен для замены springloaded, который у меня на JDK 11 b Spring Boot 2.1 падает…
Скажите пожалуйста, для JDK 11 я понял агент встроен? И установка плагина не требуется? Бины спринга подхватываются?
Практический опыт использования настоящего HotSwap