Я хотел бы написать менеджер транзакций, который бы поддерживал логику коммитирования с несколькими базами данных и максимальные усилия.
Есть веские причины, почему это не обычное дело. Вы, вероятно, не должны пытаться сделать это Вещью, пока не поймете, что это такое.
Если вам нужны гарантии, что транзакции вашего приложения восстановятся после сбоя, включая сбой сервера, тогда Full XA - ваш единственный выбор.
Это ... неправильно. Это правда, что вам нужны полные ACID гарантии, тогда XA в значительной степени ваш единственный выбор для совместимой передачи данных с участием баз данных. Однако, например, WS-AT - превосходный протокол транзакций ACID для веб-менеджеров ресурсов.
ACID транзакции - это еще не все. Для транзакций сагового типа вам нужна какая-то форма компенсации, которая обеспечивает обратные вызовы жизненного цикла приложения. WS-BA и более поздние микропрофильные спецификации LRA работают в этой области.
Итак, ваш выбор примерно таков: (неправильно) использовать XA, например, оптимизация фиксации последнего ресурса, многократные последние ресурсы или другие ослабленные гарантии и надежда на то, что JTA API достаточно гибок, или просто перейдите непосредственно к основанному на саге tx API, предназначенному для этой работы.
Я ожидаю написать ... простой и обслуживаемый компонент.
Независимо от того, какую модель транзакции вы выбираете, НЕ пытайтесь написать собственный менеджер транзакций для него с нуля. Координация распределенных транзакций полна хитрых угловых случаев, и создание правильного и надежного механизма намного сложнее, чем кажется на первый взгляд. Вместо этого используйте один из зрелых существующих менеджеров транзакций с открытым исходным кодом.
Narayana предоставляет полный ACID XA "из коробки", но может быть настроен для обеспечения максимальной эффективности в рамках API JTA, если вы действительно этого хотите. (Подсказка: нет). Также имеется поддержка саг через спецификации WS-BA и LRA, если вы предпочитаете идти по этому пути. Единственный заслуживающий доверия конкурент с сопоставимым набором функций вне полноценного сервера приложений JakaraEE - это Atomikos. Spring сам по себе НЕ является реализацией диспетчера распределенных транзакций, это API, который делегирует одному.