Pull to refresh

Comments 7

В Java 6 появился SPI. Можно на лету поменять, например, используемый фасад логирования.

Ну, в контексте релоада в процессе разработки это все-таки вряд ли применимо. Хотя может как-то и применимо, но, полагаю, с большой болью )) Отдает чем-то OSGi-шным таким.

Давно хочу запушить в Play правку, позволяющую режим разработки запускать без hot reload'а, так как он подкидывает огромное количество странных и неожиданных глюков. Помню, один из молодых разработчиков моей команды очень расстроился, убив день на отладку элементарного запроса к БД, который почему-то не выбирал нужные данные. Оказалось, что для работы с перечислениями ORM под капотом использует Apache OGNL, который никак не ожидает, что перечисление может быть не равно само себе. А оно может, если загружено разными class loader'ами.

Насчет разных класслоадеров да, ну, это классика с релоадом такого типа, причем уверен, что это всё воспроизвелось бы не только в плее, но и во всех остальных фреймворках. Ну, может только бы не воспроизвелось там, где сервисы находятся в персистент-класслоадере, но это тоже далеко не везде. Плей, к слову, по идее должен всё релоадить, т.е. дропать весь юзер-код. Если этого не происходит, то скорее всего что-то с предыдущего релоада корректно не дропнулось и просто повисло в памяти (ну, по крайней мере, это самая частая причина). Именно поэтому ещё он часто на N-нном релоаде просто падает с OOM, потому что предыдущие generations как бы не дропаются, а просто создаются новые. Как я замечал, обычно все просто забивают на это и живут как есть, даже не понимая, почему релоад нестабильный. Ну, к слову, это и неудивительно, потому что откуда бы вообще об этом кто-то знал )

А запустить Плэй без релоада: там же есть, насколько я вкурсе, классы DevServerStart и ProdServerStart. Вот DevServerStart он даже без static void main и его стартует по своему именно плеевский плагин, там самому его особо никак не отранить нормально. Но вот если ProdServerStart просто задать как мэйн класс и стартовать как и любое другое приложение через sbt run, java Main и т.д, то по идее же будет всё норм? Или там всё-таки нужно им какие-то правки пушить?

P.S. С jvm-live-reload, на всякий случай уточню, таких проблем нет 👍 Тут можно если что вдруг просто стартовать свой мэйн класс как обычно.

В OpenJDK Instrumentation API и JDI реализованы поверх JVMTI.

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

Плюс вы практически не получаете никаких неожиданных спец-эффектов (тех, что может найти среднестатистический разработчик - точно).

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

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

Sign up to leave a comment.

Articles