Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Блокировка объектов-отображений


Автор: serious 7.11.2007, 14:35
Есть самописный ORM-фреймворк. Требуется: блокировать открытые на редактирование объекты, т.е. делать их доступными "только для чтения".

Пример: 2 администратора открывают объект "Пользователь" с именем Вася с целью изменить его данные. В результате, тот администратор, который первым успел открыть этот объект, должен получить права на его редактирвание, а второй - только на чтение (до тех пор, пока первый администратор не закончит изменять открытый объект или не истечет время блокировки).

Посоветуйте готовые решения для этой проблемы, пожалуйста.

Автор: w1nd 7.11.2007, 14:42
Цитата(serious @  7.11.2007,  14:35 Найти цитируемый пост)
Посоветуйте готовые решения для этой проблемы, пожалуйста.

Блокировка на уровне кэша. Решение - любой готовый кэш, поддерживающий эксклюзивную блокировку.

Автор: powerOn 7.11.2007, 14:50
Я такие задачи не решал, но есть некоторые мысли которые возможно окажутся полезными. 
Администраторы должны открывать не объект Пользователь, а некий декоратор - оболочку на Пользователем. т. е. объект с интерфейсом класса Пользователь, хранящий внутри себя реальный объект типа Пользователь и делегирующий ему все соответствующие операции. Администратор будет работать декоратором так, как будто это обыкновенный Пользователь. Но, при этом, перед вызовом делегируемого метода, декоратор может делать все необходимые проверки (например, не открыт ли этот Пользователь другим администратором). 

Автор: Maksym 7.11.2007, 15:00
Цитата(powerOn @  7.11.2007,  13:50 Найти цитируемый пост)
Но, при этом, перед вызовом делегируемого метода, декоратор может делать все необходимые проверки

Поддерживаю

ЗЫ. http://ru.wikipedia.org/wiki/Decorator

Автор: serious 7.11.2007, 15:11
w1nd, а пример библиотеки можешь привести? Как этот кэш работает?

Добавлено через 1 минуту и 14 секунд
Maksym, а что делать с ситуацией, когда сущность связана с другой сущностью? Связанные объекты также необходимо блокировать.

Автор: Maksym 7.11.2007, 15:35
Цитата(serious @  7.11.2007,  14:11 Найти цитируемый пост)
Maksym, а что делать с ситуацией, когда сущность связана с другой сущностью? Связанные объекты также необходимо блокировать. 

Декоратор должен работать с другими объектами тоже через декораторы, соотвественно вызвать у них методы блокировки, а те в свою очередь вызовут метод блокировки у декораторов своих зависимых обьектов.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)