Привет всем!
Давненько тут не был. Не прошло и 2 года :)
Хороша Java платформа. Но ее фича Hot Swap врядли может войти в список того что в ней есть хорошего. Hot Swap к сожалению не поддерживает structural replace в коде и если вы меняете что-то выходящее за рамки одного метода то придется все перекомпилировать заново и что еще хуже перезапускать приложение (будь то web приложение или еще какое либо другое).
Далеко не всегда можно обойтись одними автоматизированными тестами и по минимуму перезапускать приложение "гоняя" тесты, которые во много раз быстрее отработают чем цикл "внесли change - остановили контейнер - запустились снова - посмотрели что вышло в итоге.
Стресс от того, что приходится делать перезапуск снова и снова никуда не уходит и сильно мешает держать рабочий темп продвигая разработку вперёд. Есть большая вероятность Atl-Tab-нуться на любимый велоблог и там остаться на полчаса-часик-полдня :) (Tomcat уже давно перезапустился и грустит в одиночестве).
К нашему счастью, есть проект DCEVM (http://dcevm.github.io). Кто там от кого fork-нулся уже не разобрать, но проект в актуальном состоянии и jar-ник скачанный оттуда установился успешно на моей системе.
Суть: DCEVM "патчит" ваш JDK расширяя возможности Hot Swap.
Есть возможность вернуть всё назад есть вдруг что-то не устраивает.
Я успешно пропатчил свою 1.7 update 55. (для 1.8 тоже можно).
До этого еще уставил плагин http://plugins.jetbrains.com/plugin/7245 для IDEA который как-то должен взаимодействовать с пропатченной VM.
Его роль для меня осталась загадкой и есть чувство что и без него будет работать как надо.
Всё! Запускаем Tomcat (или что там у вас?) вносим правки в код -> SHIFT-CTRL-F9 -> "Tomcat reloaded XXX classes". Невиданные доселе числа классов, которые он перезагрузил заново. Сэкономленные на перезапуске часы работы.
UPDATE: "Hierarchy changes not implemented".
Мой класс наследовал другой, а после рефакторинга стал "implement Serializable".
Не все коту Масленица. Это я версию "full" "накатывал" на мою VM. Лайтовая, видимо, еще слабее. Но, тем не менее, число перезагрузок приложения уменьшилось на порядок.
По мотивам:
http://dcevm.github.io/
http://blog.jetbrains.com/idea/2013/07/get-true-hot-swap-in-java-with-dcevm-and-intellij-idea/
P.S. время потраченное на настройку окупится с лихвой.
P.P.S. возможны баги, конечно, так что "на ваш страх и риск".
Пока!
Давненько тут не был. Не прошло и 2 года :)
Хороша Java платформа. Но ее фича Hot Swap врядли может войти в список того что в ней есть хорошего. Hot Swap к сожалению не поддерживает structural replace в коде и если вы меняете что-то выходящее за рамки одного метода то придется все перекомпилировать заново и что еще хуже перезапускать приложение (будь то web приложение или еще какое либо другое).
Далеко не всегда можно обойтись одними автоматизированными тестами и по минимуму перезапускать приложение "гоняя" тесты, которые во много раз быстрее отработают чем цикл "внесли change - остановили контейнер - запустились снова - посмотрели что вышло в итоге.
Стресс от того, что приходится делать перезапуск снова и снова никуда не уходит и сильно мешает держать рабочий темп продвигая разработку вперёд. Есть большая вероятность Atl-Tab-нуться на любимый велоблог и там остаться на полчаса-часик-полдня :) (Tomcat уже давно перезапустился и грустит в одиночестве).
К нашему счастью, есть проект DCEVM (http://dcevm.github.io). Кто там от кого fork-нулся уже не разобрать, но проект в актуальном состоянии и jar-ник скачанный оттуда установился успешно на моей системе.
Суть: DCEVM "патчит" ваш JDK расширяя возможности Hot Swap.
Есть возможность вернуть всё назад есть вдруг что-то не устраивает.
Я успешно пропатчил свою 1.7 update 55. (для 1.8 тоже можно).
До этого еще уставил плагин http://plugins.jetbrains.com/plugin/7245 для IDEA который как-то должен взаимодействовать с пропатченной VM.
Его роль для меня осталась загадкой и есть чувство что и без него будет работать как надо.
Всё! Запускаем Tomcat (или что там у вас?) вносим правки в код -> SHIFT-CTRL-F9 -> "Tomcat reloaded XXX classes". Невиданные доселе числа классов, которые он перезагрузил заново. Сэкономленные на перезапуске часы работы.
UPDATE: "Hierarchy changes not implemented".
Мой класс наследовал другой, а после рефакторинга стал "implement Serializable".
Не все коту Масленица. Это я версию "full" "накатывал" на мою VM. Лайтовая, видимо, еще слабее. Но, тем не менее, число перезагрузок приложения уменьшилось на порядок.
По мотивам:
http://dcevm.github.io/
http://blog.jetbrains.com/idea/2013/07/get-true-hot-swap-in-java-with-dcevm-and-intellij-idea/
P.S. время потраченное на настройку окупится с лихвой.
P.P.S. возможны баги, конечно, так что "на ваш страх и риск".
Пока!