Продолжая «оперировать» Play Framework в процессе реализации своего первого веб-приложения наткнулся на очень интересный материал «Play, Anatomy of a web framework» (серия статей).
Автор рассказывает про внутренности фреймворка. От запуска приложения, через обработку реквеста и респонса, до сущности changes hot reload (Hot redeploy, моментальной перезагрузки ваших изменений в коде в дев окружении без необходимости что-то пересобирать/перезапускать).
Если первая часть, упомянутая по ссылке выше, рассказывает про последовательность действий, которая происходит при запуске веб-сервера, то во второй части мы уже видим, какой ценой разработчики фреймворка добились того, что мы меняем java-файл, нажимаем в браузере F5 и тут же видим наши изменения. Основная идея: Play очень легкий компонент, который легко перезагрузить, Play — stateless компонент (не хранит состояний между запросами), т.е. можно легко уничтожить объекты/классы и создать их заново в процессе рестарта, ибо ничего не теряется.
Третья статья раскрывает секреты роутинга. Все, что мы пишем в файлу routes, трансформируется в обычный scala код, поэтому так прекрасно работает type safe в IDE и вообще все просто.