2016-11-30 3 views
0

Я использую grails API «Promise» для запуска потока.бегущая нить в grails groovy

резьбы не выполняет следующие действия

csv.splitEachLine(',') { row -> 
       insertRecord = Code.findByAni(row[0]) ?: new SurveyProActive(
         cid: row[1], 
         ani: row[0], 
         data_time: new Date(), 
         dnis: Code2.findById((Long) row[2])?.dialNumber, 

       ).save(failOnError: true, flush: true) 
      } 
     } 

Я просто не деться, как решить эту проблему, я обращенную.

Во всяком случае, я получаю следующие исключения

ERROR org.grails.web.errors.GrailsExceptionResolver - HibernateException occurred when processing request: [POST] /Survey/proactiveSurvey - parameters: 
a: 17 
No Session found for current thread. Stacktrace follows: 
org.hibernate.HibernateException: No Session found for current thread 
at org.grails.orm.hibernate.GrailsSessionContext.currentSession(GrailsSessionContext.java:116) 
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:687) 
at org.grails.orm.hibernate.HibernateSession.createQuery(HibernateSession.java:176) 
at org.grails.orm.hibernate.HibernateSession.createQuery(HibernateSession.java:170) 
at org.grails.datastore.gorm.finders.AbstractFindByFinder.buildQuery(AbstractFindByFinder.java:44) 
at org.grails.datastore.gorm.finders.AbstractFindByFinder$1.doInSession(AbstractFindByFinder.java:29) 
at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:318) 
at org.grails.datastore.gorm.finders.AbstractFinder.execute(AbstractFinder.java:42) 
at org.grails.datastore.gorm.finders.AbstractFindByFinder.doInvokeInternal(AbstractFindByFinder.java:27) 
at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:174) 
at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:374) 
at org.grails.datastore.gorm.GormStaticApi.methodMissing(GormStaticApi.groovy:173) 
at org.grails.datastore.gorm.GormEntity$Trait$Helper.staticMethodMissing(GormEntity.groovy:749) 
at com.ef.apps.pcs.SurveyController$_proactiveSurvey_closure4.doCall(SurveyController.groovy:334) 
at org.grails.plugins.web.async.WebRequestPromiseDecorator.invokeClosure(WebRequestPromiseDecorator.groovy:43) 
at org.grails.plugins.web.async.WebRequestPromiseDecorator$_decorate_closure1.doCall(WebRequestPromiseDecorator.groovy:30) 
at groovyx.gpars.group.PGroup$3.call(PGroup.java:289) 
at groovyx.gpars.group.PGroup$4.run(PGroup.java:313) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 
+0

Как вы создаете свое обещание? 'Promises.task {}' или 'Domain.async.task {}' –

+0

Promise.task {// мой код } –

ответ

1

Зайдите в раздел "Multiple Асинхронный GORM называет" здесь: http://docs.grails.org/latest/guide/async.html#asyncGorm. В нем говорится, что Domain.async.task{} имеет дело с привязкой нового сеанса к асинхронному потоку для вас, тогда как Promises.task этого не делает.

Если вы не можете использовать Domain.async.task{}, попробуйте также метод Domain.withNewSession{}.

Смежные вопросы