Рекомендация: Идентификация сущностных bean-объектов
В этом руководстве обсуждается, как определить и смоделировать сущностные bean-объекты для приложения J2EE.
Взаимосвязи
Связанные элементы
Основное описание

Введение

Это руководство посвящено идентификации сущностных 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-объекта.