Undertow 2 не поддерживает механизм плагинов Servlet 4.0
Согласно 8.2.4 спецификации Servlet 4.0, все совместимые контейнеры должны реализовывать механизм подключаемых модулей, предоставляемый javax.servlet.ServletContainerInitializer
и Undertow действительно рекламируется как таковой на главной странице, но он этого не делает (хотя на самом деле механизм существует с версии 3.0).
Его можно легко воспроизвести, создав приложение с поддержкой CDI с сервлетом Weld и попытавшись развернуть его во встроенном Undertow. Хотя Weld предоставляет SPI для ServletContainerInitializer
, CDI не будет включен, если org.jboss.weld.environment.servlet.Listener
вручную добавляется к соответствующему DeploymentInfo
дескриптор.
Это нарушает совместимость спецификаций, и я видел все виды обходных путей на github (например, https://github.com/StephanSchrader/undertow-jaxrs-cdi), компенсирующие это поведение, из-за которого у меня кровоточат глаза, такие не могут быть использованы в производстве. Здесь также задан вопрос ( Embedded JAX-RS CDI (Undertow, RestEasy & Weld)), который приводит к еще одному из таких хаков, но не содержит надлежащего объяснения причинности.
Я хотел бы услышать от разработчиков Undertow: это намеренно, это когда-нибудь будет исправлено? Undertow jira содержит множество критических ошибок, которым более полугода, и на них вообще не обращают внимания, стоит ли добавлять еще одну такую? Учитывая все это, возможно ли использовать Undertow отдельно от WildFly?