Глава 3. Использование
контейнерно-управляемого сохранения состояния (CMP)

Содержание

Введение
Контейнерно-управляемое сохранение состояния (Container Managed Persistence - CMP)
Создание объектов (Bean)
Упаковка и развёртывание объектов (Beans)
Создание тестового клиента
Обсуждение: контейнерно-управляемое сохранение состояния (CMP)

Author:Kevin Boone <k.boone@web-tomorrow.com>

Совместимость с JBoss 2.2 проверена:Vincent Harcq <vincent.harcq@hubmethods.com>

Введение

О чем этот раздел

Этот раздел представляет собой пример создания, развертывания и тестирования Entity JavaBean, который использует "container-managed persistence" (контейнерно-управляемое сохранение состояния) с помощью сервера JBoss EJB server. Это очень простой пример и это вариация на старый добрый пример создания системы по учёту компакт-дисков ("music CD" case study). Я выбрал этот пример из-за того, что такое приложение будет понятно большинству людей без дополнительного объяснения. В кратце, EJB-объект "CD" представляет собой описание музыкального компакт-диска. Приложения будут хотеть добавлять и удалять CD из коллекции и искать в коллекции определенный компакт-диск. Кроме того есть EJB-объект "CDCollection", который содержит список и осуществляет поиск в коллекции.

Загрузите и установите полный исходный код, как это объяснено в разделе Загрузка исходного кода примеров.

Файлы (исходники, скрипты и конфигурационные файлы) необходимые для этой главы находятся в каталоге "documentation-example/org/jboss/docs/cmp/cd". Посмотрите на них и установите classpath перед компиляцией/запуском исходным кодом.

Прочитайте раздел Установк Ant” так как вам придется запускать ant для того чтобы собрать ejb jar и запустить тестового клиента.

Предварительные условия

Вам необходима полностью функционирующая инсталляция JBoss с работающим соединением с базой данных для того чтобы следовать этому учебному пособию. Я предполагаю что вы знаете основы EJB и знаете как структурировать и скомпилировать JavaBeans в качестве Java packages. Также, я предполагаю что вы знаете основы структуры дескриптора развертывания (deployment descriptor) и дескриптора выполнения, который использует JBoss (run-time descriptor) (jboss.xml). Я предполагаю, что вы знаете как собрать EJB-пакет и развернуть его используя JBoss. Если вы незнаете ничего об этих вещах, то вам лучше сначала взглянуть на главу "первые шаги".

Сохраняемость (Persistence???): обзор

Есть, по сути, два типа объектов Enterprise JavaBean: session и entity. Entity-объекты - это объекты содержащие информацию, которая постоянна для всех клиентов, в то время, как session-объекты EJB хранят информацию только для текущего клиента. Для примера, класс называющийся "Customer", который представляет собой покупателя конкретной услуги будет содержать постоянную информацию (о покупателе). Класс называющийся "CustomerFinder", к примеру, который ищет экземпляры интерфейса Customer которые удовлетворяют определенным критериям, скорее всего будет session EJB, потому что нет необходимости хранить информацию в перерыве между различными клиентскими обращениями.

Session EJB могут быть разделены на "stateless" (без хранения состояния) и "stateful" (с сохранением состояния). Stateful session EJB имеет состояние которое постоянно между вызовами его методов. Stateless EJB даже не должен хранить состояние между вызовами методов. Поэтому Stateless session EJB является самым не сохраняемым типом EJB.

Entity EJB содержит информацию, которая постоянна даже когда ни один клиент не использует ни одного метода этого объекта; информация будет сохранена даже если сервер будет перезагружен. Есть высокое соответствие между экземпляром EJB и строкой в таблице базы данных. На практике, все EJB серверы сохраняют экземпляры entity-объектов в качестве строк в таблице. Это соответствие настолько высоко, что такое понятие из области баз данных как "первичный ключ" (primary key) также существует и для entity EJB.

Сохранение entity EJB может управляться самим объектом или с помощью сервера (технически "контейнером"). Последняя техника называется "Container-managed persistence"(Контейнерно-управляемое сохранение состояния) и это будет темой оставшейся части этого раздела.

Что использовать CMP или BMP?

Несмотря на то, что многие так не считают, выбор между CMP и BMP не так прост. Если у вас уже есть существующая БД вы можете обнаружить, что сложность ее архитектуры потребует от вас использования BMP или инструментов, генерирующих BMP, например "cocobase". Такой технический прием мы называем "подделка под CMP", когда работа по доступу к базе данных отдается сгенерированным классам.

"Настоящий CMP" - это когда вы предоставляете право контейнеру полность управлять хранением состояния. Вам это может не подходить в случае сложных объектов, но будет работать в большинстве простых случаев. EJB2.0 делает следующий шаг, для того чтобы сделать механизмы сохранения более мощными и быстрыми, вводя управление зависимостями и связями. Мы верим, что в один прекрасный день вы доверитесь этим механизмам управления схемами, также как вы доверяетесь компилятору при оптимизации вашего ассемблерного кода.

Наши друзья