Эта диаграмма НЕ является стеком Java EE .
Это может быть полезно (или нет:):
Java EE - это управляемая среда выполнения.(У LAMP таких проблем нет.)
Java EE использует общую архитектуру контейнера компонента (LAMP не определяет явный API контейнера компонента)
Серверы приложений, такие как JBoss, Glassfish и т. Д., Предоставляют контейнер Java EE.(Tomcat не поддерживает полный стек Java EE. Tomcat и Jetty предоставляют только веб-контейнер (или веб-профиль в соответствии с последними спецификациями.))
Обратите внимание, что веб-контейнеры Java EE (сервлеты)) намного проще, чем полноценный стек Java EE, но основаны на том же архитектурном подходе.
Веб-компоненты Java EE - это (в основном) сервлеты и фильтры.Различные платформы высшего порядка (такие как Faces) построены поверх этой архитектуры.Web-контейнер Java EE является относительно простым и очень эффективным.Это ближе всего к LAMP.
Корпоративные компоненты Java EE (поддерживаемые серверами приложений Java EE, такие как GlassFish) представляют собой различные разновидности компонентов без сохранения состояния и с сохранением состояния (известные как«Фасоль» на Явской земле).
Hibernate является ORM и является избыточным в контексте полной Java EE (например, EntityBeans).Как правило, JPA используется с системами Web-контейнера "Java EE" для подключения к RDMBS, совместимому с JDBC бэкэнда.Oracle, MySQL, что угодно.
вы (и / или некоторая сторонняя библиотека) предоставляете компоненты.
Управляемая среда выполнения в первую очередь связана с заботой об «ортогональных» «корпоративных» «проблемах», таких как целостность транзакций, и вы, разработчик компонента / приложения, должны быть сосредоточенына «бизнес-логике».
Java EE управляет ссылками , границами транзакций , связностью и жизненным циклом из ваших компонентов.
Ссылки: Использование семантических ссылок, просмотренных во время выполнения с помощью механизма пространства имен, известного как JNDI и RMI;и внедрение зависимостей через декларативные дескрипторы развертывания.
Жизненный цикл: ваши компоненты будут иметь надлежащие фазы запуска, работы и завершения работы.Вы можете подключиться к этим событиям LC и участвовать в случае необходимости (как правило, не обязательно).Этот формализованный LC позволяет распределять и масштабировать архитектуру.
Связь: широкие адреса входящей (клиенты) и внутренней (EIS) точки интеграции.Для клиентов у вас есть web / RMI / JMS и т. Д. Это дает вам семантику req / rep синхронизации и асинхронный запуск и забывание.Для бэкэнда (в общем) JCA определяет соединители с другими системами.JPA - это специализация JCA (теоретически, а не практики), которая специально предназначена для EIS базы данных с пользовательским API JDBC.
Транзакции: декларативный означает применение семантики транзакций к конкретным методам компонента.Это можно сделать во время разработки (с помощью аннотаций) или во время развертывания (с помощью XML).
Пакеты развертывания
Системы Java EE обычно упаковываются как WAR (только для Интернета) или EAR (для полного стека).
Дескрипторы развертывания
Последние спецификации Java EE поддерживают операции с нулевой конфигурацией с разумными значениями по умолчанию (или тривиальными отображениями).Но вам важно обдумать, что это такое, и в какой-то момент любое серьезное приложение Java EE потребует работы с этими артефактами на определенном уровне.(Для web.xml это намного проще, так что не волнуйтесь.) Это ключевой аспект архитектуры.Понять это и все остальное очень просто.
Java EE использует косвенное указание , чтобы его магия осуществилась.Эта проблема решается здесь:
У нас есть компоненты, написанные какой-то третьей стороной (некоторое время назад), и нам нужно использовать их в нашем приложении.Дескрипторы развертывания позволяют отображать специфическую семантику вашего приложения, например, имя компонента или семантику его транзакции, в общую семантику компонентов.Например, вы можете указать «Acme-Logger» как «My-Very-Own-Logger».Это достигается путем сопоставления желаемого имени среды с классом компонента.(Исходный компонент мог иметь аннотацию, объявляющую его общее имя просто «the-logger»).
По сути, Spring возник из-за серьезной боли при создании и обслуживании этих дескрипторов отображения.Опять же, Spring - это альтернативный подход к системам на основе контейнеров.
Контейнеры
Теоретически вы должны иметь возможность подключить весь контейнер к совместимому серверу, но общая идея заключается в том, что вы пишете свои компоненты для универсальный контейнер , например, контейнер Java EE.В любом случае, как вы можете себе представить, поставщики серверов приложений Java EE не слишком хотели иметь подключаемый API-интерфейс контейнера для стека, поскольку это сделало бы их продукт полноценным.
Spring
Spring на самом деле является противоположностью Java EE.Это (или была) легкая контейнерная система для устранения болевых точек J2EE (что было совершенно неразумно без эффективного инструментария, учитывая сложную архитектуру и церемонию развертывания).По сути, внешний интерфейс Servlet и контейнер Spring являются альтернативой полноценному стеку Java EE.Тем не менее, они могут сосуществовать.
Maven
Maven - это инструмент для сборки.Также есть муравей.Или вы можете прыгнуть на Gradle.Существуют Maven архетипы , которые позволяют без особых усилий начать работу с базовым проектом Java EE.
Предложение:
Начните с (и придерживайтесь) подмножества Web-контейнера.Jetty или Tomcat - прекрасный выбор для контейнера / сервера.
Познакомьтесь с WEB-INF / и web.xml.Напишите простое расширение HTTPServlet и поэкспериментируйте с функциями web.xml.Попробуйте настроить фильтр или связать некоторые параметры с контекстом веб-приложения.Овладейте этими основами.Все остальное построено поверх них.Все.
В сервлете изучите предоставляемый API.Узнайте разницу между «контекстами» приложения, сеанса и запроса.Ключевой вопрос на веб-уровне.Узнайте, как перенаправить запросы.Получить заголовки http и т. Д. Все остальное построено на них.Освойте эти основы.
Допустим, у вас уже есть веб-приложение HelloWorld.Следующим шагом попробуйте JPA и добавьте постоянство вашему проекту.Здесь вы можете попробовать учебник Spring / Hibernate / Tomcat.Spring установит не Java-контейнер EE для ваших бизнес-компонентов (классов).Hibernate позаботится о сохранении ваших данных.Пара новых артефактов вводятся, когда вы делаете это.Связанные с Spring XML-файлы и сопоставления JPA / Hibernate.Познакомьтесь с этим и с чем это связано.
Вы почти закончили.Наконец, давайте обратимся к проблемам представления или представления.Вот где Java (imo) отстой, так как он слишком многословен, и этот уровень полностью посвящен бездумному повторению размещения здесь виджета, размещения там виджета и т. Д.
В самом простом (и готовом) виде выиметь базовый HTTPServlet и возможность отправлять обратно все, что вам нравится.Вы можете написать свой HTML в своем коде (очень плохая идея), или использовать шаблонный подход (Velocity, FreeMarker), или перейти к специализированным компонентам для презентации: JSP, Faces и т. Д. Существуют буквально десятки платформ (иподходы) там для уровня представления.
Надеюсь, это помогло.