2012-02-16 7 views
0

クォーツジョブのトリガを達成しようとしていて、何とかそのジョブを特定のユーザまたはセッションにバインドし、ジョブ。Grailsでバックグラウンド操作(Quartzジョブ?)の状態を取得するには

基本的には、ユーザーがログインするたびにジョブをトリガーする必要があります。このジョブはそのユーザー固有の情報をダウンロードします。数分かかることがあります。また、これらのジョブの多くは、同時に。

ジョブが実行されている間、ユーザーはサイトの別のページにアクセスしている可能性があります。つまり、ジョブを中断する必要はないため、ジョブをトリガーする方法が必要です最初に特定のユーザーに対して実行中のものがあるかどうかを確認します。ジョブが完了したらUIを更新する機能も必要です。

私はここで敗北しています。私はGoogleで多くを見つけることができませんので、私は本当に任意の洞察に感謝します。

答えて

0

Executor Pluginをご覧ください。 GrailsのアーティファクトにcallAsync() MetaMethodを追加すると、Java Futureオブジェクトが返され、非同期呼び出しのステータスと結果を取得できます。

Quartzのスケジューリング機能も必要な場合は、ロジックをGrailsサービスに入れ、状況によってはQuartzジョブかcallAsync()経由でServiceメソッドを呼び出してください。

+0

ありがとう、それをチェックしてください。 ajaxを介してステータスをチェックする必要がある場合は、Futureオブジェクトで何ができるのですか?callAsyncがバックグラウンドで実行されている間に、複数のリクエストにわたってステータスをチェックする必要があります。 – RyanLynch

+0

セッションの標準的な場所に保存し、その存在と 'isDone()'メソッドの状態をチェックして、あなたの仕事の進捗状況を調べることができます。 – schmolly159

0

私は提案しかできません。なぜユーザーがログするたびにジョブをトリガーするかを尋ねている理由はわかりません。あなたはまた、サービスコードを呼び出すことができ、ログインコントローラでのように、このために、あなたがする必要があるすべてのサービスにジョブ内のすべてのコードを配置したときジョブ・クラスで

ユーザーがログイン:

コントローラで

class EmailAlertJob { 

    def utilService 
    static triggers = { 
     cron name: 'emailCronTrigger', cronExpression: "0 15 1 ? * SUN-SAT" 
    } 
    def execute() { 
     def send= utilService.sendEmail() 
    } 
} 

def userLogsIn = { 
    utilService.sendEmail() 
} 

限り、ジョブが実行されている場合を追跡するなど、ユーザーに固有のフラグを保持し、かつ実行する前にフラグをチェックとして、このような操作を行うには、いくつかの方法がありますジョブ。

関連する問題