Если быть точным, вы имеете в виду не оптимистическую блокировку, а оптимистический параллелизм (без блокировки).
Использование метки времени для версии просто для поддержки устаревшей базы данных, потому что современная база данных может (по крайней мере теоретически) работать быстрее, чем точность хранения метки времени.
Использовать свойство целочисленной версии очень просто:
- На вставке: установите версию на 1
- При обновлении и удалении: увеличьте версию на 1 и добавьте «где версия = @ версия» для каждого sql statementent. Вернуть количество измененных записей. Бросьте исключение StaleObjectStateException, если количество измененных записей отличается от ожидаемого.
Лично я не стал бы создавать два отдельных приложения, записывающих одни и те же данные в нестандартной ситуации, потому что это означает, что бизнес-логика должна дублироваться и изменения должны применяться к двум приложениям, в том числе, когда изменение относится к только одно из приложений.