У меня есть вопросы, указанные ниже:
- В чем разница между этими двумя?
- Оба ли они поддерживаются всеми базами данных?
- Отличаются ли JPA TransactionManager и JTA TransactionManager?
Реализации JPA имеют выбор: управлять транзакциями сами ( RESOURCE_LOCAL
) или управлять ими с помощью реализации JTA сервера приложений.
В большинстве случаев RESOURCE_LOCAL подходит. Это будет использовать базовые транзакции уровня JDBC. Обратной стороной является то, что транзакция является локальной для блока сохраняемости JPA, поэтому, если вы хотите, чтобы транзакция охватывала несколько блоков сохраняемости (или другие базы данных), то RESOURCE_LOCAL может быть недостаточно хорошим.
JTA также используется для управления транзакциями в таких системах, как JMS и JCA, но для большинства из нас это довольно экзотическое использование.
Чтобы использовать JTA, вам нужна поддержка на вашем сервере приложений, а также поддержка со стороны драйвера JDBC.
В дополнение к другим ответам
Вот отрывок из чрезвычайно полезной статьи (опубликованной на веб- сайте Apache TomEE ), которая также может помочь ответить на первый вопрос ОП (ссылка на статью ниже).
Всем, кто заинтересован в изучении Java Persistence API, сделайте себе одолжение и прочтите полную статью здесь: Концепции JPA: JPA 101 .
источник
transaction-type=RESOURCE_LOCAL
и@PersistenceContext
и@Transactional
управляется SpringResource_Local и JTA - менеджеры транзакций (методы выполнения транзакций). Это не свойство базы данных, а компонент, отвечающий за координацию транзакций. Менеджеры транзакций JPA и JTA разные. Менеджер транзакций JPA отвечает за транзакции JPA, и вы хотите использовать его, если выполняете только транзакцию JPA. Диспетчер транзакций JTA - это диспетчер транзакций общего назначения, который может задействовать в транзакции другие ресурсы, такие как очереди JMS. Обычно в контейнерах Java EE используется диспетчер транзакций JTA для EJB, объектов JPA и т. Д.
источник
resource_local против JTA - это локальная транзакция и глобальная транзакция. Речь идет о том, можем ли мы управлять несколькими ресурсами в рамках одной транзакции.
CMT против BMT - это о том, кто открывает и закрывает транзакцию - разработчик приложения или сервер приложений.
источник