Как стать автором
Обновить

Комментарии 17

Хорошая вещь. Только «в консоле» слегка режет глаз )))

Я правильно понимаю, что на уровне VM только и исключительно замена байткода и ресурсов, и ничего более? Т.е. все что дальше (скажем, перезагрузка контекстов Spring) — это делают агент(ы)? Специальные для каждого фреймворка. И по-моему, тут иначе и никак?
Верно! DCEVM обеспечивает «горячую замену» байткода, а агент в свою очередь заботится о различных фреймворках, список поддерживаемых на данный момент можно посмотреть здесь.

Близко к этому… Хотсвап-агент поставляется с набором библиотек-агентов, которые при старте ищут свои фреймворки и нициализируются в среде… но если изменения кода проглатываются на ура, то с аннотациями в перезагружаемых классах не всётак радужно… Ни спринг, ни jackson на них у меня не реагируют (возможно старая версия хотсвапа — годовой давности).

Я бы этого и не ожидал, если честно. Ну прикиньте, есть у вас запущенное Spring-приложение, которое уже в какой-то момент просмотрело классы в поисках аннотаций, и что-то с ними сделало. Это был один этап жизненного цикла приложения, и он уже выполнен. И тут мы хотим часть приложения подменить.


Как предлагается вернуться к этапу, который уже завершен? По-хорошему, тут нужно только рестартовать приложение (Spring контекст), и ничего больше.


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

То, как он работает в других местах заставляет надеяться...

Методы, заинлайненные jit'ом, (всякие простые геттеры/сеттеры, например) тоже заменяются?
Это даже и при обычной перегрузке работает.

Фишка DCEVM в возможности делать произвольные изменения классов (*).

[*] На самом деле, есть несколько ограничений. Можно добавлять интерфейсы к классу, но нельзя менять базовый класс и удалять интерфейсы. Можно добавлять/удалять поля класса, но статические поля не будут должным образом проинициализированны. Сборщик мусора поддерживается только один (хотя для отладки это не столь важно). Есть некоторые проблемы со стабильностью.

Сама большая проблема DCEVM — проект никуда особо не движется и какие у него перспективы (особенно с учётом выхода Java 9) — непонятно.
Попробовал на своем текущем проекте и столкнулся с проблемами. Перестали работать транзакции (проект на Spring + Hibernate). Погуглив наткнулся на баг. Судя по комментариям проблема в Hibernate плагине.
Спасибо за Ваш комментарий, да для некоторых фреймворков есть текущие баги, можно попробовать отключить плагин для Hibernate, как это описано в тикете, но для этого придется запускать данный агент вторым способом, как это описано здесь. На данный момент плагин для IntelliJ IDEA не поддерживает возможность через конфигурацию включать или отключать отдельные плагины. Мы обязательно добавим эту возможность в одной из следующих версий.
придется запускать данный агент вторым способом, как это описано здесь.
Давно использую Ctrl+F9 в идее, и вроде как хватает перезагрузки тела методов для мелких изменений. А вот про DCEVM не слышал, спасибо за наводку!

Давно хотел задаться вопросом поиска более "Hot" Swap, но Java не мой основной профиль и как-то все недосуг. Прочитал вашу статью, настроил и прям работает, удобно. Спасибо.

Спасибо, приятно это слышать!
К сожалению, нельзя использовать на последних билдах 14й Идеи… Покупать новую идею или пиратствовать не хочется. Есть ли возможность сделать билд и под ранние версии?

hibissscus
Здравствуйте. Случайно наткнуллся на ваш инструмен для замены springloaded, который у меня на JDK 11 b Spring Boot 2.1 падает…
Скажите пожалуйста, для JDK 11 я понял агент встроен? И установка плагина не требуется? Бины спринга подхватываются?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации