Здравствуйте, A13x, Вы писали:
A>Хочется следующего:
A>Стартуем глобальную транзакцию в рамках некоторого "основного" потока. A>В рамках этой транзакции работают несколько "дочерних" потоков, "основной" поток ожидает завершения каждого из "дочерних". A>После этого делается в рамках "основного" потока rollback или commit на глобальную транзакцию.
A>Знаю, что в JTA, похоже, это возможно — "Multiple threads may concurrently be associated with the same global transaction." — JTA spec v1.1, section 3.2, page 13, но я работаю с обычным сервлетом (и, соответственно, контейнером сервлетов) и не могу использовать Application Server.
A>Используется обычный спринговый DataSourceTransactionManager. A>Как это сделать на нем?
Не очень понятно какая у вас инфраструктура. JTA это абстрактный механизм, поддерживающий множество транзакционных ресурсов.
JDBC транзакция это уже отдельная тема. Для начала расскажите как это у вас должно работать. Потому что Connection в JDBC он не thread safe. И, AFAIK, транзакция БД всегда привязана к одному соединению.
Поэтому в рамках одной транзакции всег обращения к базе придется сериализовать в ручную. Соответственно становится не понятно зачем тогда многопоточность?