3 ответов:
реализации JPA имеют возможность самостоятельно управлять транзакциями (
RESOURCE_LOCAL), или управляя ими с помощью реализации JTA сервера приложений.в большинстве случаев RESOURCE_LOCAL-это нормально. Это будет использовать базовые транзакции уровня JDBC. Недостатком является то, что транзакция является локальной для единицы персистентности JPA, поэтому если вы хотите транзакцию, которая охватывает несколько единиц персистентности (или другие базы данных), то RESOURCE_LOCAL может быть недостаточно хорошим.
наша является также используется для управления транзакциями в таких системах, как JMS и JCA, но это довольно экзотическое использование для большинства из нас.
чтобы использовать JTA, вам нужна поддержка для него на вашем сервере приложений, а также поддержка от драйвера JDBC.
в дополнение к другим ответам
здесь цитата из чрезвычайно полезной статьи (опубликованной на Apache TomEE сайт), что также может помочь ответить на первый вопрос ОП (ссылка на статью приведена ниже).
сравнение RESOURCE_LOCAL и JTA persistence контексты
с
вы отвечают за EntityManager (PersistenceContext/Cache) создание и отслеживание...
- вы должны использовать EntityManagerFactory чтобы получить EntityManager
- в результате EntityManager экземпляр и A PersistenceContext / Cache
- An EntityManagerFactory смогите быть впрыснуто через @PersistenceUnit аннотация (не @PersistenceContext)
- вы не разрешено используйте @PersistenceContext для ссылки на единицу типа RESOURCE_LOCAL
- вы должны использовать EntityTransaction API для начала / фиксации вокруг каждый позвоните своему EntityManger
- вызов entityManagerFactory.createEntityManager () дважды приводит к два отдельным Экземпляры EntityManager и для них два отдельные PersistenceContexts/Caches.
- It это почти никогда не хорошая идея, чтобы иметь более одного экземпляр используемого EntityManager (не создавайте второй, если вы не уничтожили первый)
с
в контейнер будет делать EntityManager (PersistenceContext/Cache) создание и отслеживание...
- вы не может использовать EntityManagerFactory чтобы получить EntityManager
- вы можете получить только в EntityManager поставлен контейнер
- An EntityManager может быть введен через @PersistenceContext аннотация (не @PersistenceUnit)
- вы не разрешено использовать @PersistenceUnit для ссылки на a единица измерения типа JTA
- The EntityManager данное контейнер ссылка к PersistenceContext / Cache, связанный с транзакцией JTA.
- если транзакция JTA не выполняется, то EntityManager нельзя использовать потому что нет PersistenceContext/Cache.
- все с EntityManager ссылка на тот же блок in элемент то же самое транзакция автоматически будет иметь ссылку на тот же PersistenceContext/Cache
- в PersistenceContext / Cache is вспыхнул и снят в Наша commit времени
все, кто заинтересован в изучении Java Persistence API-пожалуйста, сделайте себе одолжение и прочитайте полную статью здесь:концепции JPA: JPA 101.
Resource_Local и JTA являются менеджерами транзакций (методы выполнения транзакций). Это не свойство базы данных, а компонент, ответственный за координацию транзакций. Менеджеры транзакций JPA и JTA отличаются. Менеджер транзакций JPA отвечает за транзакции JPA, и вы хотите использовать его, если вы только делаете транзакцию JPA. JTA transaction manager является менеджером транзакций общего назначения и может привлекать другие ресурсы, такие как очереди JMS в транзакции. Типично Контейнеры Java EE используют диспетчер транзакций JTA для объектов EJBs, JPA и т. д.
Comments