Как синхронизировать обновления свойств с одним экземпляром домена? - PullRequest
1 голос
/ 07 декабря 2010

Я ищу идеи для синхронизации обновлений одного экземпляра сохраняемого объекта.

Простой объект домена:

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 предоставляет механизм для блокировки строки в базе данных. Это не очень хорошо масштабируется.

Возможно, решение зависит от частоты, с которой ожидается изменение строки. Для низкочастотных модификаций синхронизированы и блокировки хороши. Для высокочастотных модификаций можно использовать копию строки во время поиска, чтобы выяснить обновленные свойства.

Я надеюсь найти лучшую парадигму для решения этой проблемы. Благодаря.

1 Ответ

0 голосов
/ 07 декабря 2010

Я не очень понимаю вашу предполагаемую архитектуру. Несколько клиентов должны совместно использовать один экземпляр одного и того же объекта данных? Как это вообще возможно - если не использовать какую-то модель удаленного объекта (что в наше время считается плохой вещью)?

...