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