即使捕获到控制器上的异常,也会清除Grails Hibernate会话。

时间:2017-08-17 08:40:17

标签: java hibernate grails

我发现,如果grails服务中发生任何问题并且未捕获到异常,则会清除hibernate会话。我有一个所有控制器的拦截器,我有一个数据库事务的方法(不好的做法)。我的情况是这样的:

在AllInterceptor类:

class AllInterceptor {
boolean before() {

def xyz = getValueFromDomain(session.domain);

def getValueFromDomain(def domain)
    {
        DomainB domainb
        try{
            def domainA = DomainA.findByUrl(domain)
            if (domainA){
                domainb = domainA.dwClient
            }
        }catch(Exception e){
            log.warn("Exception occurred");
            e.printStackTrace();
        }
        return domainb
    }
}
}

在DashBoardController:

getChartData(){

    def chartData = chartService.getChartData();
    if(!chartData){
    render (status : 204)
    }else{
    render chartData as JSON;
}}

在chartService:

getChartData(){
def chartData = '';
try{
throw new Exception();
}catch(Exception e){

}
return chartData;
}

这里,异常已经在服务中捕获,并且仪表板控制器也没有异常,但是当另一个控制器被调用时,异常被抛出为 org.hibernate.HibernateException:找不到当前线程的会话< / strong> at def xyz = getValueFromDomain(session.domain);

这里我不明白导致hibernate会话清除的原因。如果服务中的异常没有被捕获并且被传播但是异常被捕获,则它将被清除。那么为什么要清除hibernate会话呢?请帮忙 !

0 个答案:

没有答案