Нужна помощь в определении / понимании Java EE "Stack" - PullRequest
6 голосов
/ 22 июня 2011

LAMP - это стек, заданный слева направо (снизу вверх) как Linux / Apache / MySQL / PHP или в общем случае его можно рассматривать как Операционную систему / Веб-сервер / База данных / Язык сценариев.В общей форме вы можете использовать любую операционную систему, такую ​​как Windows вместо Linux, чтобы получить WAMP или поместить в какую-либо другую БД, или даже запустить какой-либо другой язык, отличный от PHP, например Ruby.Тем не менее, как правило, у вас есть только один из каждой вещи.Одна база данных, одна ОС, один веб-сервер, хотя ваше приложение может переходить из одного стека в другой с некоторым конечным количеством изменений.

Я провел несколько лет разработки в стеке LAMP, и я 'Я читал о JSF и библиотеках компонентов RichFaces и IceFaces.Сама идея создания пользовательского интерфейса веб-сайта из компонентов, поддерживающих AJAX, и получения всевозможных изящных вещей, таких как валидация и беспорядочные бесплатные вызовы AJAX, поистине захватывающая.время, чтобы понять, какие общие компоненты составляют стек Java EE.Из моего исследования кажется, что у вас есть следующие категории, из которых можно построить «стек Java EE»:

Сервер приложений Java EE - JBoss, Tomcat

База данных - MySQL, Oracle

Абстракция базы данных - Hibernate, JPA

Библиотека компонентов JSF с поддержкой Ajax - ICEFaces, RICHFaces

Мне кажется, что я определенно упускаю некоторые вещи.Я не уверен, где Шов или Весна вписываются в это.Кроме того, является ли Hibernate чем-то, что использует JPA?Или JPA является полнофункциональным API, который я могу легко использовать самостоятельно?Где контейнеры вписываются в это?Могу ли я выйти и заставить контейнер работать на моем сервере приложений Java EE?Кроме того, где Maven вписывается во все это?Из того, что я почерпнул, это не похоже на часть стека веб-сервисов, но вместо этого это инструмент, используемый до развертывания.

Я читал ICEfaces 1.8 Райнера Эшена, и эта диаграмма представленаего как своего рода стек Java EE.Я предполагаю, что AppFuse для Java EE, а XAMPP для LAMP.Это правда?Если бы кто-то мог разбить различные части на диаграмме ниже и как они сочетаются друг с другом, это было бы очень полезно.

Диаграмма архитектуры ICEcube http://img191.imageshack.us/img191/336/icecubearchitecture.png

Я знаю, что они очень разнообразнывопросы.Если я не смог спросить что-то, что, как вы думаете, я должен знать, не стесняйтесь выбросить это, или если я что-то сказал неправильно, ПОЖАЛУЙСТА, поправьте меня!Стек Java EE и все части, которые идут вместе с ним, пугают, если не сказать больше.Я просто хочу получить хорошее представление о высоком уровне, прежде чем погрузиться и начать что-либо строить.

Спасибо!

Ответы [ 2 ]

10 голосов
/ 22 июня 2011

Эта диаграмма НЕ является стеком 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 и т. Д. Существуют буквально десятки платформ (иподходы) там для уровня представления.

Надеюсь, это помогло.

5 голосов
/ 22 июня 2011

Да, диаграмма, которую вы разместили, пугает, но вам не нужно использовать все эти вещи.Это не все, что нужно.

Если вы новичок, сделайте это просто и соберите.

Вот самые важные и обязательные элементы для начала:

  1. Сервлеты и JSP.Это означает развертывание на движке сервлетов / JSP, таких как Tomcat или Jetty.Сервлеты - это прослушиватели HTTP, которые обрабатывают входящие запросы, взаимодействуют с внутренними классами для их выполнения и направляют ответы в соответствующее следующее представление.
  2. JSP - это шаблонное решение для генерации HTML.Вы должны писать их только с использованием JSTL, стандартной библиотеки тегов JSP.Нет скриптлетов.
  3. HTML, CSS и JavaScript для пользовательского интерфейса.Они нужны вам для веб-интерфейсов.
  4. JDBC для доступа к реляционной базе данных.

Вот и все.Только с этими вы можете пройти очень длинный путь.

Я люблю весну, но с первого раза много глотать.Сделайте сайт или два без него.Вы будете лучше понимать вещи и цените то, что Spring делает для вас больше.

Вам не нужен JSF.Я бы сказал, что эта технология находится в состоянии упадка.Одно приложение JSF / Faces, которое я видел лично, абсолютно s * cked.Вы можете рассчитать время загрузки страницы с помощью солнечных часов.Я не считаю его большим победителем, несмотря на то, что он рекламируется как стандарт Java EE.Ты собираешься запустить JSF на мобильном интерфейсе?Я так не думаю.

Интерфейсы написаны с использованием HTML, CSS и JavaScript для взаимодействия со службами на стороне сервера.Этими сервисами могут быть REST-фулл сервлеты.

Hibernate - это технология объектно-реляционного отображения.Если у вас нет объектной модели, вам не нужен Hibernate.Если у вас есть простые взаимно-однозначные отношения между объектами и таблицами, вам не нужен Hibernate.Если вам нравятся хранимые процедуры как интерфейс вашей реляционной базы данных, вам не нужен Hibernate.Если вы не против написать немного SQL и отобразить результаты, вам не нужен Hibernate.То же самое для JPA - Hibernate - это один из способов реализации JPA, который во многом заимствован из Hibernate.

Начните с этого и наращивайте.Если вы попытаетесь выучить все то, что цитировали, вы нигде не получите.

...