Mamy taki serwis
class MyService {
private MyRepository repository;
public void update(String id) {
MyDocument doc = repository.find(id);
// logika modyfikujaca doc
repository.save(doc);
}
}
W 99.9% przypadków działa to tak jak powinno, niestety pozostałe przypadki to sytuację gdy w tym samym czasie dostajemy requesty do update'u tego samego obiektu na bazie. Wtedy jeden update nadpisuje poprzedni, w zależności który z nich wykona się jako drugi.
MyRepository to repo MongoDB, niestety skazani jesteśmy na starą wersje (spring-data-mongodb-1.5.6.RELEASE, spring-data-commons-1.8.6.RELEASE) w której nie ma możliwości obsługi transakcji.
Aplikacja działa w klastrze, więc synchronizacja tej metody nie pomoże.
Jakieś pomysły jak to rozwiązać?