Двухфазная транзакция фиксации в Java EE 5
Я хочу знать, как я могу сделать двухфазную транзакцию фиксации с помощью Java EE5...Я использую EJB с JPA, который имеет hibernate, настроенный с MySql. Я просто хочу использовать спецификацию JAVA EE для транзакции, не используя конкретный объект hibernate или JDBC....
1 ответ:
Все, что вам нужно сделать, чтобы гарантировать, что транзакции JTA используются для выполнения всей транзакционной работы в JPA, - это указать, что тип единицы сохранения-JTA, и назначить источник данных JTA для использования поставщиком JPA. Ваша настойчивость.xml-файл будет иметь содержимое, подобное следующему:
Кроме того, необходимо убедиться, что источник данных, определенный в атрибуте<persistence version="1.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_1_0.xsd"> <!-- Specifies the type of the entity managers used by the persistence unit, as a JTA entity manager --> <persistence-unit name="example-pu" transaction-type="JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <!-- Specifies a JTA datasource for use by the JPA provider. All connections obtained by the JPA provider for this persistence unit will be from this datasource --> <jta-data-source>jdbc/myDS</jta-data-source> ... </persistence-unit> </persistence>jta-data-source, не использует оптимизацию, например разрешение локальных транзакций. Проще говоря, все транзакции включением указанного источника данных должны быть транзакции XA, или источник данных должен быть источником данных XA без какой-либо поддержки локальных транзакций. Обратите внимание, что простого указания источника данных JTA недостаточно. Вы должны определить единицу персистентности как единицу, требующую использования менеджеров сущностей JTA, поскольку неопределенное значение атрибутаtransaction-typeзависит от среды, в которой работает поставщик JPA. Если поставщик работает в среде Java EE,JTAменеджеры сущностей будут создано, где ASRESOURCE_LOCALменеджеры сущностей будут созданы в среде Java SE. Кроме того, обратите внимание, что если вы зададитеtransaction-typeкакRESOURCE_LOCAL, то в среде Java EE поставщик JPA проигнорирует значениеjta-data-sourceи вместо этого будет полагаться на значениеnon-jta-data-sourceдля создания соединений.
Comments