|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
Вопрос тупой, ибо это основы скорее всего, но прошу сильно не пинать. Есть веб-сервис. К нему приходит запрос, по которому надо залезть в БД и что-то там сделать (пока не важно что). Коннект к БД идет через JNDI через настроенный пул подключений веб-сервера. То есть, понятно, что получили коннект, при закрытии, соединение вернулось в пул, все ок, все работает. Все, что относится к работе с БД сидит в отдельном классе (без Spring-а). Теперь ситуация. Пока обрабатывается один запрос БД, в сервис приходит новый запрос. Вопрос в том, надо ли создавать каждый раз новый экземпляр класса, из которого идет обращение к БД? Сам считаю, что надо, ибо пул коннектов - это одно и сессии пересекаться не должны, но сам класс - это другое и тут могут быть накладки, но мне это кажется не рациональным каждый раз создавать новый экземпляр класса который запрашивает БД, понятно, что на современных мощностях - это ничто, но тем не менее, имхо должен быть более разумный вариант ) Например сделать пул экземпляров класса для работы с БД Но это громоздко. Но когда в приложении кучка сервисов и по ходу идет куча обращений к БД из разных мест кода, а еще на сервере куча таких приложений, то создавать на каждый возов экземпляр класса не нормально по-моему. ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 10:45 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
Имеется в виду в частности на каждый вызов веб-сервиса, внутри вызова понятно, что может быть несколько обращений к БД и все они могут использовать один экземпляр класса работы с БД, созданный в самом начале при входе в обработчик сервиса. Но может есть правильные варианты? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 10:49 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
JDSНо когда в приложении кучка сервисов и по ходу идет куча обращений к БД из разных мест кода, а еще на сервере куча таких приложений, то создавать на каждый возов экземпляр класса не нормально по-моему. ? Все современные БД - потокобезопасны. Можешь спокойно работать и не думать о синхронизации. Синхронизация должна быть только во внутренней логике твоего приложения чтобы не допускать ситуации гонок или мертвых блокировок. Объект Connection - спокойно бери из пула каждый раз когда есть необходимость. This is good way. В конце объекту надо сказать close() или обернуьт его try-with-resources чтоб гарантировано вернуть его обратно в пул. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 10:58 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
mayton, что касается самой БД, с этим все понятно и с пулом понятно. Вопрос именно в классе, из которого идет обращение к БД. Например (схематично): Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 11:16 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
В коде не видно мотивации к тому чтобы делать dbProcess свойством класса. Можно спокойно сделать переменной и логика не изменится. Более того. Этот код будет более изолирован и как следствие безопасен. Код: java 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 12:07 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
JDSВопрос именно в классе, из которого идет обращение к БД.этот не нужен вообще. Попробуй. Я делал коннект прямо в сервлете первой строкой в doGet ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 12:15 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
JDSпул коннектов - это одно и сессии пересекаться не должныесть 5 видов сессий. Ты про какую? Есть хибер сессия. Есть id session IE, есть бд сессия.... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 12:18 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
mayton, согласен, с переменной выглядит лучше, спасибо. PetroNotC Sharp, согласен, можно и сразу, но там просто общие процедуры, которые вызываются из разных мест, те чтобы не дублировать. Насчет сессий, про сессии - про коннекты пула веб-сервера, ни хибернейтов, ничего такого нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 12:30 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
JDS, Если ничего нет, то контейнер сам создаст поток и пул все разрулит. Коннект будет внутри потока. А не один коннект на два потока. То есть не думать ни о чем и исключить из вопроса топика слово потоки. Делать классы как обычно в ЯП. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 12:40 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
JDS Код: java 1.
кто и как создает? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 12:42 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
JDSпросто общие процедуры, которые вызываются из разных мест,тогда название делай так чтобы понятно что они делают. А не безликое МояПроцедураНаСервереВебовская( ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 12:46 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, это все понятно, что из пула достается свободный коннект и все разруливается. Понятно и то, что контейнер создает новый поток при вызове сервиса (во всяком случае должен бы )). Вопрос был ровно про обращение к другому классу и по комментарию myton-а понял, что лучше просто через переменную, в остальном пока видимо да PetroNotC SharpДелать классы как обычно в ЯП. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 12:48 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
JDSчто лучше просто через переменную, и класс сервис сделать статик. Экземпляр не нужен так состояния нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 12:57 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
JDSНо может есть правильные варианты? ) либо твой класс потокобезопасен и тогда можно использовать один экземпляр, либо нет - и тогда нужно либо создавать копии, либо сделать его потокобезопасным. Оба варианта имеют право на жизнь в зависимости от обстоятельств. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2019, 14:45 |
|
Потокобезопасность в веб-сервисах при работе с БД.
|
|||
---|---|---|---|
#18+
chpashaJDSНо может есть правильные варианты? ) либо твой класс потокобезопасен и тогда можно использовать один экземпляр, либо нет - и тогда нужно либо создавать копии, либо сделать его потокобезопасным. Оба варианта имеют право на жизнь в зависимости от обстоятельств. Правильный ответ, только вряд-ли ТС в курсе что значит потокобезопасность. Если у тебя нет стейта в классе(изменяемых переменных, которые зависят от некой логики), то твой класс потокобезопасен, можешь сделать статиком или синглтоном. Если изменеямое состояние есть - там надо выкручиваться, но это уже широкий топик. Про пул объектов как оптимизацию забудь в принципе, это ничего не дает и только напрягает GC. Пулы надо делать для ресурсов, создание которых дорогостоящее, например коннекшен к базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2019, 11:49 |
|
|
start [/forum/topic.php?fid=59&msg=39839563&tid=2121194]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 255ms |
0 / 0 |