Java EE
В нынешние времена считается что та система хороша, которая надежна как топор, быстра как молния, независима как ветер, проста как валенок и продуктивна в разработке как паровоз. Java EE в свою очередь, выполняет достаточно много из таких требований, конечно с определенной корректировкой на реальность. Реальность такова что больше и больше энтерпрайзов начинают сотрудничать с друг другом, так-как понимают что вместе можно слепить больше и продать быстрее - это как единый организм с независимыми частями, каждая выполняющая свою функцию и пользующаяся плодами других, главное тут конечно не путать кто чем должен заниматься. Так вот все это, предприятия будут стараться поддерживать на уровне ПО. Тут Java EE хороша как раз своей мобильностью, сетью готовых разработок (API), полноценной поддержкой транзакций во многих сферах подразделений, а так-же набором готовых продуктов для обеспечения безопасности и надежности. Скорость конечно не самая лучшая, тем не менее нужных результатов добиться в основном можно. Простота за счет постоянного стремительного развития ООП (объектно ориентированного программирования) в Java EE легко уже достигается, хоть и увеличилась информационная база значительно за последние годы. Разработка Java EE закреплена спецификациями, большинство, если не всё, из которых поддерживается разными серверами. На чем уж действительно можно сделать акцент, та это на том что разработка с Java EE действительно продуктивна и проста из за огромной базы функционала, который свободно можно внедрить, сконфигурировать и он будет взаимодействовать под эгидой ООП. В основном крупные системы многослойны и включают в себя кучу всего. Такой распорядок определяет эффективную организацию большого предприятия. Вот что примерно их себя представляет архитектура типичной Java EE системы.
Клиент, это пользователь с браузером. Связь может осуществляться через компьютер, телефон или любой инструмент располагающий каким-нибудь типом связи.
Java EE Server
Java EE сервер, состоит из множества частей, наиболее весомые это EJBs, они обычно используются для выполнения бизнес логики в так называемом business tier. А вот то что обеспечивает связь с клиентом через например http протокол, так это какой-нибудь фреймворк такой например как JSF, хотя это может быть и Struts и все что угодно; именуется этот слой как front end или Web tier. Главное что обычно есть хоть и небольшое и не всегда вполне ощущаемое разделение между web и business слоем. Зачастую business слой ответственен за подсоединение с базой данных (БД), хотя опять-же если нет особого разделения между web и business, то можно сказать что web так-же обеспечен возможностью соединения.Web Tier
Этот слой состоит из страниц и технологий способных их обрабатывать. Это все то, что может обрабатываться Web контейнером (считается что Java EE сервер содержит в себе Web Container для этого слоя. Например раньше JBoss содержал в себе Tomcat, потом разработал свой модуль). Это могут быть HTML файлы с CSS и JavaScript. Используются так-же файлы типа JSP которые компилируются в сервлеты во время упаковки и к примеру XHTML которые просто обрабатываются и чью структуру держит кэш на сервере. То-есть все те внешние страницы с которыми работает клиент, хотя динамичный контент может исходить из БД или еще откуда-то проходя через business tier(опять-же если есть такой явно выраженный) и попадая на страницы. Если работа с динамичным контентом необходима (в основном это так) то запросы проходят через сервлеты, которые являются классами ответственными за обработку HTTP GET/POST запросов.
JavaServer Faces
Фреймворк для разработки веб приложений, одно из преимуществ которого является свободное разделение между UI и поведением программы. Он полностью интегрирован со многими ключевыми компонентами Java EE, такими к примеру как EJB (Enterprise Java Beans), JTA (Java Transaction API), JPA (Java Persistence). Содержит API для отражения компонентов и руководства их состоянием. А так-же обеспечивает: управление событиями (), проверку данных, конвертацию данных, определение навигации запросов, поддержку интернационализации, возможность использовать разные faces фреймворки (такие как IceFaces).
JSR299, JSR330
CDI (Contexts and Dependency Injection). Целый спектр возможностей по внедрению зависимостей, причем независимого в поведении и определении компонентов. Придает действительно объектно ориентированный характер взаимоотношению объектов, выводя его на новый уровень за-счет @annotation в сфере конфигураций, деклараций и квалификаторов, а так-же удобной и полной интеграции с JSF, так как все бины попадают в зону видимости UI компонентов, будь то POJO или EJB 3.1. Акшоном (Action class) может быть все что угодно практически, без лишних деклараций.
ManagedBeans
Легкие бины, по сущности POJO объекты, разработанные как бины JSF, которые обладают доступом к таким сервисам как внедрение зависимостей и interception. В отличие от CDI, они легче но распространяются только в сфере влияния JSF, тогда когда CDI пользуется полной свободы размещения по всему что охватывает собой Java EE.
Bean Validation
Возможность указывать правила проверки JavaBeans задействованных в цикле JSF в виде анотаций.
EJB Lite
Упрощенная спецификация EJB (EJB Lite), которая предусматривает размещение EJB lite в Web Container, без элементов: MDB, EJB2.x, Remote Interface, JAX-WS, JAX-RPC, Timer Service, Asynchronous Session Bean, RMI-IIOP. Тем не менее включает в себя все остальное доступное EJB.
EL
Expression Language, позволяющий отображать значения, вызывать методы и производить другого рода манипуляции Beans. Зачастую используется в UI компонентах (JSP, XHTML), но может и использоваться в самих классах, для обнаружения Beans в контексте (session, request, и.т.д.).
JavaMail
API для email операций.
JSP
Страницы содержащие статический и динамичный контент обрабатываемый сервером. Во время deployment, JSP странницы сервер компилирует в Servlet-ы. Удобство, по крайней мере так было задумано изначально, JPS страниц заключается в том что в отличие о сервлетов существует разделение UI от бизнес логики хоть и не в полной степени, так как в JSP можно писать scriplet-ы (Java код) сопряженные с HTML контентом, некий гибрид но все-же лучше чем просто сервлет с HTML кодом в String-ах.
Connectors (JCA - Java Connector Architecture)
Сеть API для разработки подсоединений к EIS (Entreprise Information System) являющимися источниками информации или поставщиками услуг, к примеру БД или AS/400 mainframe.
Java Persistence (JPA)
Фреймворк отображающий реляционную СУБД в сущностях и на объектно ориентированной основе. Из за несостыковки реляционной и объектно ориентированной моделей, фреймворк предоставляет возможности правильно оценить и реализовать сущности в Java относительно структуры БД, за счет этого сущности приобретают гибкость и простоту проектирования и реализации. JPA помимо стратегий отображения включает в себя инструменты для руководства транзакциями и жизненными циклами сущностей в разных контекстах, а так-же язык JPQL - упрощенный SQL преобразованный на объектно ориентированную основу.
JMS (Java Message Service)
Механизм обеспечивающий работу с месседжами (отправка/получение). Широко используется для разработки независимых, распределенных и асинхронных процессов. Может служить оберточным сервисом для таких систем как IBM MQ.
Web Services
Целый ряд API для разработки Web Services как по стандарту SOAP c WSLD интерфейсом, так и REST (Representational State Transfer), где запрос отправляется в виде в формате GET или POST. Так-же поддерживаются протоколы CORBA и RPC.
JACC (Java Authorization Contract for Containers)
Контракт определяющий систему авторизации между контейнером (сервером) и самим разработчиком таких систем. По сути дела, это внутренний механизм авторизации сервисов в Java EE.
JASPIC (Java Authentication Service Provider Interface for Containers)
Контракт определяющий систему аутентификации в Java EE. Зачастую, аутентификации разработана индивидуально каждым производителем. В данном случае была выпущена спецификация, правда пока широко не используется так как толком не доработана и выполнена в стиле J2EE 1.4.
JAX-RS
API для разработки RESTful Web Services.
JAX-WS
API для разработки Web Services на основе SOAP и WSDL.
JAX-RPC
API для разработки Web Services через протокол RPC.
SAAJ
API низкого уровня для работы с SOAP Web Services, а так-же позволяет прикреплять приложения к месседжам SOAP.
Business Tier
Здесь сфера деятельности так называемого EJB container-а. Большинство функционала продиктованного требованиями организации под название бизнес логика (business logic) выполняется здесь. Так-же здесь осуществляется соединение с БД. EJB container берет свое название из спецификации о EJB beans которые он способен поддерживать. EJB - это объект оснащенный сетью функций, сервисов предоставляемых контейнером. Такие функции как к примеру поддержка транзакций компонующих процессы, безопасность, потокобезопасность, пулинг (резерв бинов), dependency injection (внедрения зависимых компонентов - DI), контроль над циклом жизни бина и многое другое. В общем EJB обладают мощным потенциалом, достаточным для выполнения сложных операций при этом сохраняя свою простоту и гибкость в разработки и эксплуатации.
EJB (Enterprise Java Beans)
Объекты оснащенные рядом сервисов позволяющие быстро удобно и продуктивно разрабатывать и выполнять бизнес решения на сервере. Сервисы включают в себя руководство транзакциями, доступ к ресурсам, CDI (см. выше), пулинг, поддержка параллелизма, реализации Web Services и выполнять роль бинов JSF. Существуют разные типы бинов отображающие жизненный цикл предусмотренный бизнес логикой и отвечающий всем требованием выполнения обеспечивая необходимые ресурсы. Так-же предусмотрены решения разделенного асинхронного процессинга за счет MDB (Message Driven Bean) с использованием JMS (Java Message Service). EJB один из самых ключевых функционалов в Java EE, со многими прочими преимуществами, но это на отдельную тему.