У меня довольно общий вопрос, прошу совета.
У меня есть сервлет.
Этот сервлет имеет приватное поле.
Закрытое поле — это разновидность метаданных (открытый класс Metadata{//bla-bla-bla}).
Когда обрабатывается запрос GET, эти метаданные используются для выполнения некоторой операции.
Я хочу реализовать метод POST в том же сервлете. Пользователь загружает файл, и поле метаданных обновляется.
Проблема: одновременный доступ к этому частному полю с объектом метаданных, совместно используемым несколькими веб-потоками с использованием одного экземпляра сервлета. Операция метода POST (Обновить объект метаданных) может привести к несогласованному состоянию метаданных, и одновременный запрос GET может завершиться ошибкой.
Вопрос: как лучше всего обновить объект метаданных во время выполнения запросов GET?
Фиктивное решение:
Во время каждого запроса GET, в самом начале
Синхронизируйте объект метаданных и клонируйте его в одном блоке, затем отпустите.
Параллельные запросы GET работают с клонированной версией объекта метаданных, которая является согласованной.
Во время каждого POST-запроса.
Синхронизируйте объект метаданных и обновите его поля.
Освободить объект метаданных.
Посоветуйте или покритикуйте.