Введение
Это руководство посвящено идентификации сущностных bean-объектов. Дополнительное руководство о сущностных bean-объектах
находится в разделе Руководство: Сущностный bean-объект, а общее руководство об объектах EJB находится в
разделе Руководство: Объект EJB.
Идентификация сущностных bean-объектов
Сущностные классы анализа (см. Рабочий продукт: Класс анализа) являются подходящими кандидатами для
сущностных bean-объектов, потому что они приспособлены для хранения данных. Сущностные bean-объекты соответствуют
бизнес-сущностям, которые содержат постоянные данные. Они предоставляют службы, которые реализуют логику, специфичную
для бизнес-сущности. Другой характеристикой сущностных bean-объектов является то, что они могут предоставить свои
службы многим клиентам одновременно. Контейнер EJB управляет координацией этих клиентов и их транзакций.
Сущностные bean-объекты используются для предоставления хранилища, но могут также инкапсулировать бизнес-логику. В
общем случае, сущностный bean-объект должен содержать только бизнес-логику, которая относится к хранящимся в нем данным
и зависимым объектам данных. Логика взаимодействия между сущностными bean-объектами должна быть вынесена в bean-объекты
сеанса для минимизации связи между сущностностными bean-объектами.
Моделирование сущностных bean-объектов
Смотрите раздел Руководство: Идентификация объектов EJB.
Уровень дискретности
Уровень дискретности указывает на размер данных, представленных сущностным EJB. Подходящий уровень дискретности может
зависеть от версии используемой спецификации EJB.
В более ранних версиях, чем EJB 2.0, рекомендовалось, чтобы объекты EJB сущности всегда имели большой уровень
дискретности, обычно представляя большие группировки данных из многих таблиц базы данных. Причина этого состоит в
значительной дополнительной нагрузке, создаваемой каждым сущностным EJB, в частности, для обеспечения удаленности.
Например, позиции заказа или ячейки электронной таблицы являются слишком дискретными, и к ним не должен часто
осуществляться доступ по сети. В отличие от этого, логические группировки позиций заказа или подмножества ячеек
электронной таблицы могут быть смоделированы как сущностные EJB, если для этих данных требуется дополнительная
бизнес-логика.
В EJB 2.0 введены локальные интерфейсы, которые уменьшают эту дополнительную нагрузку, позволяя моделировать более
дискретные объекты как объекты EJB. Локальные и удаленные интерфейсы описаны в Концепция: Обзор J2EE (Java 2 Platform Enterprise Edition). Локальный интерфейс не
создает дополнительной нагрузки, характерной для удаленного интерфейса, позволяя тесно связанным bean-объектам
взаимодействовать более эффективно. Локальные интерфейсы особенно полезны для сильно дискретных сущностей, составляющих
большую сущность, которая ответственна за создание и уничтожение своих компонентов. Клиенты используют удаленный
интерфейс большей сущности, которая, в свою очередь, использует локальные интерфейсы для взаимодействия со своими
компонентами.
Тем не менее, если сущностный bean-объект имеет композиционную взаимосвязь с другим классом, то можно моделировать этот
другой класс как обычный класс Java, а не как сущностный bean-объект. При использовании хранилища, управляемого
контейнером такой класс Java называется "классом зависимого значения". Классы зависимого значения проще и быстрее в
разработке и тестировании, чем сущностные bean-объекты, и они предпочтительнее, если составной класс не требует функций
сущностного bean-объекта. Существуют некоторые ограничения для классов зависимого значения:
-
они не могут содержать ссылок на сущностные bean-объекты
-
они "получаются" и "устанавливаются" по значению, что несколько снижает производительность, но позволяет
осуществлять доступ из удаленного интерфейса
Инкапсуляция
Рассмотрим заключение в оболочку набора связанных сущностных bean-объектов с помощью фасада bean-объекта сеанса с целью
предоставления логического интерфейса для работы с бизнес-сущностями, которые соответствуют сущностным объектам EJB.
Смотрите раздел Руководство: Идентификация bean-объектов сеанса.
Подобный подход состоит в том, чтобы инкапсулировать в одном сущностном bean-объекте набор других логических сущностных
bean-объектов, в общем случае зависимых от него. Удаленные клиенты получают доступ ко всем данным через "главный"
сущностный bean-объект. В разделе Базовые шаблоны J2EE - Шаблон составной сущности ([ALU01] обсуждается эта альтернатива, но там рекомендуется использовать фасад
bean-объекта сеанса как самый простой метод работы со взаимосвязями сущностного bean-объекта.
|