У меня есть ObjectContext, хранящийся в сеансе. Теперь у меня есть несколько запросов ajax для одного и того же сеанса, и все они изменяют данные ObjectContext. Как я могу гарантировать, что эти запросы будут потокобезопасными?
Следующая документация предполагает, что я использую вложение контекста. Может ли кто-нибудь дать мне конкретный пример того, как это работает? Или даже объяснение того, как вложенный контекст позволит выполнять потокобезопасные запросы. Или даже ссылку на документацию с лучшими практиками в этих случаях. Спасибо!
https://cayenne.apache.org/docs/3.1/cayenne-guide/persistent-objects-objectcontext.html
Вложение полезно для создания изолированных областей редактирования объектов (дочерние контексты), которые необходимо зафиксировать в промежуточном хранилище в памяти (родительский контекст) или откатить, не затрагивая изменения, уже записанные в родительском. Подумайте о каскадных диалогах графического интерфейса или параллельных запросах AJAX, поступающих в один и тот же сеанс.
Изменить: я нашел следующий абзац в документации, которая мне помогла.
Контексты, которые используются только для извлечения объектов из базы данных и объекты которых никогда не изменяются приложением, могут совместно использоваться несколькими пользователями (и несколькими потоками). Контексты, в которых хранятся измененные объекты, должны быть доступны только одному пользователю (например, пользователь веб-приложения может повторно использовать экземпляр контекста между несколькими веб-запросами в одном сеансе HttpSession, таким образом перенося незафиксированные изменения объектов от запроса к запросу, пока он не решит зафиксировать или откатить их). Даже для одного пользователя может иметь смысл использовать несколько ObjectContexts (например, контексты с областью запроса, чтобы разрешить параллельные запросы от браузера, которые изменяют и фиксируют объекты независимо)