JTA Как получить текущую транзакцию (JNDI?, ServiceLoader?)? Зарегистрировать Синхронизацию
У меня есть небольшая пользовательская библиотека, которая должна быть транзакционной. Для поддержки JTA я хочу реализовать и опубликовать синхронизацию (я хочу, чтобы она была простой, поэтому XAResource отсутствует).
1: я могу бросить исключение (OptimisticLocking) в beforeCompletion?
Однако, когда я открываю свой транзакционный ресурс в потоке, мне нужно зарегистрировать его в текущей транзакции JTA. Сначала я подумал, что это возможно с помощью TransactionSynchronizationRegistry. Но это, кажется, хранилище значений ключей, которое я должен использовать для своих локальных данных транзакции.
2: TransactionSynchronizationRegistry используется для поддержки приостановки / возобновления транзакции?
Таким образом, чтобы зарегистрировать мою синхронизацию, мне нужна транзакция JTA (или TransactionManager, который может дать мне текущую транзакцию). Согласно Javadoc JTA 1.1 нет поиска JNDI для его решения и никаких подсказок по использованию java ServiceLoader.
3: означает ли это, что разрешение текущей транзакции зависит от поставщика?
4: существует ли стандартный, независимый от поставщика способ разрешения текущей транзакции? (если нет, я предоставлю интерфейс потребителя и буду использовать инфраструктуру ServiceLoader для разрешения его реализаций. Поэтому разработчик, отвечающий за интеграцию, должен обеспечить способ разрешения транзакции)