Понимание Persistence.xml в JPA - PullRequest
       35

Понимание Persistence.xml в JPA

4 голосов
/ 14 октября 2011

Я пытаюсь понять следующее:

Когда я делаю проект EJB и развертываю его в Glassfish, я настраиваю пулы ресурсов / соединений JDBC в центре администратора Glassfish или добавляю всеразличные свойства для имени пользователя, пароля и т. д. в файле persistence.xml?Я не понимаю ни капли этого.

Я не понимаю, почему у нас есть и ресурс JDBC, и пул соединений JDBC.Что это такое и в чем разница между ними?Может ли кто-нибудь объяснить мне эти вещи или / и предоставить хорошую ссылку на файл persistence.xml и часть вокруг него?

Ответы [ 3 ]

5 голосов
/ 14 октября 2011

Лучше определить ресурс JDBC, чем помещать информацию в файл persistence.xml. Таким образом, вы собираетесь использовать пул соединений. Вы собираетесь определить имя JNDI, которое вы указали для ресурса JDBC в файле persistence.xml.

Что это и чем они отличаются

Ниже я вставил некоторые части справки Glassfish 3.x. Проверьте это. Это действительно полезно

Пул соединений JDBC

Пул соединений JDBC содержит группу соединений JDBC, которые создаются при регистрации пула соединений

JDBC-ресурс

Ресурс подключения к базе данных Java (JDBC) (источник данных) предоставляет приложениям средства подключения к базе данных. Обычно администратор создает ресурс JDBC для каждой базы данных, к которой обращаются приложения, развернутые в домене; однако для базы данных можно создать несколько ресурсов JDBC.

Приложения получают соединение с базой данных из пула соединений, просматривая источник данных в дереве API Java Naming and Directory Interface (JNDI) и затем запрашивая соединение. Пул соединений, связанный с источником данных, обеспечивает соединение с приложением.

Думайте о источнике данных (JDBC) как о фабрике для фасада некоторого типа службы данных (Connection Pool) В этом случае он неявно получает соединение из пула и предоставляет его вашему приложению.

Пример persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="WebApplication2PU" transaction-type="JTA">
    <jta-data-source>jdbc/sample</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties/>
  </persistence-unit>
</persistence>

Эта строка - имя JNDI, которое я дал своему ресурсу JDBC:

 <jta-data-source>jdbc/sample</jta-data-source>

Вам не нужно таким образом определять что-либо, связанное с подключением к базе данных, в вашем persistence.xml ... только имя JNDI ресурса

0 голосов
/ 06 апреля 2017

Я нашел это в книге, которую я прочитал, чтобы выучить Spring и Hibernate.Название книги: Профессиональная Java для веб-приложений , написанная Николас С. Уильямс .Я думаю, что это будет полезно для многих людей.

Создание конфигурации постоянства:

Чтобы использовать созданные вами сущности, вы должны определить единицу сохранения.Это просто.Создайте файл persistence.xml, не отличающийся от дескриптора развертывания, но с гораздо меньшим количеством вариантов для беспокойства.Корневым элементом файла конфигурации постоянства является <persistence>.Этот элемент может содержать один или несколько элементов <persistence-unit>.Никаких других элементов в пределах <persistence> нет.<persistence-unit> имеет два атрибута: name указывает имя единицы сохраняемости, а тип транзакции указывает, использует ли эта единица постоянства транзакции Java Transaction API (JTA) или стандартные локальные транзакции.Вы должны указать имя, которое определяет, как вы определяете постоянство в коде.Если не указан тип транзакции, по умолчанию используется JTA на сервере приложений Java EE и RESOURCE_LOCAL в среде Java SE или в простом контейнере сервлетов.Однако для предотвращения непредвиденного поведения лучше всегда устанавливать это значение явно, а не полагаться на значение по умолчанию.<persistence-unit> содержит следующие внутренние элементы.Ни один из них не требуется (поэтому <persistence-unit> может быть пустым);однако вы должны указать, какие элементы вы используете в следующем порядке:

  • <description> содержит полезное описание для этой единицы персистентности.Хотя это облегчает чтение файла персистентности, оно не имеет семантического значения.
  • <provider> указывает полное имя класса реализации javax.persistence.spi .PersistenceProvider, используемой для этого модуля персистентности.По умолчанию при поиске модуля персистентности API будет использовать первого поставщика JPA на пути к классам.Вы можете включить этот элемент для указания конкретного поставщика JPA.

  • Вы можете использовать <jta-data-source> или <non-jta-data-source> (но не оба) для использования ресурса JNDI DataSource.Вы можете использовать <jta-data-source>, только если тип транзакции - JTA;аналогично вы можете использовать <non-jta-data-source>, только если тип транзакции RESOURCE_LOCAL.При указании источника данных блок сохранения будет использовать этот источник данных для всех операций с сущностями.

  • <mapping-file> указывает относительный путь к пути к файлу сопоставления XML.Если вы не укажете <mapping-file>, провайдер ищет файл orm.xml.Вы можете указать несколько элементов <mapping-file> для использования нескольких файлов сопоставления.

  • Вы можете использовать один или несколько элементов <jar-file> для указания файла JAR или файлов JAR, которые должен сканировать поставщик JPA.для аннотированных объектов.Любые найденные классы @Entity, @Embeddable, @ javax.persistence.MappedSuperclass или @ javax.persistence.Converter добавляются в модуль постоянства.

  • Можно использовать один или несколько <class> элементы для обозначения определенных классов @Entity, @Embeddable, @MappedSuperclass или @Converter, которые должны быть добавлены в единицу сохраняемости.Вы должны аннотировать класс или классы аннотациями JPA.

  • Использование <exclude-unlisted-classes /> или <exclude-unlisted-classes>true</exclude-unlisted-classes> означает, что поставщик должен игнорировать классы, не указанные с <jar-file> или <class>.Пропуск <exclude-unlisted-classes> или использование <exclude-unlisted-classes>false</exclude-unlisted-classes> заставляет поставщика JPA сканировать расположение пути к классу файла постоянства для классов, аннотированных JPA.Если файл persistence.xml находится в файле JAR, этот файл JAR (и только этот файл JAR) сканируется на наличие классов.Если файл persistence.xml находится в каталоге пути к классам (например, / WEB-INF / classes), этот каталог (и только этот каталог) сканируется на наличие классов.До Hibernate 4.3.0 и Spring Framework 3.2.5 указание этого элемента со значением false неверно интерпретировалось как true.

  • <shared-cache-mode> указывает, как объекты кэшируются в единице постоянства.(если JPA прovider поддерживает кэширование, что необязательно). NONE отключает кеширование, тогда как ALL включает кэширование для всех сущностей. ENABLE_SELECTIVE означает, что аннотации @javax только для сущностей .persistence.Cacheable или @Cacheable (true) (или помечены как кешируемые в orm.xml) кэшируются DISABLE_SELECTIVE приводит к кешированию всех сущностей, кроме аннотированных @Cacheable (false) (или помечено как не кэшируемое в orm.xml). Значение по умолчанию, UNSPECIFIED означает, что поставщик JPA решает, какой будет эффективный дефолт. зимовать ORM по умолчанию имеет значение ENABLE_SELECTIVE, но полагаться на это не переносимо.

  • <validation-mode> указывает, следует ли применять Bean Validation к сущностям. NONE означает, что Bean Validation не включен, тогда как CALLBACK делает провайдера проверить все сущности при вставке, обновлении и удалении. AUTO имеет действующее значение CALLBACK если на пути к классам существует поставщик Bean Validation и эффективное значение NONE, если нет Поставщик Bean Validation существует на пути к классам. Если вы включите проверку, поставщик JPA настраивает новый валидатор для проверки ваших сущностей. Если вы настроили специальный Spring Framework Validator с вашими пользовательскими локализованными кодами ошибок, поставщик JPA игнорирует это. Поэтому лучше всего установить режим проверки NONE и использовать Bean Validation. до того, как ваш уровень персистентности вызывается.

  • <properties> предоставляет способ указать другие свойства JPA, включая стандартный JPA свойства (такие как строка подключения JDBC, имя пользователя и пароль или генерация схемы настройки), а также специфичные для провайдера свойства (такие как настройки Hibernate). Вы указываете одно или несколько свойств с использованием вложенных элементов, каждое из которых имеет имя и значение приписывать.

Nicholas S. Williams, Professional Java for Web Applications, (Indianapolis, Indiana: John Wiley & Sons, Inc., 2014), pg 584-585

0 голосов
/ 14 октября 2011

Когда вы конфигурируете источник данных на сервере приложений, все, что вам нужно установить в persistence.xml, - это JNDI-имя этого источника данных.

...