Компоненты-сущности. Введение в компоненты-сущности. Крупные деловые объекты. Рост популярности компонентов-сущностей, страница 4

Это лишь некоторые из веских причин, которые заставили перейти к применению так называемых персистентных палей, управляемых контейнером (container-managed persistent fields— CMP), или просто персистентных полей, полностью абстрагированных от своей реализации в EJB. Таким образом достигается действенное разделение двух главных частей системы, имеющих тенденцию меняться независимо друг от друга. Это разделение оказывается очень полезным.

Согласно описанию операций персистентности, принятому в J2EE 1.2, для этого следует поместить в класс реализации компонента-сущности обычные поля Java, определить их в описателе развертывания как поля СМР и написать методы getи setдля этих полей. Пример создания персистентных полей показан на рис. 13.6.

В новой версии описания уже не нужно непосредственно добавлять поля в EJB. Достаточно указать имена этих полей в схеме абстрактной персистентности, и контейнер EJB выполнит все операции по созданию и управлению. Также надо создать методы getи set, но они должны быть абстрактными, т.е. не содержать никакого кода. При развертывании компонента информация из схемы абстрактной персистентности в описателе развертывания передается в диспетчер персистентности. Пример создания полей в новой спецификации J2EE показан на рис. 13.7.

Рис. 13.7. Описание операций управления персистентностъювJ2ЕЕ 1.3

Язык запросов EJB

Язык запросов EJB (Query Language — QL) представляет собой очень упрощенную версию обычного языка SQL, используемого для запросов к базам данных. Он предназначен для полного абстрагирования определений методов поиска и отбора данных от используемой базы данных. Язык EJB QL определен в J2EE 1.3 для использования в некоторых методах компонентов-сущностей, таких как методы поиска и отбора. С помощью EJB QL диспетчер персистентности и средства развертывания автоматически создают в ходе развертываниякод доступа к базе данных. Для этого надо только объявить методы поиска и указать для них команды EJB QL, но не создавать кода для реализации этих методов.

В командах EJB QL используются имена, присутствующие в схеме абстрактной персистентности, имена полей СМР и другие необходимые имена EJB. При развертывании эти команды преобразуются в код запросов SQL, соответствующий действительным именам таблиц и столбцов базы данных. Затем автоматически генерируется код, необходимый для выполнения созданных команд SQL при работе приложения.

В версии J2EE 1.2 языка EJB QL нет. Здесь средства развертывания создают код для выполнения команд SQL непосредственно на основе этих команд.

В остальной части главы мы будем использовать EJB QL. Для версии J2EE 1.2 надо будет заменить EJB QL на SQL.

Диспетчер персистентности

Диспетчер персистентности — это новое инструментальное средство в составе J2EE 1.3, которое обычно вкладывается в пакет сервера приложений. Этот диспетчер предназначен для обработки информации из схемы абстрактной персистентности и отображения персистентных полей в этой схеме на фактические поля базы данных.

После создания этого отображения, на этапе развертывания контейнер EJB еще раз вызывает диспетчер персистентности для фактического создания необходимых перси-стентных полей, кода доступа для них и кода обращения к базе данных. Это необходимо, чтобы сохранить синхронизацию с базой данных. Все эти возможности значительно облегчают построение и обслуживание компонентов-сущностей.

Отношения, управляемые контейнером

Отношения, управляемые контейнером, которые впервые также появились в J2EE 1.3, создают новую область приложения для UML. В схеме абстрактной персистентности, о которой мы говорили выше, есть также возможность задавать информацию об отношениях между управляемыми контейнером компонентами-сущностями. Для этого служат поля управляемых контейнером отношений (container-managed relationships — CMR). Как и к полям СМР, обращение к ним происходит через методы getи set, которые определяются как абстрактные и код для которых создается диспетчером персистентности.