Grailsアプリケーションで長時間実行されている操作があります。私の最初の解決策は、コントローラーで操作を実行し、アクションが終了するまでユーザーを待機させることです。これは許容できる解決策ではありません。ユーザーにアクションの進行状況を表示したいと思います。進捗状況は単なるテキストです。アクションには、10秒から約30分かかる場合があります。
長時間実行しているアクションの進行状況をユーザーに表示するにはどうすればよいですか?
Grailsアプリケーションで長時間実行されている操作があります。私の最初の解決策は、コントローラーで操作を実行し、アクションが終了するまでユーザーを待機させることです。これは許容できる解決策ではありません。ユーザーにアクションの進行状況を表示したいと思います。進捗状況は単なるテキストです。アクションには、10秒から約30分かかる場合があります。
長時間実行しているアクションの進行状況をユーザーに表示するにはどうすればよいですか?
まず、バックグラウンドでジョブを実行できるように、 Executorプラグインを試してみることをお勧めします。これは非常にうまく機能します。
次に、2つのオプションがあると思います。ブラウザにAjaxを介してサーバーをポーリングして更新を依頼するか(TimがJProgressプラグインがこのようなことを行うと指摘したように)、さらに最先端を取得して、一種のサーバープッシュアプローチとしてHTML5WebWorkersを検討します。WebWorkersはで利用できません
フィールドpercentageCompleteを持つTaskまたはJobドメインクラスのようなものが必要になります。コントローラは、タスクまたはジョブを作成して保存し、新しいスレッドを生成して実行します。おそらく、実行コードをサービスに配置します。
タスクの完了時にタスクまたはジョブのpercentageCompleteフィールドを更新するのは、実行コード次第です。次に、(ajaxを介して)ジョブをポーリングして、ジョブの進行状況を確認できます。
注:完了率を決定することは、特定のコード次第です。あなたはおそらくあなたが持っている知識に基づいて最良の推測を思い付く必要があるでしょう。完了率を判断する方法が明らかな操作(ファイルのダウンロードなど)でも、確実ではありません(ネットワークの問題など)。
進捗状況を確認できますか?パーセントで言いましょう?長い操作をクォーツジョブ(バックグラウンド)として作成し、ajaxを介してジョブの状態/長期実行の進行状況を照会します。
JProgressプラグインが役立つかもしれませんが、私はそれを試したことがありません...