|
|
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
Всем здравствуйте! Подскажите пожалуйста, как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции? Работает вот такой вот код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. Создаю транзакцию вот таким вот способом -> eManager.getTransaction().begin(); Делаю EntityUtils.saveEntity(eManager, contract, contract.getContractId());, т.е. сохраняю сущность contract в базу. Код процедуры: Код: java 1. 2. 3. 4. 5. 6. Затем говорю commit, вот таким вот образом -> eManager.getTransaction().commit();. По ошибке происходит падение, сущность на которой произошло падение она логичным образом не вставляется в базу... а вот другие, вставлены... и какEntityManager-у сказать сделай rollback, я не понимаю, т.к. на этапе eManager.getTransaction().commit();, JPA завершает транзакцию и на этапе eManager.getTransaction().rollback(); получаем ошибку о том, что транзакция уже не активна... Люди добрые, подскажите пожалуйста, что я делаю не так? P.S. Сервак weblogic, тип транзакции JTA Код: java 1. Для тех, кто скажет, что нужно работать через eManager.joinTransaction();, пробовал, валится с ошибкой, не могу найти активную транзакцию... Всем заранее спасибо за ответ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2013, 17:12:34 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
http://stackoverflow.com/a/10967605 JTA транзакцией нужно управлять другими методами. Почему бы просто не использовать CMT - не понятно. ( http://docs.oracle.com/javaee/6/tutorial/doc/bncij.html) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2013, 17:19:43 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
Благодарю за ответ... но вторая ссылка не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2013, 17:24:00 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
РинБлагодарю за ответ... но вторая ссылка не работает. И некому же скобку убрать в адресной строке браузера... http://docs.oracle.com/javaee/6/tutorial/doc/bncij.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2013, 17:28:05 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
Извиняюсь не обратил внимания на скобку... Если я правильно понял, то UserTransaction используется в EJB... но у меня в проекте не EJB, как мне использовать userTransaction? Ранее пробовал ее использовать вот таким вот образом Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Падала сразу на loockup... что я тут неверно делаю... извиняюсь за возможно глупые вопросы, но я новичок в данном деле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2013, 17:32:47 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
РинЕсли я правильно понял, то UserTransaction используется в EJB... но у меня в проекте не EJB, как мне использовать userTransaction? А как нам узнать что у вас в проекте, если не EJB и вы нам не сообщаете. Если есть Spring, то можно в нем прописать использование JTA менеджера транзакций http://forum.springsource.org/showthread.php?58527-transaction-type-quot-JTA-quot-quot-RESOURCE_LOCAL-quot РинПадала сразу на loockup... Оно не "падала". А сообщало конкретую ошибку, которую почему-то все стесняются приводить на форумах. Ну, и JTA в PU вы же тоже с какой-то конкретной целью указали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2013, 17:37:43 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
Да с конкретной целью, что возможно что я не так что то делаю.... Использую в проекте EclipseLink, ни Spring-a, ни EJB-ки, ничего такого в проекте не используется. Я извиняюсь за дезинформацию... падает на eManager.joinTransaction(); Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. Т.к. читал, что в случае, если используется тип транзакции JTA, то нужно пользоваться данным методом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2013, 18:10:28 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
Может таки заменить JTA на локальный? Все равно не знаете зачем оно нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2013, 18:11:52 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
Нельзя, т.к. должен соединяться с базой через DataSourse настроенный на WebLogic. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2013, 18:24:21 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
Еще вопрос, при протухании транзакции, т.е. завершении по Timeout, как заново активировать транзакцию? При сохранении сидел в отладчике, на сервере был настроен timeout на 30 сек. они благополучно истекли и я получил ошибку, что транзакция завершена по timeout. При повторном сохранении получаю такую ошибку: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2013, 19:18:01 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
РинЕще вопрос, при протухании транзакции, т.е. завершении по Timeout, как заново активировать транзакцию?Стартануть новую. Можно с тем же запросом, т.к. предыдущий не был зафиксирован. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2013, 15:30:49 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovРинЕще вопрос, при протухании транзакции, т.е. завершении по Timeout, как заново активировать транзакцию?Стартануть новую. Можно с тем же запросом, т.к. предыдущий не был зафиксирован. А можно поподробнее, как это делается? При повторном нажатии на сохранить, происходит вызов transaction.begin(), но видимо транзакция не стартует, т.к. происходит выброс сообщения на transaction.commit(), что нет активной транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 12:22:26 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
Нашел решение своей проблемы, кому это интересно... В моем случае нужно использовать nonJTA и все прекрасно работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 12:23:59 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
Всем огромное спасибо за помощь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 12:24:32 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
РинНашел решение своей проблемы, кому это интересно... В моем случае нужно использовать nonJTA и все прекрасно работает. Не может быть: 14732390 ! Кстати, по одной из ссылок пробегала информация что даже Gavin King считает наличие API для управления транзакцией внутри EntityManager-а ошибкой. Потому как в большинстве случаев достаточно CMT, а в специальных случаях ручного управления проще использовать JTA API. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 12:26:58 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczРинНашел решение своей проблемы, кому это интересно... В моем случае нужно использовать nonJTA и все прекрасно работает. Не может быть: 14732390 ! Кстати, по одной из ссылок пробегала информация что даже Gavin King считает наличие API для управления транзакцией внутри EntityManager-а ошибкой. Потому как в большинстве случаев достаточно CMT, а в специальных случаях ручного управления проще использовать JTA API. Ну вы же там предлагали перейти на локальный ресурс, а мне это не подходит... А можно ссылочку? В моем случае немогу перейти на CMT, т.к. проект нужно было сдать еще вчера (как обычно...) На счет JTA, наш системный архитектор против этого, т.к. видит определенные проблемы в дальнейшем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 13:08:16 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
РинНу вы же там предлагали перейти на локальный ресурс, а мне это не подходит... Ну, объясните мне, пожалуйста, разницу между nonJTA и "локальным ресурсом". Я просто JEE бесовщину не практикую вот и плаваю в теории. Хочется услышать мнение практика. РинА можно ссылочку? В моем случае немогу перейти на CMT, т.к. проект нужно было сдать еще вчера (как обычно...) http://stackoverflow.com/questions/4709864/use-jta-transaction-or-not https://plus.google.com/105743409453530897815/posts/du7Kkm5tsWh РинНа счет JTA, наш системный архитектор против этого, т.к. видит определенные проблемы в дальнейшем. Против чего "этого". Против JTA? Если архитектор не может привести конкретики, то он действует "интуитивно" и архитектором считаться не может. Тем более, если у вас есть архитектор, то он вам и должен был рассказать как нужно управлять транзакциями в проекте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 13:56:44 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
авторавторРин Ну вы же там предлагали перейти на локальный ресурс, а мне это не подходит... Ну, объясните мне, пожалуйста, разницу между nonJTA и "локальным ресурсом". Я просто JEE бесовщину не практикую вот и плаваю в теории. Хочется услышать мнение практика. Могу ошибаться конечно, но на сколько я понял... ResourceLocal цепляется к базе через драйвер напрямую используя логин и пароль прописанный в persistance.xml. А nonJTA это тот же DataSource на WebLogic, только использует драйвер не XA а обычный(one-phase). авторавторРин На счет JTA, наш системный архитектор против этого, т.к. видит определенные проблемы в дальнейшем. Против чего "этого". Против JTA? Если архитектор не может привести конкретики, то он действует "интуитивно" и архитектором считаться не может. Тем более, если у вас есть архитектор, то он вам и должен был рассказать как нужно управлять транзакциями в проекте. Да, против использования JTA. В итоге он мне и помог разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 14:12:37 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
РинМогу ошибаться конечно, но на сколько я понял... ResourceLocal цепляется к базе через драйвер напрямую используя логин и пароль прописанный в persistance.xml. А nonJTA это тот же DataSource на WebLogic, только использует драйвер не XA а обычный(one-phase). Сюрприз: Код: xml 1. 2. РинДа, против использования JTA. В итоге он мне и помог разобраться. Ох. Остаётся вам пожелать успехов с таким архитектором, который абстрактно против JTA, но за ручное управление транзакциями через JPA API. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 14:17:55 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczРинМогу ошибаться конечно, но на сколько я понял... ResourceLocal цепляется к базе через драйвер напрямую используя логин и пароль прописанный в persistance.xml. А nonJTA это тот же DataSource на WebLogic, только использует драйвер не XA а обычный(one-phase). Сюрприз: Код: xml 1. 2. РинДа, против использования JTA. В итоге он мне и помог разобраться. Ох. Остаётся вам пожелать успехов с таким архитектором, который абстрактно против JTA, но за ручное управление транзакциями через JPA API. Каюсь, не обратил внимание на transaction-type. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 15:07:24 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
Кстати, хочу обратить внимание, что JTA, XA и two phase commit это не слова синонимы. А совершенно разные конкретные понятия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 15:14:56 |
|
||
|
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczКстати, хочу обратить внимание, что JTA, XA и two phase commit это не слова синонимы. А совершенно разные конкретные понятия. На счет JTA и XA это понятно... Что такое XA? Как weblogic пишет, он включает глобальные транзакции и 2-х фазные транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 17:11:28 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38374414&tid=2128765]: |
0ms |
get settings: |
17ms |
get forum list: |
24ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
43ms |
get topic data: |
19ms |
get forum data: |
5ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
| others: | 293ms |
| total: | 499ms |

| 0 / 0 |
