Разработка Java EE или Jakarta EE на поддерживаемых российских технологиях

Рассказали про российский сервер приложений Libercat для Java EE, про проблемы, которые он решает, и про перевод на него приложений.

Обложка поста Разработка Java EE или Jakarta EE на поддерживаемых российских технологиях

Россия славится своими банками, документооборотом, цифровыми услугами и прочим хайтеком. Многое из этого написано на Java. В особенности, всё, что у безопасников именуется термином Критическая Информационная Инфраструктура. Один из главных фреймворков в Java-мире на бэкенде – набор спецификаций и Java EE / Jakarta EE и их реализаций на основе библиотек внутри так называемых “серверов приложений”.

В прошлом году у серверов приложений типа IBM WebSphere и Oracle WebLogic исчезла поддержка. Перед нами в полный рост встал вопрос: на чем же мы будем запускать на проде приложения Java EE? Если что-то сломается внутри сервера приложений, обычный Java-разработчик не сможет ничего поправить внутри сложного закрытого бинарника от Oracle. Не говоря уж о том, что сервера приложений написаны совершенно не так, как типичное приложение на Spring Boot, и их починка выходит далеко за компетенцию Java-разработчиков, Java-сисадминов или даже SRE-девопс-инженеров-генералистов. Дистрибутивы Java так и вовсе, в значительной степени, написаны на C++ и ассемблере.

Решением вопроса может стать российский сервер приложений Libercat. Поговорим подробнее, какие проблемы он решает, как устроен изнутри, и как перевести на него наши приложения.

Какие проблемы решает Libercat

Есть три основные проблемы, с которыми встречаются разработчики для критически важных сервисов: поддержка, сертификация и совместимость.

В мире существует много опенсорса, который разрабатывает сообщество. Но поддерживать специально для нас все эти проекты сообщество не станет. Особенно, если у нас только что лёг прод, или нашлась критическая уязвимость, и решение нужно максимум за пару суток. Разработчики Libercat физически находятся в Санкт-Петербурге и предоставляют строгие SLA. Например, на интеграцию патчей уязвимости (которые уже известны в сообществе) это всего 2 суток.

Какой-то части российских компаний нужно использовать софт только из Реестра, и иметь сертификацию регулятора ФСТЭК — это Федеральная служба по техническому и экспортному контролю. Libercat уже есть в Реестре Российского ПО и имеет исполнение, сертифицированное по 4 уровню доверия ФСТЭК. Это значит, что его можно использовать в самых серьезных проектах, включая Критическую Информационную Инфраструктуру.

Совместимость бывает программная и аппаратная. Программная совместимость заключается в том, что Libercat реализует большинство актуальных спецификаций Java EE / Jakarta EE и значит, на нем могут без проблем запускаться приложения, написанные строго по спецификации. Кроме того, он уже поставляется со своим Java-рантаймом — Axiom JDK. Axiom JDK, в свою очередь, запускается на российских операционных системах и российских процессорах, и имеет готовые базовые образы для Docker. Значит, вы можете запустить ваше приложение в российских облаках или на своем железе, и все должно просто работать.

Что происходит под капотом

Libercat существует в двух вариантах: Libercat и Libercat EE. Названия намекают на то, какие наборы спецификаций они реализуют, и на каких открытых платформах они построены.

Libercat основан на Tomcat — самом популярном в Java-мире сервлет-контейнере. Он реализует самый базовый набор технологий: Servlets, JSP, Expression Language, WebSocket и аутентификацию через JASPIC. Это нужно для минимизации используемых ресурсов для приложений, которым нужен самый минимум.

Если же вам нужен полный стек технологий, то вам поможет Libercat EE, который основан на популярном опенсорсном проекте TomEE (в одной из его самых навороченных конфигураций – TomEE Plus). Здесь вам доступны плюшки вроде EJB, CDI, JPA, JSTL, JSF, JTA, JAX-RS, JAXB, JMS, JAX-WS, JWS, SAAJ, и все остальные сложные аббревиатуры, так полюбившиеся Java EE разработчикам.

Сервер приложений сам по себе является Java-приложением. Значит, для запуска ему нужен дистрибутив Java. Такой дистрибутив уже идет в комплекте с Libercat и называется Axiom JDK. Этот российский дистрибутив полностью совместим со спецификациями языка и виртуальной машины, и всеми стандартами на Java-дистрибутивы. На выбор есть все популярные LTS версии Java, включая самую свежую Java 21.

Как перейти на отечественный сервер приложений

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

При переходе на Libercat возникают два самых частых вопроса: что если я использую Spring Boot, и что если мы пользуемся закрытыми коммерческими технологиями от Oracle и IBM?

Самая сложная часть — это закрытые технологии. Libercat (и его основа — TomEE) весят меньше 100 мегабайт, а WebLogic — больше полутора гигабайт. Oracle и IBM хорошо постарались, чтобы с их решений было максимально сложно слезть. Наборы спецификаций тоже могут отличаться: например, Transaction Propagation нет в TomEE, но есть в части других серверов.

Чудес не существует, и эти куски приложений придется переписать. К счастью, среди существующих опенсорсных решений легко можно найти замену большой части такой функциональности. По крайней мере, замену по смыслу — код все равно придется написать новый. Стандарты Jakarta EE тоже не стоят на месте: например, Timer вошел в свежие стандарты, и от замены импорта с weblogic.timer на jakartaee.timer, скорей всего, ничего не изменится.

А еще, у Libercat есть поддержка, с которой можно связаться и попросить совета в миграции. Поддержка Libercat — опытные разработчики Java-платформы, которым можно задавать самые сложные вопросы про работу Java. Разработчики Libercat учитывают всю обратную связь. В ходе такого диалога, например, появился проект по интеграции менеджера транзакций Narayana.

С другой стороны, со Spring Boot всё гораздо проще. Внутри него работает сервер Tomcat Embedded, а значит, переход на Libercat делается изменением конфигурации в pom.xml. Вы прописываете там свойство tomcat.version, совпадающее с одной из имеющихся версий Libercat, подключаете закрытый Maven-репозиторий (логин и пароль выдают вам разработчики Libercat) и перезапускаете сборку проекта. Дальше всё происходит само собой: библиотеки Libercat подхватываются стандартными средствами Maven и внутренней логикой стартеров Spring. Настраивать такой сервер можно через файл application.properties и другие способы, к которым мы привыкли в Spring и Spring Boot.

Выводы

Все вместе это означает, что если ваша задача — получить привычную, поддерживаемую, максимально стандартную среду разработки для Java EE и Jakarta EE, то Libercat идеально подходит под эти требования. Сервер приложений включен в Реестр российского ПО, запускается на российских операционных системах и имеет сборку, сертифицированную во ФСТЭК по 4 уровню доверия, которая станет доступна в ближайшее время. Так что вопрос с сертификациями тоже можно считать закрытым.

Несмотря на то, что поддержка для старых серверов приложений типа WebLogic и WebSphere больше недоступна, это можно рассматривать как точку роста. Это наш шанс мигрировать с закрытых технологий на спецификации Java EE/Jakarta EE. Это может быть хорошей инвестицией в будущее – в разработку надежных долгосрочных проектов с кодовой базой, которая проживет не один год.

Java
Open Source
269