powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Порядок обработки
16 сообщений из 16, страница 1 из 1
Порядок обработки
    #38405548
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток. Помогите, кто знает как решить задачу:
Есть список пронумерованных бланков от 1 и до 10000.
Есть менеджеры, которым выдаются эти бланки в определенном количестве: менеджер1 (М1) - 5 бланков, М2-3, М4-10 и т.д.

В чем трудность.
Выдача производится через несколько человек-операторов, которые оформляют выдачу.
Как реализовать выдачу так, чтобы несколько операторов не оформили один и тот же бланк?
Приложение реализовано на J2EE. Используется БД. У каждого бланка есть свой статус (свободный, выданный).

Спасибо
...
Рейтинг: 0 / 0
Порядок обработки
    #38405562
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip,

Вариант №1
Воспользоваться Транзакциями: распределением бланков и блокированием в процессе оформления бланков занимается СУБД.
...
Рейтинг: 0 / 0
Порядок обработки
    #38405576
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если устраивает оптимистическая блокировка, то можно воспользоваться встроенным механизмом @javax.persistence.Version
...
Рейтинг: 0 / 0
Порядок обработки
    #38405587
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не видя кода ничего дельного сказать нельзя. Может быть вам помогут транзакции СУБД с определенными уровнями изоляции, может быть вам помогут джавовские синхронайзеры, может быть - CASы и коллекции из java.util.concurrent. Нужно больше конкретики, как у вас там это реализовано.
...
Рейтинг: 0 / 0
Порядок обработки
    #38405591
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraЕсли устраивает оптимистическая блокировка, то можно воспользоваться встроенным механизмом @javax.persistence.VersionОптимистичные блокировки тут как раз таки не подходят совершенно, так как в этом случае оператор, грубо говоря, сначала обработает документ, и лишь потом поймет, что сделал это зря.
...
Рейтинг: 0 / 0
Порядок обработки
    #38405622
jdroid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тут слабое звено это человеческий фактор и без построения правильных барьеров для операторов не обойтись:
1. оператор может начать работу по выдаче нового бланка только после совершения какого либо действия (например нажал кнопку получил номер бланка или возможность печати бланка).
2. оператор не может начать работу со следующим бланком без совершения какого либо действия (отмена выдачи предыдущего бланка или подтверждение выдачи).

можно еще дать оператору возможность управлять состояниями выдачи бланков что ускорит процесс выдачи, но это грузит мозг оператора и увеличивает риски

а дальше технические детали реакции системы на действия операторов например добавить бланку состояние (свободен, обрабатывается, выдан)
...
Рейтинг: 0 / 0
Порядок обработки
    #38405671
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cdtyjvivanraЕсли устраивает оптимистическая блокировка, то можно воспользоваться встроенным механизмом @javax.persistence.VersionОптимистичные блокировки тут как раз таки не подходят совершенно, так как в этом случае оператор, грубо говоря, сначала обработает документ, и лишь потом поймет, что сделал это зря.
cdtyjv, оптимистическая блокировка решает поставленную задачу. авторКак реализовать выдачу так, чтобы несколько операторов не оформили один и тот же бланк?А вот какие там юзкейсы - ждем автора
...
Рейтинг: 0 / 0
Порядок обработки
    #38405679
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно просто распределять бланки операторам единственным выделеным потоком. Тогда никакой конкуренции не будет. А задача не такая уж нагруженая чтобы один поток не справился с парой сотен операторов.
...
Рейтинг: 0 / 0
Порядок обработки
    #38405709
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanracdtyjv, оптимистическая блокировка решает поставленную задачу.У каждого инструмента есть своя область применения. Optimistic locking - это инструмент, который используется для долгоиграющих сценариев, когда мы не хотим блокировать изменяемый ресурс. Вы здесь видите такой сценарий? Я нет. Надо просто взять и атомарно изменить состояние нескольких записей так, что бы изменения из соседних транзакций их не перекрывали. Более того, у автора уже есть колонка состояния бланка, зачем туда громоздить еще и версию?
Поэтому использование оптимистических блокировок здесь есть ни что иное, как придумывание велосипеда на ровном месте.
...
Рейтинг: 0 / 0
Порядок обработки
    #38405751
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczМожно просто распределять бланки операторам единственным выделеным потоком. Тогда никакой конкуренции не будет. А задача не такая уж нагруженая чтобы один поток не справился с парой сотен операторов.
+1
тем более, что распределение идёт через мышко-кликанье. А "мышки" вообще не требуют потоков, т.к. медленные события.
...
Рейтинг: 0 / 0
Порядок обработки
    #38405765
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123+1
тем более, что распределение идёт через мышко-кликанье. А "мышки" вообще не требуют потоков, т.к. медленные события.
Единственный минус, что такую систему будет труднее поднять на кластере. Можно JEE Singleton попробовать. Он по-идее должен уметь быть кластерным синглтоном.
...
Рейтинг: 0 / 0
Порядок обработки
    #38406421
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое за ответы!
Попробую реализовать согласно им!
...
Рейтинг: 0 / 0
Порядок обработки
    #38406601
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cdtyjvУ каждого инструмента есть своя область применения. Optimistic locking - это инструмент, который используется для долгоиграющих сценариев, когда мы не хотим блокировать изменяемый ресурс. Вы здесь видите такой сценарий? Я нет. Надо просто взять и атомарно изменить состояние нескольких записей так, что бы изменения из соседних транзакций их не перекрывали. Более того, у автора уже есть колонка состояния бланка, зачем туда громоздить еще и версию?
Поэтому использование оптимистических блокировок здесь есть ни что иное, как придумывание велосипеда на ровном месте.cdtyjv,
рекомендую уточнить область применения по книге J2EE Design Patterns , глава 10.2. Там, кстати, описаны плюсы и минусы некоторых предложенных здесь велосипедов.
Что касается @javax.persistence.Version - я его порекомендовал за простоту, так как имеется уже готовый механизм, и нужно добавить только 1 поле и 1 аннотацию. А вот подойдет оно или нет - из условий задачи непонятно, поэтому и написал "если"
...
Рейтинг: 0 / 0
Порядок обработки
    #38406686
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip,

если бланки пронумерованы, то как разные операторы могут выдать один и тот же бланк? Они что, нумеруют их а процессе выдачи?
...
Рейтинг: 0 / 0
Порядок обработки
    #38407646
Мужик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczМожно JEE Singleton попробовать. Он по-идее должен уметь быть кластерным синглтоном.
Не умеет (хотя у некоторых вендоров есть свои реализации). Единственный вменяемый механизм ручного контроля конкуррентности в кластере в EE -- JMS. Решение с пессимистичными блокировками в базе проще.
...
Рейтинг: 0 / 0
Порядок обработки
    #38409804
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день !

Я правильно понял задачу :

Есть система массового обслуживания :

Есть Менеджеры - их m - каждый за раз может взять x бланков.

Есть операторы - их n - оператор смотрит какая емкость менеджера и выдает ему то количество которое в нем заявлено.

так?

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

тут нужно учитывать время которое тратит менеджер на обработку всех бланков,
Время работы оператора по извлечению бланков

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


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