Ответ 1
На самом деле существует множество ресурсов, отвечающих на ваши первые два вопроса, например Spring Documentation объясняет, что такое локальная и глобальная транзакция, и отображает их различия в главе 9.2 Мотивация. В двух словах:
Глобальная транзакция - это управляемая сервером приложений транзакция, позволяющая работать с разными транзакционными ресурсами (это могут быть две разные базы данных, база данных и очередь сообщений и т.д.)
Локальная транзакция - это транзакция, зависящая от ресурса (например, Транзакции Oracle), и сервер приложений не имеет к ним никакого отношения. (та же глава объясняет все "за" и "против" каждого из них очень хорошо и намного лучше, чем я мог бы объяснить, поэтому я предлагаю вам взглянуть поближе)
Отвечая на ваш следующий вопрос. В документации говорится, что JpaTransactionManager
способен обрабатывать глобальные транзакции, поэтому, глядя на фрагмент представленного кода, трудно сказать, является ли это локальной или глобальной транзакцией. В той же документации говорится, что вместо этого следует использовать локальную одноресурсную транзакцию DataSourceTransactionManager
.