grails - 异步作业出错

标签 grails groovy

我正在尝试创建一个不会阻止请求的异步任务。用户发出请求,任务将启动, Controller 将呈现“作业正在运行...”,这是为了避免请求被阻塞等待任务完成。
任务完成后,它将执行 onComplete 并对该任务的结果执行某些操作(例如调用将向用户发送邮件的服务)

| Error 2014-09-16 17:38:56,721 [Actor Thread 3] ERROR gpars.LoggingPoolFactory  - Async execution error: null

代码如下:
package testasync

import static grails.async.Promises.*

class TestController {

  def index() {
    //Create the job
    def job1 = task {
        println 'Waiting 10 seconds'
        Thread.sleep(10000)
        return 'Im done'
    }
    //On error
    job1.onError { Throwable err ->
        println "An error occured ${err.message}"
    }
    //On success
    job1.onComplete { result ->
        println "Promise returned $result"
    }
    render 'Job is running...'
  }

完整的堆栈跟踪:
| Error 2014-09-17 10:35:24,522 [Actor Thread 3] ERROR gpars.LoggingPoolFactory  -  Async execution error: null
Message: null
   Line | Method
 ->>   72 | doCall    in org.grails.async.factory.gpars.GparsPromise$_onError_closure2
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
  |     62 | run       in groovyx.gpars.dataflow.DataCallback$1
  |   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
  |    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
  ^    745 | run . . . in java.lang.Thread

最佳答案

我结束了使用带有 grails-executor 插件的 executor 框架。我在这里上传了一个非常基本的例子:https://github.com/agusl88/grails-async-job-queuqe

该代码使用了 grails-executor 插件的“自定义”版本,我从插件库中合并了一些 PR 并打包为 jar,仅用于测试 Prop 。插件的仓库是这样的:https://github.com/basejump/grails-executor

关于grails - 异步作业出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25878249/

相关文章:

java - Java8的.map()流操作的Groovy替代方案

web-services - 如何使用 GroovyWS 生成 WSDL

unit-testing - 如何在Grails 3中填充域类以进行单元测试

grails - 使用特定的 id/email 保存到 grails

javascript - 在 html javascript 中添加图像代替按钮

sql - 连接 URL 的 Grails SqlException

java - groovy 脚本/java 代码从结果集中获取不同的用户

java - 如何从 grails 和 groovy 的下拉列表中选择小于或大于的年龄

Grails 2.2.0 URLMappings : Any way to use same URL with Different Verb

grails - 如何获取服务的spring bean实例,通过webflow中的依赖注入(inject)添加