在单独的线程中使用$ {resource}?

时间:2011-08-09 16:28:29

标签: multithreading grails resources groovy

我想执行一项简单的任务!但不知道是否可能!

我有一个实现Runnable的groovy类,它一直在使用ThreadPool运行!我想在Runnable类中做的事情如下:

    public void run() {
          EventPhoto.withTransaction { status ->

                EventPhoto photo = new EventPhoto(event:eventInstance)

                photo.imageUrl = "${resource(dir:'images/uploads',file:image.name, absolute:true)}"
                photo.thumbnailUrl = "${resource(dir:'images/uploads',file:thumb.name, absolute:true)}"
          }
    }

问题是,由于我的线程没有在webrequest中运行,我收到以下错误:

  

java.lang.IllegalStateException:找不到线程绑定请求:是   您指的是实际Web请求之外的请求属性,   或处理原始接收线程之外的请求?如果   您实际上是在Web请求中运行并仍然收到此信息   消息,你的代码可能在外面运行   DispatcherServlet / DispatcherPortlet:在这种情况下,请使用   RequestContextListener或RequestContextFilter公开当前   请求。

那么无论如何仍然使用$ resource()??

感谢

2 个答案:

答案 0 :(得分:1)

Here is some information将告诉你如何完成你想要做的事情。另请注意,它建议您所做的是糟糕的设计。

答案 1 :(得分:0)

默认情况下,您的后台线程不能访问用于保留Photo的Hibernate会话。您可以使用Executor之类的插件在后台线程中保存域对象。