Изучаем Java EE 7 - [86]

Шрифт
Интервал

Менеджер сущностей обновляет контекст постоянства или обращается к нему при каждом вызове метода интерфейса 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

>····org.agoncal.book.javaee7.chapter06.Address

>····

>······

>················value="drop-and-create"/>

>······

>················value="org.apache.derby.jdbc.EmbeddedDriver"/>

>······

>················value="jdbc: derby: memory: chapter06DB;create=true"/>

>······

>····

>··

>

Единица сохраняемости — это мост между контекстом постоянства и базой данных. С одной стороны, в теге указываются все сущности, которыми можно было бы управлять в контексте постоянства, и, с другой стороны, он предоставляет всю информацию, необходимую для физического подключения к базе данных (с использованием свойств). Это происходит потому, что вы находитесь в среде, управляемой приложением (transaction-type="RESOURCE_LOCAL"). Как вы увидите в главе 7, в среде, управляемой контейнером, persistence.xml определял бы источник данных вместо свойств для подключения к базе данных и задал бы тип транзакций как JTA (transaction-type="JTA").

В JPA 2.1 некоторые свойства в файле persistence.xml были стандартизированы (табл. 6.1). Все они начинаются с javax.persistence, например javax.persistence.jdbc.url. Требуется, чтобы поставщики JPA поддерживали эти стандартные свойства, однако они могут обеспечивать собственные свойства вроде eclipselink в приведенном чуть выше примере (например, eclipselink.logging.level).


Таблица 6.1. Стандартные свойства JPA
СвойствоОписание
javax.persistence.jdbc.driverПолностью уточненное имя класса драйвера
javax.persistence.jdbc.urlСпецифичный для драйвера URL-адрес
javax.persistence.jdbc.userИмя пользователя, применяемое при подключении к базе данных
javax.persistence.jdbc.passwordПароль, применяемый при подключении к базе данных
javax.persistence.database-product-nameИмя целевой базы данных (например, Derby)
javax.persistence.database-major-version

Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.