2016-06-01 5 views
0

Google App Engineにデプロイする予定のアプリケーションがあります。データストアへのアクセスはJPA経由です。また、1日中実行されるいくつかのcronタスクがあります。私の質問は、私は基本的にcronタスクの実行中に特定のデータストアエントリにアクセスすることを防ぐことができる方法ですか?cronタスクの実行中に 'ロック'データストアへのアクセス

特定のテーブルのデータストアエントリがOrdersであり、これらのオーダーを「処理中」のcronタスクがあったとします。私は、そのタスクが実行中にユーザーが注文を変更できるようにしたくありません。

私の最初の考えは、すべてのエンティティにlockedという単純なインターフェイスを実装させ、cronタスクがロック値をtrueに設定して処理しようとしていたすべてのエンティティについてロックし、終わりですが、それはcronが実行されるたびに大量のデータベース更新を必要とし、より効率的な方法が必要であると確信しています。

アイデア?

答えて

1

this transaction mechanismをご覧ください。トランザクションは、個々のエンティティに必要な変更が同期され、潜在的な競合状態を防止するという保証を提供します。

また、注文モデルに「状態」プロパティを追加することもできます。あなたの値は "処理中"、 "保留中"、 "納品済み"などです。それからあなたのcronはそれを変更することができ、あなたのログインはそれを読んで誰でもそれを修正できるようにします。

関連する問題