2016-06-01 2 views
0

У меня есть приложение, которое я планирую развернуть в Google App Engine. Доступ к хранилищу данных осуществляется через JPA. У меня также есть несколько задач cron, которые работают в течение дня. Мой вопрос: существует ли способ, по которому я могу существенно запретить доступ к некоторым записям хранилища данных во время выполнения задачи cron?«блокировка» доступа к хранилищу данных при запуске задачи cron

Предположим, что записи хранилища данных для конкретной таблицы были ордерами, и было задание cron, которое «обрабатывает» эти заказы. Я не хочу, чтобы пользователи могли изменять порядок во время выполнения этой задачи.

Моя первая мысль заключалась в том, чтобы все объекты реализовали простой интерфейс, называемый заблокированным, и задача cron установила значение блокировки true для всех объектов, которые оно собиралось обработать, а затем разблокировать их в конец, но это потребует тонны обновлений базы данных каждый раз, когда запускается cron, и я уверен, что должен быть более эффективный способ.

Любые идеи?

ответ

1

Посмотрите на this transaction mechanism. Транзакции обеспечивают гарантию того, что любые изменения, требуемые для отдельных объектов, будут синхронизированы и, следовательно, предотвратят потенциальное состояние гонки.

Или вы можете добавить свойство "state" в свою модель заказа. Чьи значения могут быть «обработкой», «ожиданием», «доставкой» и т. Д. Затем ваш cron может изменить его, и ваш логин читает его, чтобы каждый мог его модифицировать.

Смежные вопросы