Как загрузить EntityManagerFactory с помощью внешнего подключения и TransactionManager - PullRequest
0 голосов
/ 12 октября 2018

Пишу «компонент» (.jar) для загрузки и выполнения сторонним приложением.Это приложение имеет API, чтобы предоставить мне соединение, а также TransactionManager.Предполагается, что мой компонент будет участвовать в уже запущенных транзакциях, поэтому он не должен применять управление транзакциями (close, commit и rollback запрещены в предоставленных Соединениях).Для кода, связанного с сущностями, я использую JPA с реализацией Hibernate

, какой подход я должен использовать, чтобы мой EntityManagerFactory использовал эти предоставленные извне диспетчер соединений и транзакций?Для чистого Hibernate я нашел упоминания об интерфейсе ConnectionProvider, который предположительно должен позволять мне предоставлять любое соединение, которое я хочу, но я не мог найти способ использовать это для EntityManagerFactory, а также я не совсем понимаюроль TransactionManager.

Я пытался реализовать SimpleConnectionWrapperDataSource, где я в основном оборачиваю предоставленное соединение в фиктивную реализацию DataSource, но это терпит неудачу, потому что EntityManager пытается закрыть транзакцию на нем перед его использованием, и этоЗапрещенная операция.Так как же мне явно указать EMF никогда не связываться с моими соединениями?

1 Ответ

0 голосов
/ 17 октября 2018

Мой коллега нашел способ обойти эту проблему.Решение сводится к следующему:

1) Реализация ConnectionProvider, которая возвращает предоставленный контейнером экземпляр Connection при каждом вызове getConnection (а также имеет пустое тело для closeConnection метода)

2) Указание имени класса этой реализации как hibernate.connection.provider_class свойство JPA

3) Предоставление TransactionManager следующим образом:

@Bean
public PlatformTransactionManager transactionManager(){
    return new JtaTransactionManager(TransactionManagerUtils.getManager());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...