Назад в библиотеку

Сравнительный анализ стеков технологий Spring и JavaEE (JakartaEE) для разработки Enterprise–приложений

Автор: Нарижный А.Д., Губенко Н.Е.
Источник: Информатика, управляющие системы, математическое и компьютерное моделирование в рамках VI форума Инновационные перспективы Донбасса (ИУСМКМ – 2020): XI Международная научно-техническая конференция, 27-28 мая 2020, г. Донецк: / Донец. национал. техн. ун-т; редкол. Ю.К. Орлов и др. – Донецк: ДонНТУ, 2020. – с. 459 – 462.

Аннотация

Нарижный А.Д., Губенко Н.Е. Сравнительный анализ стеков технологий Spring и JavaEE (JakartaEE) для разработки Enterprise–приложений. В данной статье проведен сравнительный анализ технологий, которые имеют схожую функциональность и которые предназначены для одних и тех же задач. Это технологии стеков Spring и JavaEE, которые предназначены для разработки Enterprise-приложений.

Введение

В связи с тем, что технологии Spring и JavaEE на рынке разработки высоконагруженных Enterprise-приложений, содержащих бизнес-логику, уже более 10 лет, начинающим специалистам сложно выбрать, на что же именно обратить своё внимание при изучении данной предметной области. Также уже опытным разработчикам бывает сложно выбрать на этапе проектирования, какой же именно стек технологий использовать для построения архитектуры приложения. Данная статья предназначена для внесения ясности и помощи в поисках ответов на эти вопросы.

Цель статьи

Рассмотреть стеки технологий для разработки Enterprise-приложений, провести сравнительный анализ их составляющих, схожих по функциональности.

Enterprise-приложения

Enterprise-приложения — это корпоративные приложения, которые используются крупными компаниями в коммерческих целях для решения своих корпоративных задач, они имеют высокую надежность и производительность работы, и разрабатываются на длительный срок эксплуатации.

Такие приложения представляют собой преимущественно веб-приложения с клиентсерверной или трёхслойной архитектурой, где клиент взаимодействует с веб-сервером при помощи браузера, логика приложения расположена на сервере, а данные, в зависимости от архитектуры, хранятся на сервере или в специально выделенной базе данных, обмен информацией происходит по сети. Преимуществом такого подхода является то, что нет зависимости от операционной системы пользователя, поэтому веб-приложения являются кроссплатформенными.

Стек JavaEE

Предпосылкой Java EE был проект JPE Project, который стартовал в мае 1998 года. А в декабре 1999 года вышел релиз платформы Enterprise Java Platform (J2EE 1.2), которая объединяла такие компоненты как сервлеты (Servlets), JSP (Java Server Pages), EJB (Enterprise Java Beans), JMS (Java Message Service). В 2006 году с выходом 5-й версии она была переименована в Java Enterprise Edition (JEE). С тех пор периодически выходят новые версии платформы. Последняя версия — Java EE 8, она вышла 18 сентября 2017 года.

Также в 2017 году произошел новый этап в развитии платформы: Oracle передала контроль над развитием Java EE организации Eclipse Foundation. С тех пор все изменения в составляющих платформы контролируются организацией, которая называется Java Community Process (JCP), вступить в неё может любой желающий, нужно просто зарегистрироваться на сайте. Для физических лиц регистрация и вступление бесплатны, а для компаний платны. После вступления в организацию можно предлагать любые изменения, и они будут вынесены на рассмотрение и голосование. В голосованиях голоса компаний весомее, чем голоса физических лиц. В апреле 2018 года Java EE была переименована в Jakarta EE, это было сделано во избежание путаницы с другими продуктами Oracle и Eclipse Foundation.

На рисунке 1 представлена схема стандартного монолитного приложения, написанного на стеке технологий JavaEE.

Рис. 1 – Схема стандартного приложения на JavaEE

Рис. 1 – Схема стандартного приложения на JavaEE

Стек Spring

Spring Framework (или коротко Spring) — универсальный фреймворк с открытым исходным кодом для платформы Java. Также существует форк для платформы .NET Framework, названный Spring.NET.

Первая версия была выпущена в марте 2004 года, последней версией является версия 5.2.2, она вышла 3 декабря 2019 года. Spring предоставляет хорошо документированные и лёгкие в использовании средства решения проблем, возникающих при создании Enterpriseприложений. Также он обеспечивает решения многих задач, с которыми сталкиваются Javaразработчики и организации, которые хотят создать информационную систему, основанную на платформе Java. Этот фреймворк предлагает последовательную модель и делает её применимой к большинству типов приложений, которые уже созданы на основе платформы Java. Считается, что Spring реализует модель разработки, основанную на лучших стандартах индустрии, и делает её доступной во многих областях Java. На рисунке 2 представлены наиболее часто используемые для разработки Enterprise-приложений технологии стека Spring.

Попарное сравнение стеков

Сравним попарно технологии стеков Spring и JavaEE, которые решают одни и те же задачи.

Spring DI (Dependency Injection) vs Context Dependency Injection (CDI)

Рис. 2 – Наиболее часто используемые технологии фреймворка Spring

Рис. 2 – Наиболее часто используемые технологии фреймворка Spring

Значительных отличий в данных технологиях нет, ядра в обоих стеках идентичны по характеристикам. Это связано с тем, что изначально в стеке JavaEE использовался как раз Spring Dependency Injection, который на тот момент являлся отдельной, свободно подключаемой к любому проекту, библиотекой. Было так до того момента, пока он не был добавлен в библиотеку Spring Core, которую можно подключить только к Spring-проекту. После этого использовать его отдельно стало невозможным, в связи с чем, разработчикам JavaEE пришлось написать своё собственное решение по образу Spring DI, которое впоследствии было названо Context Dependency Injection.

Spring Beans vs Enterprise Java Beans (EJB)

Здесь ситуация абсолютно противоположная. Spring Beans — стандартная технология языка Java, а Enterprise Java Beans — это полноценная мощная технология, которая поддерживает распределенное исполнение, что позволяет легко масштабировать приложение и это позволяет ему выдерживать высокие нагрузки. Данная технология также имеет распределенный сборщик мусора, аутентификацию, поддержку транзакций и много всего. Но не в каждом приложении есть необходимость это всё использовать.

Spring Service Locator vs Java Naming and Directory Interface (JNDI)

Spring Service Locator позволяет найти в Java Virtual Machine нужный сервис. В то время как JNDI — это API, который организован в виде набора каталогов, он позволяет открывать и просматривать объекты и данные по их именам, не зависит от нижележащей реализации. Также эта технология предоставляет реализацию Service Provider Interface (SPI), которая позволяет службам каталогов работать в паре с различными фреймворками, может работать на распределенной системе. Формально, данные технологии предназначены для одного и того же, но, как и в предыдущем случае, технология стека JavaEE является более мощной и предоставляет больший функционал.

@Async vs Java Message Service (JMS)

Данные технологии предназначены для асинхронной работы модулей приложения. Преимуществами @Async является простота и быстродействие, а преимуществами JMS является отказоустойчивость, возможность распределенной работы и отправки сообщений многим получателям. Также технология JMS предоставляет больший функционал.

Spring Data vs Java Persistence API (JPA)

Данные технологии предназначены для работы с базами данных, как SQL, так и NoSQL, помещения в них объектов, извлечения и удаления. Spring Data превосходит JPA, она работает намного быстрее, более удобна и проста.

Spring Security vs Java Authentication and Authorization Service (JAAS)

Единственным преимуществом JAAS над Spring Security является распределенная работа, во всем остальном Spring Security превосходит конкурента во всём. Она имеет больший функционал для обеспечения безопасности приложения и более проста в работе.

Spring MVC vs Java Server Faces (JSF)

Данные технологии одинаково удобны и просты в использовании. При разработке Enterprise-приложений на стеке Spring обычно используют либо связку Spring MVC+Thymeleaf, либо Spring MVC+Front-end движок, например React, Angular и т.д. А при разработке на стеке JavaEE обычно используют связку JSF+библиотека PrimeFaces или IceFaces. Ключевым моментом при выборе технологии является техническое задание, предполагает оно использование технологии AJAX или нет. Если данную технологию использовать не нужно, то выбор зависит от технологического стека разработчиков и опыта работы с различными стеками технологий. Но, если нужно использовать данную технологию, то более приоритетно выбрать стек JavaEE, так как Spring MVC не поддерживает технологию AJAX. Конечно, разработчики могут написать её сами, но это будет очень затратно по времени и ресурсам, а также команде Java разработчиков понадобится помощь Frontend разработчика.

Spring Boot vs Enterprise Server

Данное сравнение не является сравнением технологий, оно является сравнением решений, которые предназначены для одних и тех же задач. Spring Boot — это отдельная библиотека, предназначенная для согласования работы библиотек стека Spring и упрощения создания приложений на данном стеке технологий. А Enterprise Server — это программное обеспечение для работы Enterprise-приложений на серверах. Но выполняют они одну и ту же задачу — подключение и согласование версий нужных для работы приложения библиотек. Нельзя сказать какая технология лучше, а какая хуже, так как каждая из них работает исключительно в рамках своего стека и выполняет одни и те же функции.

Выводы

Не нужно делать все приложения, используя технологии только одного какого-то стека, так как стеки Spring и JavaEE предназначены для разного вида приложений. Spring лучше всего подойдёт для микросервисной архитектуры или для совсем маленьких приложений, а JavaEE лучше всего подойдёт для монолитных приложений, которые нужно масштабировать. Также нужно заранее продумывать технологии, которые будут использоваться в приложении, так как в данное время AJAX — очень важная и многим нужная технология, поддержки которой, на данный момент, в стеке Spring нет. Её нужно либо писать самим, что заберёт много времени, либо всё-таки писать приложение на стеке JavaEE.

Список использованной литературы

1. Spring Data JPA/Хабр [Электронный ресурс]. – Режим доступа: https://habr.com/ru/post/435114/
2. AJAX [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/AJAX
3. Spring Guides [Электронный ресурс]. – Режим доступа: https://spring.io/guides
4. JavaEE [Электронный ресурс]. – Режим доступа: https://javaee.github.io/
5. Введение в основы EJB3 [Электронный ресурс]. – Режим доступа: https://devcolibri.com/введение-в-основы-ejb3/