Как вы можете понять по названию моей ситуация:Grails 1.3.7 - мульти жилец плагин и мульти операция нарезания резьбы - поток не может получить доступ к арендатору
- Я использую очень старую версию Grails (I не может изменить его в данный момент)
- в этом проекте я использую плагин Многоквартирный, подробно я установил
- Многоквартирный-жильный: 1.0.3
- -EHCache Многоквартирный: 1.0.1
- Я хочу разделить метод (требуется 2-3 минуты для его выполнения) и распараллелить операции.
Вот мой код:
def threadPoolSize = 10
def threadPool = Executors.newFixedThreadPool(threadPoolSize)
def threadClosure = { myWork ->
def partialQuantity = 0
myWork.each { currDetail ->
MyTableDomainClass.findByCode(currDetail.myTableCode)
// Do some stuff
}
return partialQuantity
}
try{
def worksForThreads = new ArrayList<org.codehaus.groovy.grails.web.json.JSONArray>(10)
// Prepare works for thread
Integer x = 0
allWorks.each{ singleOrder ->
if(worksForThreads[x] == null)
worksForThreads[x] = new org.codehaus.groovy.grails.web.json.JSONArray()
worksForThreads[x].add(singleOrder)
x = (x+1) % threadPoolSize
}
List<Future> futures = worksForThreads.collect({ myWork ->
println "\t\tPrepare thread with ${myWork.size()} tasks"
threadPool.submit({ ->
threadClosure myWork
} as Callable)
})
//Start thread and collect result
futures.each{
def threadResult = it.get()
println "\t\tThread result ${threadResult}"
totQuantity = totQuantity+threadResult
}
}catch(Exception e){
println "Error during thread works ${e}"
}finally{
threadPool.shutdown()
}
Таким образом, код должен быть хорошо, но во время выполнения потока я получаю эти ошибки:
[pool-9-thread-2] [tenant 0] ERROR util.JDBCExceptionReporter - Table 'MySchema.MyTable' doesn't exist
и
Error during thread works java.util.concurrent.ExecutionException: org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query;
SQL [select this_.id as id24_0_, this_.code as code24_0_, this_.description as descript3_24_0_, this_.incr as incr24_0_, this_.is_default as is5_24_0_, this_.lang as lang24_0_, this_.last_updated as last7_24_0_, this_.min as min24_0_, this_.name as name24_0_, this_.ordasc as ordasc24_0_, this_.parent_id as parent11_24_0_, this_.parent_mult as parent12_24_0_, this_.prod_code as prod13_24_0_, this_.status as status24_0_, this_.unit_name as unit15_24_0_
from MyTable this_ where this_.code=?]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
Я думаю, что проблема связана с областью арендатора. Я думал использовать службу для получения всех данных из БД, но я хочу знать, есть ли способ получить правильную область арендатора в потоке или передать ее.
Спасибо всем!