@jvmchat

Страница 2798 из 2890
Akim
13.09.2018
12:34:25
@guga4ka immutables.org - вещь! Спасибо сейчас рекомендацию

Akim
13.09.2018
12:37:31
404
https://immutables.github.io

Oleg
13.09.2018
12:38:19
https://immutables.github.io
да , так видно, спс

Google
Vyacheslav
13.09.2018
14:00:33
Народ, как прикрутить секурити к spring web service?

Vyacheslav
13.09.2018
14:09:27
java.security.* ?
в проекте SpringBoot есть Spring Web в связке со Spring Security. Есть ли возможность через те же AuthenticationManagerBuilder и HttpSecurity сделать авторизацию к Web Service?

Mika
13.09.2018
14:10:07
Ой, это не подскажу.

Думала хотите права модулям ограничить

Vyacheslav
13.09.2018
14:13:04
Думала хотите права модулям ограничить
в идеале - к урлам WS по той же логике... если нет - то тот же custom UserService прикрутить... ну чтоб по той же схеме и те же юзвери с паролями ходили

Павел
13.09.2018
15:00:08
Народ. Кто поможет. Есть сервер который принимает огромное колличество запросов. Для каждого запроса нужно сходить в базу, достать записи удовлетворяющие условию, взять одну запись самую старую и вернуть клиенту. Тоесть каждый реквест должен схватить строку в бд и остальные запросы не должны ее уже видеть. Попробовали select for update чтобы типо сделал селект и заблокировал строку и никто ее не изменит пока не комитнешь. Но следующий запрос выполняет такой же селект и получает заблокированую строку. Кароче не работает. И вообще решение с селект фор апдейт не очень. Как можно такую задачу решить другими способами?

Needle
13.09.2018
15:05:38
элементарно, заведи поле "взял в работу", по умолчанию 0 и делай update table set field = id where field = 0 + самое старое, потом селектишь его

но это не про жаву

Павел
13.09.2018
15:08:08
С jpa такое прокатит?

Тоесть ты предлагаешь сначало обновить. А потом заселектить?

Vit
13.09.2018
15:10:03
+1 предлагает колонку с маяком

Igor
13.09.2018
15:10:10
разбить задачу на две задачи

Google
Igor
13.09.2018
15:10:11
Для каждого запроса нужно сходить в базу, достать записи удовлетворяющие условию, взять одну запись самую старую и вернуть клиенту.

Needle
13.09.2018
15:10:31
сначала зарезервировать, потом выбрать

Igor
13.09.2018
15:10:33
первая задача - привильный путь потосить индекс и взять min -

Vit
13.09.2018
15:10:41
Можно написать процедуру в бд

Павел
13.09.2018
15:10:48
Есть в таблице юзерс 50 юзеров с именем вася. Мне приходит 30 запросов - дай мне васю. Я должен каждому дать по одному васе.

Igor
13.09.2018
15:10:59
чтобы получить самую струю записть - в таблицу дляэ того лазить ненужно -все поля будут в индексе ...

Igor
13.09.2018
15:11:40
вторая задача - ээто лок записи - как сказали делать update - update как рпаз делает лок

можно оформить в виде хринимки всю логику - что тебе будет гарантировать конкурентный доступ и вызывать ее ...

Павел
13.09.2018
15:12:52
Мне приходит 30 запросов. В первом запросе я делаю селект с условиями и получаю 1 запись. Но остальные 29 запросов делают такой же селект и получают эту же запись. Все 30 запросов прихолят одновременно

Vit
13.09.2018
15:13:29
Они может и приходят одновременно , но обрабатываются по очереди

Igor
13.09.2018
15:13:42
вот пример с процедуркой ...

Митко Соловец?
13.09.2018
15:13:46
зависит от уровня изоляции бд

+ блокировки в жпа

Павел
13.09.2018
15:13:57
Второй селект достает ту же строку до того как первый успел комитнуть

Митко Соловец?
13.09.2018
15:14:16
Второй селект достает ту же строку до того как первый успел комитнуть
такое чувство, что тебе нужен пессимистик лок рид

Павел
13.09.2018
15:14:19
+ блокировки в жпа
Делал пессимистик врайт но он блочит все

Не дает втрому запросу ничего

Oleg
13.09.2018
15:14:35
Апдейт залочит строку и дабл селекта не будет

Google
Igor
13.09.2018
15:14:37
на jpa - такое делается через lock

Павел
13.09.2018
15:15:01
на jpa - такое делается через lock
Говорю же делал локи

Не так как ожидается работают

Делал нетив квери и skip lock

Тоже не помогает

Igor
13.09.2018
15:15:48
пример кода есть? как вы делает лок

Митко Соловец?
13.09.2018
15:16:08
Павел
13.09.2018
15:16:42
@Lok с lokmode разными. Пессимистик рид врайт и тд

Митко Соловец?
13.09.2018
15:16:52
?

что за аннотация такая

Павел
13.09.2018
15:17:15
В спринг дата

Ща в метро сяду подробней опишу

Митко Соловец?
13.09.2018
15:17:25
entityManager.lock(entity, LockModeType.PESSIMISTIC_WRITE)

вот так апи выглядит блокировки

и это то, что нужно в твоем сценарии

пока не закоммитишь,никто не запишет и не прочитает

Igor
13.09.2018
15:22:14
https://www.baeldung.com/jpa-optimistic-locking

про таймают нукжно паомнить - а то нода упадет итд

Митко Соловец?
13.09.2018
15:23:34
https://www.baeldung.com/jpa-optimistic-locking
вроде же пессимистичная блокировка нужна

Igor
13.09.2018
15:26:29
https://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/TransactionJTA_Overview-Pessimistic_and_optimistic_locking.html

Google
Павел
13.09.2018
15:28:50
Есть контроллер. В него приходит реквест. Контроллер дергает метод сервиса в который передает поле например имя. В сервисе метод помечен @Transactional и внутри дергает метод репозитория потом деоает задержку в 5 сек. В репозитории начинаются жксперементы. 1. @Lock(LockModeType.PESSIMISTICK_WRITE) findTop1By..... В джиметре создается 5 потоков которые кидают один и тот же реквест одновременно. Результат - выполняется первый запрос. 5 секунт отрабатывает, начинает выполняться второй запрос и тд. 2 . Переписывается на netivQuery где пишется select for update skip lock. Результат в джиметре - первый поток блокирует на 5 сек базу. Остальные 4 отваливаются так как пытаются получить доступ к этой же записи. Через 5 сек первый отрабатывает успешно

Igor
13.09.2018
15:30:33
начни с простого - напиши процедурку plsql и вызывайте ее)))

Admin
ERROR: S client not available

Павел
13.09.2018
15:31:16
Ожидание - кинул 5 запросов. На сервере первый взял строку стал с ней работать. Второй взял вторую строку и тд. За 5 сек отработали все 5 запросов. Каждый вернул свою строку и выполгился в своем потоке

Мой сервист ебет другой сервер. Каждую секунду или наносекунду пихает в меня 50 запросов. Типо есть ли для меня данные? Я должен обработать каждый запрос. Если есть 30 строк в бд 30 запросам вернуть по одной строке из бд а 20 сказать - ниче нет.

Архетиктура огонь но вот так вот. Повлиять не могу

Митко Соловец?
13.09.2018
15:34:36
логика понятна, последовательно блокируем по строчке и каждый следующий запрос будет брать только незаблокированные

Павел
13.09.2018
15:34:57
Да

Но решить ее селект фор апдейтом не выходит

Митко Соловец?
13.09.2018
15:35:34
а в нэйтив квэри ты руками ставишь лок на последнюю строчку?

или как?

Alexey
13.09.2018
15:35:42
Почему не сделать очередь + издатель-подписчик с long-polling?

Митко Соловец?
13.09.2018
15:35:45
я в твоем алгоритме не увидел это

Павел
13.09.2018
15:35:51
Потому что селект для каждого запроса всегда возвращает одну и ту же строку. Для первого ок а для остальных она уже заблокирована и они отваливаются

Artjom
13.09.2018
15:37:17
А что за бизнес кейс

Что-то упорото звучит

Павел
13.09.2018
15:37:34
FOR UPDATE column SKIP LOCKED

А что за бизнес кейс
Я бы сказал но не могу(((

Почему не сделать очередь + издатель-подписчик с long-polling?
Потому что системой пользуются тысячи людей, и она уже реализована, по ращработанным протоколам и я не могу просто взять и поменять. Ей пользуются 3 лица

Google
Павел
13.09.2018
15:39:57
В общем один сервер долбит другой и там целая цепочка. Все всех долбят

Митко Соловец?
13.09.2018
15:40:45
и поэтому остальные ждут?

попробуй для теста в одном треде запустить с фор апдейт

а во втором без фор апдейта, но со скипом заблокированных

Павел
13.09.2018
15:42:04
Не. Если просто селект фор апдейт то первый блокирует а остальные жлут. И потом отрабатывают. А если скип локед то следующий должен взять все записи кроме заблокированой.

Митко Соловец?
13.09.2018
15:42:22
>А если скип локед то следующий должен взять все записи кроме заблокированой. ты уверен в этом?

Павел
13.09.2018
15:42:27
Тоесть локед это уже переделка так как просто фор апдейт не работает



Митко Соловец?
13.09.2018
15:46:05
но при этом у тебя выборка не работает и все 4 ждут?

Павел
13.09.2018
15:47:35
Если скип локед то первый блокирует первую запись из выборки. Остальные вызываю выборку которая возвращает ту же самую строку. А она заблокирована уже. И они отваливаются

Страница 2798 из 2890