Двухфазная транзакция фиксации в Java EE 5



Я хочу знать, как я могу сделать двухфазную транзакцию фиксации с помощью Java EE5...Я использую EJB с JPA, который имеет hibernate, настроенный с MySql. Я просто хочу использовать спецификацию JAVA EE для транзакции, не используя конкретный объект hibernate или JDBC....

565   1  

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 менеджеры сущностей будут создано, где AS RESOURCE_LOCAL менеджеры сущностей будут созданы в среде Java SE. Кроме того, обратите внимание, что если вы зададите transaction-type как RESOURCE_LOCAL, то в среде Java EE поставщик JPA проигнорирует значение jta-data-source и вместо этого будет полагаться на значение non-jta-data-source для создания соединений.

Comments

    Ничего не найдено.