|
|
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
ситуация - есть поток А с открытой хиберовской сессией, там создается некоторая сущность, ее айдиха передается в поток Б, а в потоке А сессия еще не закрыта и в итоге поток Б айдишку этой сущности найти не может. что вполне логично. Какой подход лучше тут использовать? передавать айдиху в параллельный поток уже после закрытия транзакции (что сложно) или же можеет как то сделать чтоб второй поток ждал появления айдихи? или что-то третье? и вообще подход у меня неверен в обоих случаях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 19:37 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
andreykaTКакой подход лучше тут использовать? хибер не потокобезопасен. Какая необходимость кидать данные туду сюда между потоками. Это не любит не только хибер, но все технологии. Не побоюсь этого слова)). - кидай ID в другой поток и там заново Новая сессия и загрузить новый объект по этому ID andreykaTи вообще подход у меня неверен в обоих случаях? неверен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 22:35 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
andreykaTтам создается некоторая сущность, Хибер нужен только сохранить. Поэтому без хибера создал в потоке объекты, поигрался с ними всеми ядрами и потоками, а потом всё в одном потоке передал коллекцией в хибер и сохранил. Иначе зачем тебе потоки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 22:42 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
andreykaTКакой подход лучше тут использовать? Скорее всего вы неправильно решаете задачу, но я не стану вас уговаривать :) В вашем случае если сущность рид-онли,то можно использовать кэш второго уровня, по-моему он потокобезопасен. Если же вы вытянули сущность в одном потоке, поменяли ее и передав в другой поток хотите работать с измененной версией - то могу вам только пожелать удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:03 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
ну да. согласен. в других местах это решил тем, что в параллельные потоки передавал не ссылку на объект (в контексте хибера и бд - это айдишка на строку в таблице), а копию объекта. где это надо? ну например, у меня произошла какая-то активити в системе, которая породила объект, в фоне есть мешок слушателей, что должны по факту появления этого объекта в системе сделать какие-то свои действия. да, чтоб не париться можно всё это делать в одном потоке. а можно выпендриться и сделать каждому слушателю отдельный поток, ну или пул потоков в котором слушатели сами в очередь выстраются. впрочем, это уже частности. а суть в том - что да, тут приходится задействовать асинхронку, потому, что слушатели сами по себе представляют из себя достаточно тяжелые процессы. в предыдущем проекте где я сидел, там челы особо не парились и всё делали в одном потоке. никаких проблем с дедлоками базы или блокировками (в рамках одной задачи), всё было замечательно до тех пор, пока между реквестом и респонзом с фронта стало проходить по 15 секунд ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:03 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
andreykaT где это надо? ну например, у меня произошла какая-то активити в системе, которая породила объект, в фоне есть мешок слушателей, что должны по факту появления этого объекта в системе сделать какие-то свои действия. да, чтоб не париться можно всё это делать в одном потоке. а можно выпендриться и сделать каждому слушателю отдельный поток, ну или пул потоков в котором слушатели сами в очередь выстраются. впрочем, это уже частности. а суть в том - что да, тут приходится задействовать асинхронку, потому, что слушатели сами по себе представляют из себя достаточно тяжелые процессы. Это все замечательно, но к первоначальному вопросу отношения мягко говоря не имеет. Ну и городить пулы тоже не надо, когда есть стандартные проверенные временем брокеры сообщений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:06 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
andreykaTпока между реквестом и респонзом с фронта стало проходить по 15 секунд придёт третий после тебя и скажет: "ну тут чел и намутил со своей асинхронностью)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:09 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
andreykaTчелы особо не парились и всё делали в одном потоке. - в одном потоке НЕ тяжёлые задачи. - все тяжёлые в фоновые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:11 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
забыл никandreykaTКакой подход лучше тут использовать? Скорее всего вы неправильно решаете задачу, но я не стану вас уговаривать :) В вашем случае если сущность рид-онли,то можно использовать кэш второго уровня, по-моему он потокобезопасен. Если же вы вытянули сущность в одном потоке, поменяли ее и передав в другой поток хотите работать с измененной версией - то могу вам только пожелать удачи. да все спорные места я перевел на копии объектов. осталось только одно. )) на самом деле, проблема в том, что сущность создается, и вроде как сохраняется (репо возвращает айди сущности), эта айдишка передается в параллельный поток, а поток читая эту сущность из репо получает налл )) т.е. в базе сущности вроде как НЕТ ))) решения с наскока вижу здесь два: передавать айди сущности после закрытия сессии -- работает. и в параллельном потоке каким-то образом ПОДОЖДАТЬ появления этой сущности в базе первый ариант - в рамках спринг приложения, к сожалению, с особенностями работы его АОПа чтоб это делать надо городить какие-то лютые фасады и из одного бина дергать другой, по возврату значения запускать параллельные потоки -- волосатый код. или менять аоп на аспектджей - тогда можно играться транзакциями внутри бина. второй вариант на мой взгляд не менее костыльный ))) я даж не представляю как бы это сделать. на ум приходят какие-нибудь монады, но у меня ума не хватает понять как это всё обставить чтоб без волос получилось. или костыль - засунуть в цикл вайл фолс - еще хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:15 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
andreykaTзабыл никпропущено... Скорее всего вы неправильно решаете задачу, но я не стану вас уговаривать :) В вашем случае если сущность рид-онли,то можно использовать кэш второго уровня, по-моему он потокобезопасен. Если же вы вытянули сущность в одном потоке, поменяли ее и передав в другой поток хотите работать с измененной версией - то могу вам только пожелать удачи. да все спорные места я перевел на копии объектов. осталось только одно. )) на самом деле, проблема в том, что сущность создается, и вроде как сохраняется (репо возвращает айди сущности), эта айдишка передается в параллельный поток, а поток читая эту сущность из репо получает налл )) т.е. в базе сущности вроде как НЕТ ))) решения с наскока вижу здесь два: передавать айди сущности после закрытия сессии -- работает. и в параллельном потоке каким-то образом ПОДОЖДАТЬ появления этой сущности в базе первый ариант - в рамках спринг приложения, к сожалению, с особенностями работы его АОПа чтоб это делать надо городить какие-то лютые фасады и из одного бина дергать другой, по возврату значения запускать параллельные потоки -- волосатый код. или менять аоп на аспектджей - тогда можно играться транзакциями внутри бина. второй вариант на мой взгляд не менее костыльный ))) я даж не представляю как бы это сделать. на ум приходят какие-нибудь монады, но у меня ума не хватает понять как это всё обставить чтоб без волос получилось. или костыль - засунуть в цикл вайл фолс - еще хуже. wtf?? Почему бы просто не закомитить транзакцию? Вы как разруливать то собираетесь, если вдруг база нае..рнется с этой вашей асинхронщиной ) Хибернейт не пишет прямо в базу при создании сущности, он делает это либо при закрытии сессии, либо при прямом коммите или flush. В общем ваш подход очень и очень порочен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:23 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
andreykaTи вроде как сохраняется известный факт, что другие сессии увидят после закрытия сессии этой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:24 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
andreykaTПОДОЖДАТЬ появления этой сущности в базе если производительность устраивает, то в сущность завести флаг ОчереднойШагОбработки. Потом один поток создаёт и сохраняет. Второй поток периодически сканирует базу и делает второй шаг обработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:29 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
Petro123andreykaTчелы особо не парились и всё делали в одном потоке. - в одном потоке НЕ тяжёлые задачи. - все тяжёлые в фоновые. ну вот сделали они в одном потоке отсылку 20 тысяч пуш уведомлений ))) причем, уникальных. а так согласен. к4то ж спорит. у меня ситуация, что есть некий код, который передает айдишку кварцу, который запускает задачу немедленно. естественно в параллельном потоке и запускает ее до того как закрылась транзакция, создавшая эту айдишку. и в один поток вогнать это и нельзя и не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:32 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
Petro123andreykaTПОДОЖДАТЬ появления этой сущности в базе если производительность устраивает, то в сущность завести флаг ОчереднойШагОбработки. Потом один поток создаёт и сохраняет. Второй поток периодически сканирует базу и делает второй шаг обработки. имхо, это примерно так же как цикл крутить с тредслипом в надежде получить наконец значение. в общем, решение имеет место быть но, как то не просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:33 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
Petro123andreykaTПОДОЖДАТЬ появления этой сущности в базе если производительность устраивает, то в сущность завести флаг ОчереднойШагОбработки. Потом один поток создаёт и сохраняет. Второй поток периодически сканирует базу и делает второй шаг обработки. Да все что угодно, главное не сессии хиберовские шарить Вплоть до сериализации энтити в json какой-нить и шлем в мессадж брокер, делов то. Ну это если транзакции не важны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:34 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
забыл никВплоть до сериализации энтити в json какой-нить +1 я не знаю, что он до хибера докопался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:37 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
транзакции в данном контексте не важны. ну в общем. всё верно в моем подходе - слать копии объектов. осталось придумать как сделать в одно движение копию хиберской сущности. хибернейтутилз.копипропертиз не предлагать )) сериализовать в джейсон - тоже не очень удачный вариант (в моем конкретном случае разумеется) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:38 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
забыл никВплоть до сериализации энтити в json какой-нить Ну в пределах одной jvm это перебор. Тут можно и бинарной сериализацией обойтись. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:44 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
andreykaT, ну, если из базы доставать, то ты секунды 2 теряешь, зато транзакционность и надёжность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:44 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
а можно ли как то в рамках спринга передать какой-то этакий объект который как футура будет стоять до тех пор пока результат внутри него не появится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:51 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
andreykaTтранзакции в данном контексте не важны. ну в общем. всё верно в моем подходе - слать копии объектов. осталось придумать как сделать в одно движение копию хиберской сущности. хибернейтутилз.копипропертиз не предлагать )) сериализовать в джейсон - тоже не очень удачный вариант (в моем конкретном случае разумеется) Что там за сущность такая? Вариантов сериализации море, начиная от ручного Externalizable заканчивая Dozer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:52 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
хотя нет глупость написал. сделать то можно но это такие дрова будут что лучше не надо. всё-равно внутри будет что то что будет пытаться прочесть это с базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:54 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
andreykaTя даж не представляю как бы это сделать. на ум приходят какие-нибудь монады, но у меня ума не хватает понять как это всё обставить чтоб без волос получилось. или костыль - засунуть в цикл вайл фолс - еще хуже. Просто прозреваю как на пустом месте можно такой трешак себе создать . Рискну предположить что вся эта логика решат какую-то тривиальную штучку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:55 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
забыл ник, да ничего особого. создается сущность, передается айдишка сущности в джобу кварца которая немедленно запускается, и джоба что-то там с этой сущностью делает, предварительно прочитав ее из базы (скажем, емейл шлет кому-нибудь). я вот ща подумал - самый дубовый вариант - джобу запускать с задержкой. )) воркэраунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:56 |
|
||
|
многопоточка и хибер - как правильно?
|
|||
|---|---|---|---|
|
#18+
maytonandreykaTя даж не представляю как бы это сделать. на ум приходят какие-нибудь монады, но у меня ума не хватает понять как это всё обставить чтоб без волос получилось. или костыль - засунуть в цикл вайл фолс - еще хуже. Просто прозреваю как на пустом месте можно такой трешак себе создать . Рискну предположить что вся эта логика решат какую-то тривиальную штучку... грубо очень грубо созадется некий набор атрибутов для сферической задачи в вакууме и в джобу передается айдишка этого набора атрибутов, по которым потом порождается целый мешок действий и в базе появляется еще мешок сущностей. нет не тривиальный )) все тривиальные я уже пофиксил )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 23:59 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39527345&tid=2122567]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
131ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 421ms |

| 0 / 0 |
