Re[2]: [spring] Одна транзакция на несколько потоков
От: hrensgory Россия  
Дата: 11.01.12 13:24
Оценка: 5 (2)
On 11.01.2012 16:59, Blazkowicz wrote:

> Не очень понятно какая у вас инфраструктура. JTA это абстрактный

> механизм, поддерживающий множество транзакционных ресурсов.
> JDBC транзакция это уже отдельная тема. Для начала расскажите как это у
> вас должно работать. Потому что Connection в JDBC он не thread safe. И,
> AFAIK, транзакция БД всегда привязана к одному соединению.
> Поэтому в рамках одной транзакции всег обращения к базе придется
> сериализовать в ручную. Соответственно становится не понятно зачем тогда
> многопоточность?

Скорее всего ТС имеет в виду распределённую транзакцию (XA Transaction,
two-phase commit), а Connection в каждом потоке будет свой, взятый из
соответсвующим образом сконфигурированного DataSource.

Так можно сделать, конечно, но далеко не все драйвера и базы нормально
это поддерживают. Касательно спринга надо гуглить по "xa transaction
spring"

--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: [spring] Одна транзакция на несколько потоков
От: Blazkowicz Россия  
Дата: 11.01.12 13:33
Оценка: 4 (1)
Здравствуйте, hrensgory, Вы писали:


H>Скорее всего ТС имеет в виду распределённую транзакцию (XA Transaction,

H>two-phase commit), а Connection в каждом потоке будет свой, взятый из
H>соответсвующим образом сконфигурированного DataSource.
Да, блин. Че-т я тупанул. Ведь каждый Connection можно оформить как отельный XA ресурс. Сбило то что а автора одни сервлеты.

H>Так можно сделать, конечно, но далеко не все драйвера и базы нормально

H>это поддерживают. Касательно спринга надо гуглить по "xa transaction
H>spring"
Если контейнер сервлетов, то берем Atomicos
http://www.atomikos.com/Documentation/SpringIntegration
Если полноценный J2EE контейнер, то прикручиваем через спринговый JtaTransactionManager.

Останется только вручную починать и заканчитьвать транзакцию. Хотя, возможно, Spring через @Async умеет.
Re[4]: [spring] Одна транзакция на несколько потоков
От: hrensgory Россия  
Дата: 12.01.12 07:18
Оценка: 4 (1)
On 11.01.2012 18:10, A13x wrote:

> Здравствуйте, hrensgory, Вы писали:

>
> H>..
>
> Используется оракл и jetty.

Oracle — ок, по поводу jetty точно сказать не могу. Читайте здесь как в
ней сделать JTA (чтобы в JNDI появилась java:comp/UserTransaction):

http://docs.codehaus.org/display/JETTY/JNDI

По идее после этого можно использовать в спринге JTA Transaction Manager
и всё должно заработать. Дальше надо проверять на практике.

--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
[spring] Одна транзакция на несколько потоков
От: A13x США  
Дата: 11.01.12 12:36
Оценка:
Хочется следующего:

Стартуем глобальную транзакцию в рамках некоторого "основного" потока.
В рамках этой транзакции работают несколько "дочерних" потоков, "основной" поток ожидает завершения каждого из "дочерних".
После этого делается в рамках "основного" потока rollback или commit на глобальную транзакцию.

Знаю, что в JTA, похоже, это возможно — "Multiple threads may concurrently be associated with the same global transaction." — JTA spec v1.1, section 3.2, page 13, но я работаю с обычным сервлетом (и, соответственно, контейнером сервлетов) и не могу использовать Application Server.

Используется обычный спринговый DataSourceTransactionManager.
Как это сделать на нем?
Re: [spring] Одна транзакция на несколько потоков
От: Blazkowicz Россия  
Дата: 11.01.12 12:59
Оценка:
Здравствуйте, 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, транзакция БД всегда привязана к одному соединению.
Поэтому в рамках одной транзакции всег обращения к базе придется сериализовать в ручную. Соответственно становится не понятно зачем тогда многопоточность?
Re[4]: [spring] Одна транзакция на несколько потоков
От: A13x США  
Дата: 11.01.12 14:04
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, hrensgory, Вы писали:

...
B>Останется только вручную починать и заканчитьвать транзакцию. Хотя, возможно, Spring через @Async умеет.
Вот с этим самая загвоздка.
Вопрос — как?
Не понимаю, как указать, что конкретный сервис будет использовать некоторую глобальную транзакцию.
Пните пожалуйста в правильном направлении
Re[3]: [spring] Одна транзакция на несколько потоков
От: A13x США  
Дата: 11.01.12 14:10
Оценка:
Здравствуйте, hrensgory, Вы писали:

H>..


Используется оракл и jetty.
Re[5]: [spring] Одна транзакция на несколько потоков
От: Blazkowicz Россия  
Дата: 11.01.12 14:58
Оценка:
Здравствуйте, A13x, Вы писали:

A>Вот с этим самая загвоздка.

A>Вопрос — как?
A>Не понимаю, как указать, что конкретный сервис будет использовать некоторую глобальную транзакцию.
A>Пните пожалуйста в правильном направлении
Копать нужно в сторону исходников менеджера транзакций в Spring
Re: [spring] Одна транзакция на несколько потоков
От: toxin Россия  
Дата: 12.01.12 15:09
Оценка:
Здравствуйте, A13x, Вы писали:

A>Хочется следующего:


A>Стартуем глобальную транзакцию в рамках некоторого "основного" потока.

A>В рамках этой транзакции работают несколько "дочерних" потоков, "основной" поток ожидает завершения каждого из "дочерних".
A>После этого делается в рамках "основного" потока rollback или commit на глобальную транзакцию.

Возможно, стоит посмотреть в сторону Spring Batch.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re: [spring] Одна транзакция на несколько потоков
От: . Великобритания  
Дата: 12.01.12 20:14
Оценка:
Здравствуйте, A13x, Вы писали:

A> Хочется следующего:

можно тут посмотреть http://stackoverflow.com/questions/5280222/java-xa-transaction-propagation-within-many-threads
но тут без спринга.
avalon 1.0rc3 rev 0, zlib 1.2.3.4
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.