Многие согласятся, что Dropwizard — один из лучших новых фреймворков для Java-сервисов, и инженеры Twilio определенно с этим согласны. Большая часть мира Java уже отказалась от Java Enterprise Edition (JEE), но что, если вам *нужно* развернуть приложение на сервере JEE? Останетесь ли вы привязаны к старому JEE?
Коду Хейлу стало бы тошно от этого, но мы решили, что можем и рыбку съесть, и на елку влезть. Мы создали WizToWar — простую библиотеку-утилиту, которая позволяет вам наслаждаться всеми преимуществами Dropwizard, создавая при этом развертываемые WAR-файлы для сервера JEE.
Но зачем вообще разворачивать на сервере JEE? После того как вы привыкли к простоте и управляемости сервисов Dropwizard, возвращение к серверу JEE может свести с ума. (Именно в этот момент сторонники JEE 6/7 начнут яростно возражать). Наши сервисы также должны поддерживать SIP-подключения, и мы пришли к выводу, что API SIP Servlets (JSR-289) — наиболее подходящий API для этого. Если у вас аллергия на JEE, именно здесь появится сыпь — JSR-289 поддерживается только в средах JEE, интегрированных с серверами приложений JEE, такими как Websphere, JBoss, Weblogic и Tomcat. И, к сожалению, пока не существует контейнера SIP Servlets, интегрированного с Dropwizard.
Наша потребность и любовь к SIP, к сожалению, заводят нас в кроличью нору JEE. Для других это могут быть корпоративные политики, устаревшие среды или просто требования к интеграции.
Что вообще такое Dropwizard? С одной стороны, Dropwizard — это «JEE, только хорошие части», поскольку он грамотно переиспользует open-source реализации ключевых спецификаций JEE, включая HTTP Servlets (Jetty), JAX-RS (Jersey) и Java Bean Validation (Hibernate Validator).
Однако то, что отличает Dropwizard от JEE, — это то, как он позволяет одному автономному Java-приложению предоставлять стандартизированное управление жизненным циклом, метрики, мониторинг и проверки работоспособности без использования отдельного сервера. Приложения Dropwizard подключаются к собственным API Dropwizard для конфигурации, управления жизненным циклом и мониторинга.
Так что Dropwizard — это более молодой на 15 лет, стройный и красивый кузен JEE с собственным мнением. Если бы они встретились на улице, Dropwizard сделал бы вид, что не знает JEE.
Если вы просто измените упаковку вашего приложения Dropwizard на «war» и попытаетесь развернуть получившийся WAR, к сожалению, ничего не произойдет.
WizToWar исправляет это, выступая в роли клея, который подключается к жизненному циклу WAR, инициализирует и передает сервису Dropwizard его конфигурацию, а также регистрирует его сервисы (сервлеты, ресурсы Jersey и проверки работоспособности) в окружающем сервере JEE.
WizToWar по сути эмулирует то, что происходит при запуске команды «server» для приложения Dropwizard, и транслирует это на сервер JEE.
С помощью WizToWar вы можете создать обычный сервис Dropwizard и WAR из одного исходного кода — в одной сборке.
Вам нужно лишь добавить класс-адаптер, файл конфигурации (web.xml) и некоторые дополнительные инструкции сборки (чтобы также сгенерировать WAR). Подробные инструкции по началу работы можно найти на GitHub, где мы размещаем этот open-source проект.
WizToWar позволяет нам продолжать стандартизировать модель программирования Dropwizard даже для сервисов, требующих SIP-подключений, и в процессе оптимизировать то, как мы управляем, настраиваем и разрабатываем как SIP, так и HTTP-сервисы.