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