Я ищу идеи для синхронизации обновлений одного экземпляра сохраняемого объекта.
Простой объект домена:
public class Employee {
long id;
String phone;
String address;
}
Предположим, что два экземпляра пользовательского интерфейса подтягивают Employee (1), где id = 1. Первый клиент редактирует свойство телефона Employee (1); второй клиент редактирует адресное свойство Employee (1). Когда они отправляют свои изменения, оба должны быть сохранены.
Возможное решение - создать функцию обновления для каждого свойства:
public void updatePhone(Employee employee) {
// right now I am synchronizing _employeeUpdateLock
// synchronize instance of Employee won't work
synchronized( something ) {
// update phone
}
}
// a similar function for address
Этот подход, к сожалению, плохо масштабируется. API должен постоянно выравниваться по свойствам. Обратите внимание, что
public void update(Employee employee) { ... }
не будет работать, потому что функция не может сказать, какое свойство клиент намерен изменить, если только копия исходного объекта не может быть найдена в функции обновления.
Hibernate предоставляет механизм для блокировки строки в базе данных. Это не очень хорошо масштабируется.
Возможно, решение зависит от частоты, с которой ожидается изменение строки. Для низкочастотных модификаций синхронизированы и блокировки хороши. Для высокочастотных модификаций можно использовать копию строки во время поиска, чтобы выяснить обновленные свойства.
Я надеюсь найти лучшую парадигму для решения этой проблемы. Благодаря.