В этой главе вы сначала познакомитесь с EJB-компонентами, а затем узнаете о трех разных типах сессионных EJB-компонентов: без сохранения состояния, с сохранением состояния и одиночных. EJB-компоненты без сохранения состояния являются наиболее масштабируемыми из этих типов, поскольку не сохраняют состояние и обеспечивают выполнение бизнес-логики с помощью одного вызова метода. EJB-компоненты с сохранением состояния поддерживают диалоговое состояние для одного клиента. Версия EJB 3.1 добавила сеансовые одиночные EJB-компоненты (по одному экземпляру на приложение) в предыдущий релиз. Вы также увидите, как выполнять эти EJB-компоненты во встроенном контейнере и вызывать их синхронно или асинхронно.
EJB-компоненты — это серверные компоненты, которые инкапсулируют бизнес-логику, заботятся о транзакциях и безопасности. У них также имеется интегрированный стек для обмена сообщениями, планирования, удаленного доступа, конечных точек веб-служб (SOAP и REST), внедрения зависимостей, управления жизненным циклом компонентов, аспектно-ориентированного программирования (Aspect-Oriented Programming — AOP) с использованием перехватчиков и т. д. Кроме того, EJB-компоненты «бесшовно» интегрируются с другими технологиями Java SE и Java EE вроде JDBC, JavaMail, JPA, Java Transaction API (JTA), Java Messaging Service (JMS), сервиса аутентификации и авторизации Java (Java Authentication and Authorization Service — JAAS), Java Naming and Directory Interface (JNDI) и удаленного вызова методов (Remote Method Invocation — RMI). Вот почему они используются для создания уровня бизнес-логики (рис. 7.1), располагаются над уровнем базы данных и осуществляют оркестровку на уровне бизнес-модели. EJB-компоненты выступают в качестве точки входа для технологий уровня представления, например JavaServer Faces (JSF), а также для всех внешних служб (JMS или веб-служб).
Рис. 7.1. Разделение архитектуры на уровни
EJB-компоненты — это очень мощная модель программирования, которая объединяет в себе легкость использования и надежность. Сегодня EJB-компоненты представляют собой простую модель разработки на стороне сервера с использованием Java, которая облегчает работу, одновременно привнося возможность повторного использования и масштабируемость в критически важные корпоративные приложения. Все это является результатом снабжения аннотацией одного Java-объекта, развертывание которого будет производиться в контейнере. EJB-контейнер — это среда выполнения, которая обеспечивает службы, например, для управления транзакциями, управления конкурентным доступом, организации пула и проверки прав на доступ. Исторически сложилось так, что серверы приложений привнесли другие особенности вроде кластеризации, балансировки нагрузки и обхода отказа. Кроме того, EJB-разработчики могут сосредоточиться на реализации бизнес-логики, пока контейнер занимается решением всех технических вопросов.
Сегодня как никогда, с выходом версии 3.2, EJB-компоненты можно написать один раз, а затем развертывать их в любом контейнере, который соответствует требуемой спецификации. Стандартные API-интерфейсы, переносимые JNDI-имена, легковесные компоненты, CDI-интеграция и конфигурация в порядке исключения позволяют с легкостью развертывать EJB-компоненты в реализациях с открытым кодом, а также в коммерческих реализациях. Базовая технология была создана более 12 лет назад, что привело к появлению EJB-приложений, которые выигрывают от использования доказанных концепций.
Сессионные EJB-компоненты отлично подходят для реализации бизнес-логики, процессов и потока работ. А поскольку корпоративные приложения могут быть сложными, платформа Java EE определяет несколько типов EJB-компонентов.
•
•
•
Разумеется, у всех трех типов EJB-компонентов имеются специфические особенности, однако у них также есть много общего. Прежде всего, они обладают одинаковой моделью программирования. Как вы увидите позднее, у EJB-компонента может иметься локальный и/или удаленный интерфейс либо не быть вообще никакого интерфейса. Сессионные EJB-компоненты управляются контейнером, поэтому необходимо упаковать их в архив (файл с расширением JAR, WAR или EAR) и произвести их развертывание в контейнере.