Важным мотивом наличия EJB-компонентов в отдельном JAR-файле является старое разделение бизнес-логики и логики представления .
Поскольку EJB-компоненты должныКонцентрируясь исключительно на бизнес-логике, имеет смысл поместить их в отдельный модуль.
Это именно то, что облегчает традиционный Java Enterprise Archive.EJB-компоненты помещаются в файл JAR, представляющий EJB module
, в то время как связанные с сетью артефакты (Facelets, вспомогательные компоненты, код служебной программы) попадают в файл веб-архива (WAR), который представляет Web module
.Обратите внимание, что WAR на самом деле не должен быть файлом.В так называемом разобранном формате они являются просто каталогами.
Ключевым аспектом этого разделения является то, что эти два модуля изолированы посредством иерархии загрузчиков классов.Web module
имеет доступ к ресурсам (обычно bean-компонентам) из EJB module
, а EJB module
может ссылаться на ресурсы (обычно библиотеки), определенные в общем зонтике EAR.Другое направление невозможно.В частности, EJB module
не может получить доступ ни к каким ресурсам, определенным в Web module
.
. Это принудительное применение является преднамеренным.
Бизнес-логика должна быть полностью независимой от любой технологии представления ,Применение этой изоляции не позволяет разработчикам случайно или под давлением смешивать эти проблемы в любом случае.Преимущества этого разделения состоят в том, что бизнес-логика может тривиально использоваться среди других клиентов Java SE, клиентов Web-модулей, клиентов JAX-RS и т. Д. Если бы у бизнес-логики случайно были зависимости JSF или Servlet, ее было бы очень трудно использовать.из клиентов Java SE.
Сравните это с Facelets, не позволяющими использовать скриптлеты.Это обеспечивает чистоту Facelets и позволяет сосредоточиться исключительно на компоновке и разметке компонентов.Другая аналогия - кодирование интерфейсов, которое отделяет контракт от реализации.
Таким образом, наличие отдельного модуля EJB на самом деле является лучшей практикой .Однако ...
Для небольших проектов такое разделение может быть необязательным, а начинающим программистам может быть трудно обернуть голову вокруг структуры того, что и куда нужно идти.Таким образом, устранение обязательного разделения облегчает неопытным разработчикам начинать с Java EE.Это дает им мягкое введение в Java EE, и позже, как только они получат идею о наслоении, они могут в любом случае принять решение EJB module
.