среда, 20 мая 2015 г.

Java Hot Swap почти без недостатков

Привет всем!

Давненько тут не был.  Не прошло и 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. возможны баги, конечно, так что "на ваш страх и риск".

Пока!

Комментариев нет:

Отправить комментарий