0

進行中のサービスまたはジョブをキャンセルまたは停止することは可能でしょうか? たとえば、サービスのメソッドを呼び出すコードがあり、ユーザーが突然その操作をキャンセルしたいとします。それを停止するか、サービスがトランザクションであるためキャンセルされる前に行われた変更をロールバックすることは可能ですか? このコードがあるとしましょう:

class SomeService {
    static transactional = true
    
    def someMethod() {
        //some business logic here 
    
        SomeTriggeredJob.triggerNow((java.util.LinkedHashMap)[params: queriedParams]
    }
}

すでに実行されている場合、これをキャンセルする方法はありますか?

4

3 に答える 3

0

ユーザーがプロセスをキャンセルし、フラグをセッションまたはデータベースに保存する場合は、いくつかのフラグを false に設定します。実行中のメソッド/ジョブで、ループを配置し、毎回フラグを確認します。そのため、フラグが false になった場合は、次回はジョブを実行しないでください。たとえば、ユーザーがセットをキャンセルした場合

session.cancelFlag = false

そして、あなたの仕事では、次のようなことをしてください

def jobMethod(){
    someLoop.each{
        if(session.cancelFlag){
            Do your work here !
        }
    }
}
于 2013-02-07T12:26:15.060 に答える
0

1 つのサービスのトランザクション コンテキストをキャンセルするには、サービスのこの送信を行う必要がある場合は、サービスでスローを起動できます。これをメソッドにカプセル化できます。

serviceExample.doCancel()

*"その結果、すべてのメソッドがトランザクションにラップされ、メソッドが実行時例外 (つまり、RuntimeException を拡張するもの) またはエラーをスローすると、自動ロールバックが発生します。トランザクションの伝播レベルは、デフォルトで PROPAGATION_REQUIRED に設定されています。チェック済みの例外トランザクションをロールバックしないでください。Groovy ではチェック済み例外とチェックなし例外の区別があいまいですが、Spring はこれを認識せず、デフォルトの動作が使用されるため、チェック済み例外とチェックなし例外の違いを理解することが重要です。"*

Grails ドキュメント - サービス

于 2013-02-07T13:40:58.610 に答える
0
  1. ユーザーがキャンセル要求を送信できるようにします。
  2. サーバー側で、ジョブがアクセスできる DB またはセッションにフラグを設定します。
  3. ジョブはまずその値を読み取り、それに応じて続行またはキャンセルする必要があります。
于 2013-02-07T08:25:51.093 に答える