|
|
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
Petro123natanabrahamjr, и не забудь, что у профи выходные). Петр.. я создавал И через екзекутор (что с пакета канкарренси) И через аннотацию асинк . Уфф. яж не совсем дибил да ...НЕ ПАШЕТ :) вернее, не пашет так, как надо мне. причем, если сам создаю через екзекутор то оно просто игнорирует аннотацию транзакшнл, если создаю через асинк - тогда с этой аннотацией тупо падает вообще. раз ни у кого проблемы нет - может у меня проблема в конфиге? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2017, 14:50 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
natanabrahamjrтогда с этой аннотацией тупо падает вообще. Так тупо падает, что ни сообщения об ошибке ни стэка? А есть понимание что JDBC он однопоточный? Одна транзакция на разные потоки может не работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2017, 14:54 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
Blazkowicznatanabrahamjrтогда с этой аннотацией тупо падает вообще. Так тупо падает, что ни сообщения об ошибке ни стэка? А есть понимание что JDBC он однопоточный? Одна транзакция на разные потоки может не работать. Код: java 1. говорит вот это вот. ждбс однопоточный... и что? есть приложение, есть контейнер, который генерит эти потоки десятками. и ничего не мешает ждбсу работать не зная, что он однопоточный. я просто подсознательно понимаю, что всё просто. но где ошибка - не пойму. я вот никак не разумею, такие задачи что надо на джей-мс выносить или какой-нибудь раббит-мк по хорошему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2017, 15:48 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
natanabrahamjrждбс однопоточный... и что? Не, ничего. Всё нормально. Ты, походу, сам в курсе всего. Исключения хотя бы читать научись, чтобы источник его найти, а не самое верхнее сообщение об ошибке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2017, 16:23 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
Blazkowicznatanabrahamjrждбс однопоточный... и что? Не, ничего. Всё нормально. Ты, походу, сам в курсе всего. Исключения хотя бы читать научись, чтобы источник его найти, а не самое верхнее сообщение об ошибке. ну скажем так это самое громкое. вот еще есть такое: авторCaused by: org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet еще ругается что не может найти таблицу. собссно всё.. вы думаете, я бы тут мучался второй день если бы что-то читаемое было в логе? меня вполне удовлетворит просто знание того что асинк+транзакшнл вообще и в принципе использовать МОЖНО. ну или не можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2017, 21:33 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
источник исключения - это первое же обращение к базе через репозиторий внутри метода помеченного асинк и транзакшнл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2017, 21:35 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
в общем, судя по мануалу, работать должно как есть. но не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2017, 21:44 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
в общем.. по ходу кажется решил.. :) точно должно работать как есть без дополнительной порнографии. Определил бин екзекьютора в яваконфиге бута на concurrent.ThreadPoolTaskExecutor, и явно указал асинку пользоваться именно этим бином. Аллиллуя! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 00:16 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
natanabrahamjrв общем, судя по мануалу, работать должно как есть. но не работает. Нет никаких "должно" - есть конкретные требования - один поток, одна транзакция. Не нужно пытаться продолжить текущую транзакцию в Async методе. Нет никаких "не работает". Есть конкретные исключения, сообщения об ошибках или не верное диагностическое состояние. Что именно происходит? Исключение? В какой момент? stacktrace мы так и не увидим. Корневое сообщение об ошибке тоже, похоже, тайна покрытая мраком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 10:35 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Блакович, так я и не пытался "продлить" транзакцию. я просто хотел иметь транзакцию, дабы был доступ к лейзи полям. пусть будет новая транзакция - ни разу не проблема. у меня же приложение ложилось, если я просто ставил анноташку транзакшнл. фулстэктрейс в атаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 11:33 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНет никаких "должно" - есть конкретные требования - один поток, одна транзакция. Не нужно пытаться продолжить текущую транзакцию в Async методе. А как это требование налазит на вложенные транзакции кстати? То есть поможет OP propagation Requires_New ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 11:42 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
questionerBlazkowiczНет никаких "должно" - есть конкретные требования - один поток, одна транзакция. Не нужно пытаться продолжить текущую транзакцию в Async методе. А как это требование налазит на вложенные транзакции кстати? То есть поможет OP propagation Requires_New ? мануал говорит что выходя в параллельный тред область видимости "родительской" транзакции заканчивается. блин.. прикрутил новый екзекьютор, так у меня приложение стало собираться вдвое дольше а вообще, по большому счету там нет вообще никаких вложенных транзакций в спринге (в контексте одного треда). есть где транзакция открыфвается, и где она заканчивается. всё что внутри - тупо игнорируется. бо выкидывая ексепшн в любой из дочерних валится всё-равно всё. т.е. можно рассматривать всё как одна транзакция - остальные анноташечки - это только красота. кстати, хороший вопрос для собеседования: у вас есть аспект до метода, у вас есть метод, метод помечен транзакцией. во время выполнения аспекта у вас выбрасывается эксепшн - что будет с данными внутри метода? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 11:53 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
natanabrahamjrБлакович, так я и не пытался "продлить" транзакцию. А мне откуда знать. Я кода кроме как Transaction Template не видел. Где код, который создаёт новую транзакцию. natanabrahamjr я просто хотел иметь транзакцию, дабы был доступ к лейзи полям. OMFG. То есть мы ещё и транзакцию от сессии отличить не можем? Это как бы совершенно разные вещи. То что у них одинаковая область действия ещё не делает их одним и тем же. natanabrahamjrпусть будет новая транзакция - ни разу не проблема. Блин. В чем конкретно задача? Мы на второй странице, вдруг, выяснили что нужна не транзакция а сессия. Что вообще значит "пусть будет"? Вы понятия не имеете как должна работать программа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 12:09 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
questionerА как это требование налазит на вложенные транзакции кстати? То есть поможет OP propagation Requires_New ? Это не вложеная транзакция, а новая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 12:10 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
natanabrahamjrдабы был доступ к лейзи полям То что JDBC не многопоточный повторять бесполезно? Всё равно будет проигнорировано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 12:12 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, мы с вами кажется, не очень друг-друга понимаем. Я вас понимаю, и про ждбс и про транзакции и про всё остальное, что там в потрохах происходит. давайте от всего этого абстрагируемся. а поднимемся на уровень выше - на уровень спринга с его структурой-архитектурой и т.п. 1) если я хочу получить объект с базы -- я делаю через репозиторий гет-ван запрос и получаю объект. 2) чтобы прочесть у этого объекта есть лейзи поля, то они будут доступны в двух случаях: а) поле не лейзи, а игер. б) мы запрашиваем лейзи поля в методе, помеченном транзакшнл. --- как бы на этом ВСЁ. в детали вдаваться смысл есть только из академического интереса, ибо ломать спринговую архитектуру и начинать прыгать через голову, через контекст открывать-закрывать сессии, а уж тем более коннекты к базе - это имхо, ни разу не вариант, изобретать велосипеды с костылями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 13:06 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerА как это требование налазит на вложенные транзакции кстати? То есть поможет OP propagation Requires_New ? Это не вложеная транзакция, а новая. Сорри, новая. Ну и видимо должно помочь, если если это допускают требования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 13:36 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
natanabrahamjrЯ вас понимаю, и про ждбс и про транзакции и про всё остальное, что там в потрохах происходит. Вы себе льстите. natanabrahamjrа) поле не лейзи, а игер. б) мы запрашиваем лейзи поля в методе, помеченном транзакшнл. --- как бы на этом ВСЁ. Потому что нихера не ВСЁ. Потому что Session aka EntityManager aka Unit of Work это не транзакция. Потому что ленивые свойства грузятся из сессии, а не транзакции. И грузятся они через JDBC, поэтому сессию нет смысла шарить между потоками. Да, в спринге, по-умолчанию, сессия ORM и транзакция связаны друг с другом. Но это совершенно не повод их мешать в кучу. natanabrahamjrв детали вдаваться смысл есть только из академического интереса Ну-да, ну-да. Это сродни фразе "SQL знать не нужно, Hibernate сам всё сделает". natanabrahamjrибо ломать спринговую архитектуру и начинать прыгать через голову, через контекст открывать-закрывать сессии, а уж тем более коннекты к базе - это имхо, ни разу не вариант, изобретать велосипеды с костылями. Чтобы найти правильное решение нужно понимать что на самом деле происходит, а не разводить демагогию по поводы "архитектуры", не понимая даже что под этим подразумевается. Теперь к решению. Попробуйте получить текущую сессию и вызвать merge на объекте. После этого должны заработать ленивые свойства. Вот тут пишут что @Async и @Transactional на одном методе уже починили. Значит дело за малым - "переподключить" ленивую сущность к новой сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 16:41 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
questionerСорри, новая. Ну и видимо должно помочь, если если это допускают требования Да, должно и по-умолчанию работать с REQUIRE, потому как в новом потоке (@Async) всё равно нет старой транзакции, поэтому будет создана новая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 16:42 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
natanabrahamjrфулстэктрейс в атаче. Корневое и самое любопытное исключение аттачorg.postgresql.util.PSQLException: ERROR: relation "donations" does not exist А точно ленивые свойства грузятся без @Async? Либо таки дело не в Async, либо новый поток вообще не в ту базу законектился, что очень странно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 16:48 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
Ну так я вам об этом и говорю. Там ощущение, что коннекта нет вообще. Без асинка всё работает прекрасно. С асинком и без анноташки транзакшнл - тоже всё работает. с аннотацией транзакшнл и без асинка тоже работает. с асинком + транзакшнл (либо над асинком либо в методе, вызывающемся из асинка) -- нет. выходит то, что вы видите. Если я без асинка запускаю через обычный екзекутор (не спринг бин, а просто екзекутор, с методом, возвращающим футуру) - то с транзакшнл работает, но при обращении к лейзи связи - падает. говорит ноу сейшн. Если я в этом методе без асинка ручками через ентити менеджер создаю сессию, далее дергаю сущность простым склом не закрывая сессию - все лейзи связи доступны (сущность типа как приаттаченая выходит). всё работает. а теперь... если я в блоке конфигурации создаю ЯВНО езекутор, вернее, бин екзекутора, возвращающий тредпултаскекзекутор - то вуаля, всё замечательно пашет. даже асинку говорить не надо какой бин цеплять для асинхронного исполнения. Причем, пашет в любой комбинации, в т.ч. с асинк+транзакшнл. в рамках метода, который я обозначил этими анноташками. Т.е. проблема, как бы, решена. зы. спасибо в любом случае за помощь Вам. Я не претендую на глубокое знание всех процессов, проходящих где то там в дебрях. Только сверху. Полагаю, знать это в деталях конечно же надо, но через ентитименеджер фигачить сессии, скл запросы (на уровне сервиса) и т.п. - это уж слижком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 17:50 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
по моему вопросу.. я так полагаю, что у других он не возникал потому что у меня банально какие то особенности с конфигом непосредственно моего приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 17:56 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
natanabrahamjrа теперь... если я в блоке конфигурации создаю ЯВНО езекутор, вернее, бин екзекутора, возвращающий тредпултаскекзекутор - то вуаля, всё замечательно пашет. даже асинку говорить не надо какой бин цеплять для асинхронного исполнения. Вот это совсем странно. Spring же там свой экзекутор использует, если его не указать явно. Какая между ними принципиальная разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 18:14 |
|
||
|
Hibernate Spring Transaction
|
|||
|---|---|---|---|
|
#18+
А что за поток такой ? аттач[pool-27-thread-1] o.h.e.j.b.i.AbstractBatchImpl HHH000010: On release of batch it still contained JDBC statements Может там, таки транзакция или сессия умудрилась зашарится между потоками, потому как ERROR: relation does not exist происходит далее как в асинхронных методах SimpleAsyncTaskExecutor-XX, так и в основном методе из web. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2017, 18:37 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39417593&tid=2123074]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 429ms |

| 0 / 0 |
