powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / многопоточка и хибер - как правильно?
29 сообщений из 29, показаны все 2 страниц
многопоточка и хибер - как правильно?
    #39527282
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ситуация - есть поток А с открытой хиберовской сессией, там создается некоторая сущность, ее айдиха передается в поток Б, а в потоке А сессия еще не закрыта и в итоге поток Б айдишку этой сущности найти не может. что вполне логично.

Какой подход лучше тут использовать? передавать айдиху в параллельный поток уже после закрытия транзакции (что сложно) или же можеет как то сделать чтоб второй поток ждал появления айдихи? или что-то третье? и вообще подход у меня неверен в обоих случаях?
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527326
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTКакой подход лучше тут использовать?
хибер не потокобезопасен.
Какая необходимость кидать данные туду сюда между потоками.
Это не любит не только хибер, но все технологии. Не побоюсь этого слова)).
- кидай ID в другой поток и там заново Новая сессия и загрузить новый объект по этому ID
andreykaTи вообще подход у меня неверен в обоих случаях?
неверен.
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527328
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTтам создается некоторая сущность,
Хибер нужен только сохранить.
Поэтому без хибера создал в потоке объекты, поигрался с ними всеми ядрами и потоками, а потом всё в одном потоке передал коллекцией в хибер и сохранил.
Иначе зачем тебе потоки?
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527332
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTКакой подход лучше тут использовать?

Скорее всего вы неправильно решаете задачу, но я не стану вас уговаривать :)

В вашем случае если сущность рид-онли,то можно использовать кэш второго уровня, по-моему он потокобезопасен. Если же вы вытянули сущность в одном потоке, поменяли ее и передав в другой поток хотите работать с измененной версией - то могу вам только пожелать удачи.
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527333
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да. согласен. в других местах это решил тем, что в параллельные потоки передавал не ссылку на объект (в контексте хибера и бд - это айдишка на строку в таблице), а копию объекта.

где это надо? ну например, у меня произошла какая-то активити в системе, которая породила объект, в фоне есть мешок слушателей, что должны по факту появления этого объекта в системе сделать какие-то свои действия. да, чтоб не париться можно всё это делать в одном потоке. а можно выпендриться и сделать каждому слушателю отдельный поток, ну или пул потоков в котором слушатели сами в очередь выстраются. впрочем, это уже частности. а суть в том - что да, тут приходится задействовать асинхронку, потому, что слушатели сами по себе представляют из себя достаточно тяжелые процессы.

в предыдущем проекте где я сидел, там челы особо не парились и всё делали в одном потоке. никаких проблем с дедлоками базы или блокировками (в рамках одной задачи), всё было замечательно до тех пор, пока между реквестом и респонзом с фронта стало проходить по 15 секунд )))
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527334
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
где это надо? ну например, у меня произошла какая-то активити в системе, которая породила объект, в фоне есть мешок слушателей, что должны по факту появления этого объекта в системе сделать какие-то свои действия. да, чтоб не париться можно всё это делать в одном потоке. а можно выпендриться и сделать каждому слушателю отдельный поток, ну или пул потоков в котором слушатели сами в очередь выстраются. впрочем, это уже частности. а суть в том - что да, тут приходится задействовать асинхронку, потому, что слушатели сами по себе представляют из себя достаточно тяжелые процессы.


Это все замечательно, но к первоначальному вопросу отношения мягко говоря не имеет. Ну и городить пулы тоже не надо, когда есть стандартные проверенные временем брокеры сообщений
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527335
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTпока между реквестом и респонзом с фронта стало проходить по 15 секунд
придёт третий после тебя и скажет: "ну тут чел и намутил со своей асинхронностью))
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527336
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTчелы особо не парились и всё делали в одном потоке.
- в одном потоке НЕ тяжёлые задачи.
- все тяжёлые в фоновые.
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527338
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никandreykaTКакой подход лучше тут использовать?

Скорее всего вы неправильно решаете задачу, но я не стану вас уговаривать :)

В вашем случае если сущность рид-онли,то можно использовать кэш второго уровня, по-моему он потокобезопасен. Если же вы вытянули сущность в одном потоке, поменяли ее и передав в другой поток хотите работать с измененной версией - то могу вам только пожелать удачи.
да все спорные места я перевел на копии объектов. осталось только одно. ))
на самом деле, проблема в том, что сущность создается, и вроде как сохраняется (репо возвращает айди сущности), эта айдишка передается в параллельный поток, а поток читая эту сущность из репо получает налл )) т.е. в базе сущности вроде как НЕТ )))

решения с наскока вижу здесь два: передавать айди сущности после закрытия сессии -- работает. и в параллельном потоке каким-то образом ПОДОЖДАТЬ появления этой сущности в базе

первый ариант - в рамках спринг приложения, к сожалению, с особенностями работы его АОПа чтоб это делать надо городить какие-то лютые фасады и из одного бина дергать другой, по возврату значения запускать параллельные потоки -- волосатый код. или менять аоп на аспектджей - тогда можно играться транзакциями внутри бина.
второй вариант на мой взгляд не менее костыльный ))) я даж не представляю как бы это сделать. на ум приходят какие-нибудь монады, но у меня ума не хватает понять как это всё обставить чтоб без волос получилось. или костыль - засунуть в цикл вайл фолс - еще хуже.
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527339
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTзабыл никпропущено...


Скорее всего вы неправильно решаете задачу, но я не стану вас уговаривать :)

В вашем случае если сущность рид-онли,то можно использовать кэш второго уровня, по-моему он потокобезопасен. Если же вы вытянули сущность в одном потоке, поменяли ее и передав в другой поток хотите работать с измененной версией - то могу вам только пожелать удачи.
да все спорные места я перевел на копии объектов. осталось только одно. ))
на самом деле, проблема в том, что сущность создается, и вроде как сохраняется (репо возвращает айди сущности), эта айдишка передается в параллельный поток, а поток читая эту сущность из репо получает налл )) т.е. в базе сущности вроде как НЕТ )))

решения с наскока вижу здесь два: передавать айди сущности после закрытия сессии -- работает. и в параллельном потоке каким-то образом ПОДОЖДАТЬ появления этой сущности в базе

первый ариант - в рамках спринг приложения, к сожалению, с особенностями работы его АОПа чтоб это делать надо городить какие-то лютые фасады и из одного бина дергать другой, по возврату значения запускать параллельные потоки -- волосатый код. или менять аоп на аспектджей - тогда можно играться транзакциями внутри бина.
второй вариант на мой взгляд не менее костыльный ))) я даж не представляю как бы это сделать. на ум приходят какие-нибудь монады, но у меня ума не хватает понять как это всё обставить чтоб без волос получилось. или костыль - засунуть в цикл вайл фолс - еще хуже.

wtf?? Почему бы просто не закомитить транзакцию? Вы как разруливать то собираетесь, если вдруг база нае..рнется с этой вашей асинхронщиной )
Хибернейт не пишет прямо в базу при создании сущности, он делает это либо при закрытии сессии, либо при прямом коммите или
flush.
В общем ваш подход очень и очень порочен
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527340
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTи вроде как сохраняется
известный факт, что другие сессии увидят после закрытия сессии этой.
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527342
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTПОДОЖДАТЬ появления этой сущности в базе
если производительность устраивает, то в сущность завести флаг ОчереднойШагОбработки.
Потом один поток создаёт и сохраняет.
Второй поток периодически сканирует базу и делает второй шаг обработки.
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527343
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123andreykaTчелы особо не парились и всё делали в одном потоке.
- в одном потоке НЕ тяжёлые задачи.
- все тяжёлые в фоновые.
ну вот сделали они в одном потоке отсылку 20 тысяч пуш уведомлений ))) причем, уникальных. а так согласен. к4то ж спорит.
у меня ситуация, что есть некий код, который передает айдишку кварцу, который запускает задачу немедленно. естественно в параллельном потоке и запускает ее до того как закрылась транзакция, создавшая эту айдишку. и в один поток вогнать это и нельзя и не надо.
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527344
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123andreykaTПОДОЖДАТЬ появления этой сущности в базе
если производительность устраивает, то в сущность завести флаг ОчереднойШагОбработки.
Потом один поток создаёт и сохраняет.
Второй поток периодически сканирует базу и делает второй шаг обработки.
имхо, это примерно так же как цикл крутить с тредслипом в надежде получить наконец значение. в общем, решение имеет место быть но, как то не просто.
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527345
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123andreykaTПОДОЖДАТЬ появления этой сущности в базе
если производительность устраивает, то в сущность завести флаг ОчереднойШагОбработки.
Потом один поток создаёт и сохраняет.
Второй поток периодически сканирует базу и делает второй шаг обработки.

Да все что угодно, главное не сессии хиберовские шарить Вплоть до сериализации энтити в json какой-нить и шлем в мессадж брокер, делов то. Ну это если транзакции не важны
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527346
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никВплоть до сериализации энтити в json какой-нить
+1
я не знаю, что он до хибера докопался.
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527347
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
транзакции в данном контексте не важны. ну в общем. всё верно в моем подходе - слать копии объектов. осталось придумать как сделать в одно движение копию хиберской сущности. хибернейтутилз.копипропертиз не предлагать )) сериализовать в джейсон - тоже не очень удачный вариант (в моем конкретном случае разумеется)
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527352
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никВплоть до сериализации энтити в json какой-нить
Ну в пределах одной jvm это перебор. Тут можно и бинарной сериализацией обойтись. :)
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527353
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
ну, если из базы доставать, то ты секунды 2 теряешь, зато транзакционность и надёжность.
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527355
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно ли как то в рамках спринга передать какой-то этакий объект который как футура будет стоять до тех пор пока результат внутри него не появится?
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527357
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTтранзакции в данном контексте не важны. ну в общем. всё верно в моем подходе - слать копии объектов. осталось придумать как сделать в одно движение копию хиберской сущности. хибернейтутилз.копипропертиз не предлагать )) сериализовать в джейсон - тоже не очень удачный вариант (в моем конкретном случае разумеется)

Что там за сущность такая? Вариантов сериализации море, начиная от ручного Externalizable заканчивая Dozer
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527359
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя нет глупость написал. сделать то можно но это такие дрова будут что лучше не надо. всё-равно внутри будет что то что будет пытаться прочесть это с базы.
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527360
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTя даж не представляю как бы это сделать. на ум приходят какие-нибудь монады, но у меня ума не хватает понять как это всё обставить чтоб без волос получилось. или костыль - засунуть в цикл вайл фолс - еще хуже.
Просто прозреваю как на пустом месте можно такой трешак себе создать .

Рискну предположить что вся эта логика решат какую-то тривиальную штучку...
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527361
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

да ничего особого. создается сущность, передается айдишка сущности в джобу кварца которая немедленно запускается, и джоба что-то там с этой сущностью делает, предварительно прочитав ее из базы (скажем, емейл шлет кому-нибудь). я вот ща подумал - самый дубовый вариант - джобу запускать с задержкой. )) воркэраунд.
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527362
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonandreykaTя даж не представляю как бы это сделать. на ум приходят какие-нибудь монады, но у меня ума не хватает понять как это всё обставить чтоб без волос получилось. или костыль - засунуть в цикл вайл фолс - еще хуже.
Просто прозреваю как на пустом месте можно такой трешак себе создать .

Рискну предположить что вся эта логика решат какую-то тривиальную штучку...
грубо очень грубо созадется некий набор атрибутов для сферической задачи в вакууме и в джобу передается айдишка этого набора атрибутов, по которым потом порождается целый мешок действий и в базе появляется еще мешок сущностей. нет не тривиальный )) все тривиальные я уже пофиксил ))
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527363
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTmaytonпропущено...

Просто прозреваю как на пустом месте можно такой трешак себе создать .

Рискну предположить что вся эта логика решат какую-то тривиальную штучку...
грубо очень грубо созадется некий набор атрибутов для сферической задачи в вакууме и в джобу передается айдишка этого набора атрибутов, по которым потом порождается целый мешок действий и в базе появляется еще мешок сущностей. нет не тривиальный )) все тривиальные я уже пофиксил ))
Ну... если вспомнить что есть такая SQL-ная практика что PK никогда не меняются. Тоесть если ты куда-то
передаешь PK и у тебя ACID то все будет чики-пики
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527364
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTа можно ли как то в рамках спринга передать какой-то этакий объект который как футура будет стоять до тех пор пока результат внутри него не появится?

Опять городите черт пойми что. Если уж вы используете асинхронность, то subscriber and observer по идее должны быть полностью decoupled, в этом весь смысл. Именно чтобы избежать многопоточных багов, обычно это реализуется поверх системы мессаджинга на основе иммьютабл сообщений. Ну и асинхронность подразумевает как раз таки, что второй процесс запустится ПОСЛЕ того как данные для него готовы(в колбэке), а не будет их ждать такая архитектура называется другим словом

У вас JVM одна? Вы не думайте в рамках фреймворка\энвайрнмента, а сначала подумайте как вашу проблему можно решить концептуально правильно в архитектурном плане, а потом уже реализовывайте свое решение.

А то вы пытаетесь что-то там выкрутить ограничваясь контекстами спринга, хибера и всякого непонятного аоп.

И поясните момент, так все это в рамках одного приложения(монолита)? Или приложения разные? Если монолит, то чем вас не устраивает обычный тредпул + Future?
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527365
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonandreykaTпропущено...

грубо очень грубо созадется некий набор атрибутов для сферической задачи в вакууме и в джобу передается айдишка этого набора атрибутов, по которым потом порождается целый мешок действий и в базе появляется еще мешок сущностей. нет не тривиальный )) все тривиальные я уже пофиксил ))
Ну... если вспомнить что есть такая SQL-ная практика что PK никогда не меняются. Тоесть если ты куда-то
передаешь PK и у тебя ACID то все будет чики-пики

Я тоже никак не пойму, почему не взять да закоммитить?

Да и вообще трешак конечно еще тот.. Почему нельзя завести таблицу необработанный набор атрибутов, джоб кварца создавать не из потока создавшего сущность, а по расписанию, эта джоба будет читать таблицу необработанный набор атрибутов(если записи еще нет - ну обработаем в след раз, не беда) и работать с гарантированно доступными данными? по завершению работы удалять запись из таблицы...
wtf полный
...
Рейтинг: 0 / 0
многопоточка и хибер - как правильно?
    #39527366
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
долго объяснять. в общем, нет.

зы. да сделал я уже так и сделал - параллельный поток запускается после того как транзакция закоммитилась. сделал я так сдеееелал и да - работает.

я просто пришел спросить, а как вообще в таких случаях поступать. и есть ли другие подходы. спасибо - услышал. или коммитим - потом шлем ссылку(айдишник), или шлем копию целиком.

зы. монолит.
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / многопоточка и хибер - как правильно?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]