Введение в основы EJB3

Так как я уже затрагивал тему EJB3 в уроках, то решил рассмотреть его более детальней.

Немного о EJB

EJB (Enterprise Java Beans) — это фреймворк для построение бизнес-логики приложения.

Сервер приложений J2EE состоит из двух основных элементов:

WEB-Container — (JSP, JSF и т.д.) все что дает конечный вид пользователю, а точней пользовательский интерфейс.

EJB-Container — используется для написания бизнес-логики.

С точки зрения EJB — это технология, предоставляющая множество готовых решений (управление транзакциями, безопасность, хранение информации и т.п.) для вашего приложения.

EJB делится на три типа компонентов

1. Session beans — используется для построения бизнес-логики, которая может быть вызвана программным клиентом через локальный, удаленный или веб-интерфейс обслуживания клиентов.

Для доступа к приложению, развернутого на сервере, клиент вызывает методы сессионного компонента. Сессионный компонент выполняет работу для своего клиента, защищая его от сложности, выполняя бизнес-задач внутри сервера.

Существует 2 типа session-beans: stateless и stateful.

Stateful — автоматически сохраняют свое состояние между разными клиентскими вызовами.

Stateless — используются для реализации бизнесс-процессов, которые могут быть завершены за одну операцию.

2. Message-Driven beans — компонент является корпоративным компонентом, который позволяет Java EE приложениям обрабатывать сообщения асинхронно.

Этот тип бинов обычно действует в качестве слушателя JMS-сообщения, который похож на слушателя событий, но получает JMS-сообщений вместо событий. Сообщения могут быть отправлены на любой компонент Java EE (клиентское приложение, другой компонент, или веб-компонент) или JMS приложение или систему, которая не использует Java EE технологий.

Message-Driven beans может обрабатывать  не только JMS сообщения но и других видов сообщений.

На схеме выше можно наблюдать общение между приложением и сервером с помощью очереди куда поступают сообщения.

3. Entities — это сущности каких то объектов и в EJB оно является хранилищем данных на период жизненного цикла Entity.

Entities является свое-родным отображением таблиц в БД.

Одним из главным достоинством EJB3 стал новый механизм работы с persistence, он дает возможность автоматически сохранять объекты в реляционной БД используя технологию ORM.

Для работы с entity был создан JPA (Java Persistence API).

JPA определяет стандарт для:

1) конфигурации маппинга сущностей приложения и их отображения в таблицах БД;

2) EntityManager API — позволяет выполнять CRUD (create, read, update, delete) операции над сущностями;

3) Java Persistence Query Language (JPQL) — для поиска и получения данных приложения;

Основные аннотации EJB3

@EJB — помечается bean, который мы собираемся использовать.

@Stateless — говорит контейнеру, что класс будет stateless session bean. Для него контейнер обеспечит безопасность потоков и менеджмент транзакций.

@Local — относится к интерфейсу и говорит, что bean реализующий интерфейс доступен локально.

@Remote — относится к интерфейсу и говорит, что bean доступен через RMI (Remote Method Invocation).

@Stateful — говорит контейнеру, что класс будет stateful session bean.

@Remove — метод, помеченный как Remove говорит контейнеру, что после его исполнения нет больше смысла хранить bean, т.е. его состояние сбрасывается. Это бывает критично для производительности.

@Entity — говорит контейнеру, что класс будет сущностью БД.

@Table(name=»<name>») — указывает таблицу для маппинга БД.

@Id — указывает уникальный идентификатор сущности который будет ключом в БД.

@Column — указывает параметры колонки в БД включая имя колонки в БД.

@WebService — говорит, что интерфейс или класс будет представлять web-сервис.

Правила создания session bean

В качестве session bean может выступать обычный класс Java, но он должен удовлетворять следующим условиям:

1. Он должен иметь как минимум один метод;

2. Он не должен быть абстрактным;

3. Он должен иметь конструктор по-умолчанию;

4. Методы не должны начинаться с «ejb» (например ejbBean, ejbGoAtHome)

5. Свойства класса должны быть объявлены примитивами или реализовывать интерфейс Serializable.

Жизненный цикл EJB3

У stateless и MDB бинов существует 2 события жизненного цикла, которые мы можем перехватить. Это создание и удаление бина.

Метод, который будет вызываться сразу после создании бина помечается аннотацией @PostConstruct, а перед его удалением — @PreDestroy.

Stateful бины обладают помимо рассмотреных выше еще 2 событиями:

1) При активации @PostActivate;

2) При деактивации @PrePassivate.

Урок создан: 24 июля 2013 | Просмотров: 40606 | Автор: Александр Барчук | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии:

  • 25 июля 2013 в 14:27

    Sergey

    Забыли про тип сессионного бина Singleton.

    • 25 июля 2013 в 15:54

      Александр Барчук

      В этом уроке я пытался не затрагивать паттерны, так как это основы, только самое основное.

  • 14 февраля 2014 в 12:19

    Лилия

    Классная статья.Спасибо, все разложено как по полкам.

  • 30 января 2015 в 10:43

    Евгений

    1. не совсем понял разницу между Stateful и Stateless
    2. Java Persistence API — это аналог Hibernate? Т.е. можно вместо JPA использовать Hibernate и наоборот?

    • 04 февраля 2015 в 08:06

      Никита

      Не совсем. JPA — это спецификация от Java. Она представляет собой набор интерфейсов для организации работы с данными. Hibernate — это уже одна из реализаций JPA. Можно провести аналогию с интерфейсом List(это JPA) и его реализацией ArrayList(это Hibernate). Использую JPA, вы лишаете себя некоторых возможностей, характерных только для Hibernate, однако получаете большую гибкость в разработке, так как ваш код будет работать на любых реализация стандарта JPA

  • 29 января 2016 в 05:34

    Aibek

    Спасибо! Освежил память.