Эта проблема не имеет ничего общего с groovy / grails, но является фундаментальной проблемой одновременного изменения файла. Вы должны решать эту проблему так же, как система контроля исходного кода (SCCS), например SVN или CVS.
В частности, сохраните время последнего изменения файла. Это может быть сохранено в самом файле, в метаданных файла или в другом файле, который предоставляется каждый раз при загрузке файла XML. Когда пользователь загружает файл, проверьте, не был ли он изменен (другим пользователем) с момента получения копии. Если это так, у вас есть несколько вариантов:
- Дайте ему самую последнюю копию и скажите, чтобы он сам слил изменения (это то, что сделает дрянная SCCS)
- Попробуйте и автоматически объедините изменения, если они не конфликтуют (это то, что сделает лучший SCCS). В случае возникновения конфликтов пользователь должен будет разрешить их вручную.
Один из подходов (который может быть излишним) заключается в том, чтобы фактически использовать SCCS для решения этой проблемы управления версиями. Существует Java API для CVS (и, вероятно, для других SCCS), который позволяет программно регистрировать, извлекать и объединять файл.
В этом предложении предполагается, что вам необходимо разрешить одновременное изменение файла. Если нет, то было бы проще решить проблему, используя подход, запрещающий одновременную модификацию.
Обновление:
Некоторая информация о свойстве version
, которое один из упомянутых комментаторов имеет в разделах 5.3.5 и 5.5.2.7 справочного руководства Grails