Если UserTransaction
недоступен, это, скорее всего, означает, что вы не настроили менеджер транзакций. Возможности @Transactional
и @Inject UserTransaction
определены в JTA spe c, который реализуется менеджером транзакций.
Сварка используется в WildFly и хорошо интегрируется с Narayana. Это один из вариантов для вас go (отказ от ответственности: я разработчик в http://narayana.io проекте).
Поскольку ваше приложение работает в автономном режиме, вам нужно будет предоставить немного Битовая интеграция выше. Отправной точкой является добавление зависимости к
<groupId>org.jboss.narayana.jta</groupId>
<artifactId>cdi</artifactId>
Затем вы должны реализовать интерфейс SPI Weld поверх него (пример здесь приведен в кратком обзоре Narayana: https://github.com/jbosstm/quickstart/blob/master/jta-1_2-standalone/src/test/java/org/jboss/narayana/quickstarts/jta/cdi/CDITransactionServices.java)
Я написал сообщение в блоге об этом, и вы можете найти более подробную информацию здесь: http://jbossts.blogspot.com/2019/04/jta-and-cdi-integration.html
Если у вас возникла проблема с переносом зависимости менеджера транзакций в ваш проект - я понимаю может возникнуть беспокойство по поводу расширения списка зависимостей или о некотором влиянии на производительность (даже я считаю это беспокойство безосновательным, но это другое обсуждение) - тогда вам нужно будет настроить EntityManager
для работы с локальной транзакцией. Использование <non-jta-data-source>
может помочь здесь. Hibernate должен выполнить запрос вставки внутри транзакции. Это обязательное условие.
Имейте в виду, что если вы настроите EntityManager
для использования локальных транзакций ресурса, тесты могут начать работать, но вы все равно не сможете использовать @Inject UserTransaction
или @Transactional
, поскольку они являются возможностями, предоставляемыми Менеджер транзакций.