Читаем Изучаем Java EE 7 полностью

По сравнению с кодом из листинга 6.2 код, приведенный в листинге 6.3, намного проще. Во-первых, в нем нет Persistence или EntityManagerFactory, поскольку контейнер внедряет экземпляр EntityManager. Приложение не отвечает за управление жизненным циклом менеджера сущностей (создание или закрытие). Во-вторых, поскольку EJB-компоненты без сохранения состояния управляют транзакциями, в этом коде не указан явным образом параметр commit или rollback. Такой стиль EntityManager демонстрируется в главе 7.

Примечание

Если вы заглянете в подраздел «Производители данных» главы 2, то поймете, что также можете использовать @Inject в сочетании с EntityManager, если будете генерировать его (с применением аннотации @Produces).

<p>Контекст постоянства</p>

Перед тем как подробно исследовать API-интерфейс менеджера сущностей, вам необходимо понять крайне важную концепцию: контекст постоянства. Это набор экземпляров сущностей, находящихся под управлением. Он наблюдается в определенный момент времени для транзакции определенного пользователя: в контексте постоянства может существовать только один экземпляр сущности с одним и тем же постоянным идентификатором. Например, если экземпляр Book с идентификатором 12 существует в контексте постоянства, то никакой другой экземпляр Book с этим идентификатором не может существовать в том же самом контексте постоянства. Менеджер сущностей управляет лишь теми сущностями, которые содержатся в контексте постоянства, а это означает, что изменения будут отражаться в базе данных.

Менеджер сущностей обновляет контекст постоянства или обращается к нему при каждом вызове метода интерфейса javax.persistence.EntityManager. Например, когда произойдет вызов метода persist(), сущность, передаваемая как аргумент, будет добавлена в контекст постоянства, если ее там еще нет. Аналогичным образом при поиске сущности по ее первичному ключу менеджер сущностей сначала проверяет, не содержится ли уже в контексте постоянства запрашиваемая сущность. Контекст постоянства можно рассматривать как кэш первого уровня. Это небольшое жизненное пространство, в котором менеджер сущностей размещает сущности перед тем, как сбрасывать содержимое в базу данных. По умолчанию объекты располагаются в контексте постоянства столько времени, сколько длится соответствующая транзакция.

Чтобы резюмировать все это, взглянем на рис. 6.1, где показано, что двум пользователям требуется доступ к сущностям, данные которых хранятся в базе данных. У каждого пользователя имеется собственный контекст постоянства, в котором все сохраняется, пока длится его транзакция. Пользователь 1 получает из базы данных сущности с идентификаторами 12 и 56, поэтому оба размещаются в его контексте постоянства. Пользователь 2 получает сущности с идентификаторами 12 и 34. Как вы можете видеть, сущность с идентификатором 12 располагается в контексте постоянства каждого из пользователей. Пока длится транзакция, контекст постоянства выступает в роли кэша первого уровня, где находятся сущности, которыми может управлять менеджер сущностей. Когда транзакция завершается, контекст постоянства очищается от сущностей.

Рис. 6.1. Сущности, которые располагаются в контексте постоянства разных пользователей

Конфигурация для менеджера сущностей привязывается к экземпляру EntityManagerFactory, который применяется для его создания. Независимо от того, является ли среда управляемой приложением или же контейнером, эта фабрика необходима как единица сохраняемости, с использованием которой будет создаваться менеджер сущностей. Единица сохраняемости обуславливает параметры для подключения к базе данных и список сущностей, которыми можно управлять в контексте постоянства. Файл persistence.xml (листинг 6.4), располагающийся в каталоге META-INF, определяет единицу сохраняемости, у которой есть имя (chapter06PU) и набор атрибутов.

Листинг 6.4. Единица сохраняемости с набором сущностей, которые поддаются управлению

·············xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"

·············xsi: schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 

·············http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"

·············version="2.1">

··

····org.eclipse.persistence.jpa.PersistenceProvider

····org.agoncal.book.javaee7.chapter06.Book

····org.agoncal.book.javaee7.chapter06.Customer

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных