|
|
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
Добрый вечер, возник следующий вопрос: как сделать так, чтоб транзакция hibernate и транзакция JCR(jackrabbit) работали вместе, то есть были в 1 транзакции и в случаи ошибки либо в базе либо в хранилище производили совместный откат. Я слышал что применяют 2х фазные транзакции и распределенные ресурсы, но нормальной информации как подружить именно 2 эти вещи в интернете не нашел. Буду очень благодарен за любую информацию. В проекте так же используется spring, именно он и открывает транзакцию на уровни сервисов, сессия хиберната открывается в фильтре при запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2012, 23:13:10 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
slippery, может поможет http://samolisov.blogspot.com/2011/02/xa-jta-javase-spring-atomikos.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2012, 23:55:44 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 00:01:51 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
спасибо за ответы, я видел эти посты но проект Jenks с 2007 года не обновляется, может он теперь по другому называется и есть пример с современными технологиями? Как именно с jackrabbit работать, с хибернатом я понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 01:03:20 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
я именно не нашел примеров как так(XA) подключить и работать с jackrabbit используя спринг и в качестве сервера tomcat или jetty. причем на новых технологиях или библиотеках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 01:11:04 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
неужели никто и никогда во всем форуме не дружил(чтоб в 1 транзакции работали) вместе hibernate и jcr(jackrabbit)??? я решаю уникальную задачу что ли?)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 14:14:18 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
1) Определить декларативный менеджер транзакций для Хибера 2) Определить декларативный менеджер транзакций для JCR 3) Написать метод, который работает с хибером и JCR, и по которому будут определяться границы транзакции 4) Обернуть метод обоими менеджерами транзакций через AOP 5) PROFIT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 14:27:09 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
В спринге оба менеджера транзакций доступны "из коробки" - http://www.infoq.com/articles/spring-modules-jcr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 14:31:11 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
По поводу двух-фазного коммита. Совсем не объязательно чтобы все ресурсы были XA. В вашем случае достаточно одного. Либо XA JDBC драйвер. Либо XA Jackrabbit. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 14:33:19 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПо поводу двух-фазного коммита. Совсем не объязательно чтобы все ресурсы были XA. В вашем случае достаточно одного. Либо XA JDBC драйвер. Либо XA Jackrabbit.Эмм, а как тогда не-XA ресурс будет участвовать в двухфазном коммите, если он не знает о таком понятии в принципе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 14:42:31 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
svenomЭмм, а как тогда не-XA ресурс будет участвовать в двухфазном коммите, если он не знает о таком понятии в принципе? А ему и не нужно. Почитай на википедии хотя бы про двухфазный комит. Суть в том что последний ресурс в цепочке может не поддерживать 2х фазный комит. Он ему не нужен. Смотри. Два XA ресурса JDBC XA precommit -> JCR XA precommit -> JCR XA commit -> JDBC XA commit Один XA ресурс JDBC XA precommit -> JCR Non-XA commit -> JDBC XA commit Распределенная транзакция одинаково хорошо отработает в обоих случаях. Крайнему ресурсу (JCR в этом примере) нет никакой надобности делать precommit, чтобы сразу после этого сделать commit. Т.к. он крайний, то между precommit и commit никакого исключения, которое может привести к откату не произойдёт. Вместо отката на precommit он может откатится на обычном commit. Поэтому XA ему и не нужно... Если я правильно понимаю XA. Возможно я ошибаюсь и XA всё равно нужен чтобы тупо участвовать в JTA транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 14:48:56 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
А что будет если второй ресурс(не XA) обрыгается на коммите? Как откатить первый XA ресурс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 15:02:10 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
забыл никА что будет если второй ресурс(не XA) обрыгается на коммите? Как откатить первый XA ресурс? JTA менеджер транзакций перехватит откат на Non-XA ресурсе и скажет откатиться XA ресурсу (или всем остальным XA ресурсам если их больше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 15:10:37 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл никА что будет если второй ресурс(не XA) обрыгается на коммите? Как откатить первый XA ресурс? JTA менеджер транзакций перехватит откат на Non-XA ресурсе и скажет откатиться XA ресурсу (или всем остальным XA ресурсам если их больше). И все равно не много непонимаю, а что если коммит в non-xa прошел успешно, и тут один из XA-ресурсов сдох(после того как pre-commit вернул true)? В общем пока для меня это загадочно, вот сижу разибраюсь, нашел пару ссылок вроде неплохих. Эта техника называется last participiant или last agent optimization http://stackoverflow.com/questions/2413911/if-i-access-usertransaction-does-this-mean-that-i-use-2-phase-commit-or-xa а вот это вообще интересно - там несколько техник оптимизации http://www.google.by/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CE8QFjAB&url=http%3A%2F%2Fwww.almaden.ibm.com%2Fu%2Fmohan%2FICDE93Commit.pdf&ei=fxq-T62uBdTAgQf41M2jDw&usg=AFQjCNFNmQjPNqObd026-9wtkckXoR0Drg ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 15:25:59 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
Вообще я раньше думал что эта оптимизации состоит в том что мы просто экономим на pre-commit для последнего ресурса, но все они обязаны быть XA, но немного подумав теперь начинаю понимать что вроде ничего не мешает последнему ресурсу быть не XA. Хм интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 15:30:44 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
забыл никИ все равно не много непонимаю, а что если коммит в non-xa прошел успешно, и тут один из XA-ресурсов сдох Это к теме отношения не имеет. Это к вопросу про двухфазный комит, в целом. Полагаю что менеджер транзакций будет ждать пока XA ресурс не восстановится и потом сделает там коммит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 15:31:44 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
забыл никВообще я раньше думал что эта оптимизации состоит в том что мы просто экономим на pre-commit для последнего ресурса, но все они обязаны быть XA, но немного подумав теперь начинаю понимать что вроде ничего не мешает последнему ресурсу быть не XA. Хм интересно. На сколько я понимаю, XA это именно возможность поддерживать 2х фазный коммит. А не просто участвовать в JTA транзакции. Вот такие ссылки меня только убеждают в моей правоте: http://stackoverflow.com/questions/2878597/local-transaction-already-has-1-non-xa-resource-cannot-add-more-resources-err ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 15:36:08 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
Вот ещё любопытно почитать про recovery http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.admin.doc/admin708.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 15:37:47 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНа сколько я понимаю, XA это именно возможность поддерживать 2х фазный коммит. А не просто участвовать в JTA транзакции. Вот такие ссылки меня только убеждают в моей правоте: http://stackoverflow.com/questions/2878597/local-transaction-already-has-1-non-xa-resource-cannot-add-more-resources-err Да, думаю вы правы. Однако нашел в комментариях интересный момент - "LLR (aka LPS / last participant support in WAS) introduces the risk of a heuristic hazard: if the 1PC resource does not respond (timeout, lost connection, etc.), there is no way to know what the outcome of the XA resource branches should be" В принципе теперь все стало на свои места для меня, спасибо за обсуждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 15:45:41 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
забыл никОднако нашел в комментариях интересный момент - "LLR (aka LPS / last participant support in WAS) introduces the risk of a heuristic hazard: if the 1PC resource does not respond (timeout, lost connection, etc.), there is no way to know what the outcome of the XA resource branches should be" А мне теперь не понятно какое отношение к этому имеет оптимизация. Ну пусть там будет 2 XA ресурса. Один делает commit, второй отваливается. Разницы никакой нет. Есть некая recovery стратегия, по ней такой failure и обрабатывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 15:58:52 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл никОднако нашел в комментариях интересный момент - "LLR (aka LPS / last participant support in WAS) introduces the risk of a heuristic hazard: if the 1PC resource does not respond (timeout, lost connection, etc.), there is no way to know what the outcome of the XA resource branches should be" А мне теперь не понятно какое отношение к этому имеет оптимизация. Ну пусть там будет 2 XA ресурса. Один делает commit, второй отваливается. Разницы никакой нет. Есть некая recovery стратегия, по ней такой failure и обрабатывается. Так там 2 ресурса: один XA, второй нет (1 phase commit). Вообще мы не так давно разбирались с темой 2PC против Paxos и потратили пару недель чтобы осилить. После этого я понял, что надо отвечать на вопрос на собеседовании "расскажите как работает 2PC" :) Действительно, TM может (должен) вести доп. записи в локальном durable сторадже о том, будет ли он коммитить или откатывать конкретную транзакцию. Это нужно на тот случай если он сам помрёт после принятия такого решения. Далее high level recovery стратегия очень простая: просто делаем retry принятого решения по транзакции пока оно не пройдёт. Если какие-то TM/RM падают, просто ждём пока они переподнимуться и повторяем. Теперь случай с 1PC. Чтобы понять в чём проблема, надо ОЧЕНЬ внимательно посмотреть на АПИ: http://docs.oracle.com/javase/1.5.0/docs/api/javax/transaction/xa/XAResource.html. Видите метод recover? :) Если XA ресурс помер посредине коммита, то после рестарта TM получит с него список транзакций для recovery и будет делать для них commit/rollback. А вот с 1PC такого не сделаешься в виду отсутствия АПИ. Пример - TM делает: 1. На XA - prepare, return success. 2. На 1PC - commit, случается таймаут. Например 1PC уходит в оффлайн, потом перезапускается и TM не знает прошёл ли commit. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 22:06:29 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
rrrrrrrr1. На XA - prepare, return success. 2. На 1PC - commit, случается таймаут. Например 1PC уходит в оффлайн, потом перезапускается и TM не знает прошёл ли commit. Большое спасибо! Теперь понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 22:28:41 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
Видите метод recover? :) Если XA ресурс помер посредине коммита, то после рестарта TM получит с него список транзакций для recovery и будет делать для них commit/rollback. А вот с 1PC такого не сделаешься в виду отсутствия АПИ. Если non-XA ресурс сдох, то TM с полным правом может считать, что транзакцию надо откатывать. При этом транзакция в non-XA ресурсе как бы откатилась сама собой, транзакцию в XA ресурсах TM должен откатить явным образом. Разве не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 23:02:41 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
Написал глупость. Есть два события: 1)Non-XA записал коммит в свой лог. 2)TM получил ответ от non-XA о коммите и записал это в свой лог. Если между этими событиями происходит сбой, то либо 1)TM будет считать, что комит в XA прошел, хотя он не прошел либо 2)TM будет считать, что комит в XA не прошел, хотя он прошел в зависимости от того, как TM упорядочивает события 1 и 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2012, 23:10:53 |
|
||
|
Интеграция сервисов, единая транзакция
|
|||
|---|---|---|---|
|
#18+
svenom1) Определить декларативный менеджер транзакций для Хибера 2) Определить декларативный менеджер транзакций для JCR 3) Написать метод, который работает с хибером и JCR, и по которому будут определяться границы транзакции 4) Обернуть метод обоими менеджерами транзакций через AOP 5) PROFIT я так понимаю судя по ссылке это менеджер: org.springmodules.jcr.jackrabbit.LocalTransactionManager? А кто будет координатором транзакций? если я определю 2 менеджера и повешу их на 1 метод, то просто первый откроет транзакцию свою, а второй свою. Оба будут вынимать свои сессии из локальных переменных потока и коммитить их, но не будут работать в единой цепочки как я понимаю. Для этого нужен третий(или возможно первый и единственный) который будет координировать действия создавать говорить, что нужно создать precommit, потом коммит, что будет являться этим координатором и как он настраивается? Если его реализация в спринге? Подойдет ли для работы с координатором org.springmodules.jcr.jackrabbit.LocalTransactionManager в jcr? Прошу прощения если несу чушь, но в данной теме полный новичок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2012, 03:16:04 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37806871&tid=2131719]: |
0ms |
get settings: |
12ms |
get forum list: |
28ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
67ms |
get topic data: |
34ms |
get forum data: |
6ms |
get page messages: |
157ms |
get tp. blocked users: |
2ms |
| others: | 323ms |
| total: | 641ms |

| 0 / 0 |
