spring aop,遇到Session is closed;

eshore_pal 2013-03-19 03:43:54
背景:使用spring aop记录dao层所发出的所有sql语句。

问题:使用@AfterReturning通知的时候,执行到被拦截的方法是抛了异常--Session is closed; nested exception is org.hibernate.SessionException: Session is closed

异常信息:
ERROR:  Session is closed; nested exception is org.hibernate.SessionException: Session is closed
org.springframework.orm.hibernate3.HibernateSystemException: Session is closed; nested exception is org.hibernate.SessionException: Session is closed
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679)
at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:793)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:683)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:845)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:822)
at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:411)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:114)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)
at com.eshore.mall.service.sysmgr.datadictionary.DataDictionaryService$$EnhancerByCGLIB$$5b37271f.getDataDictionary(<generated>)
at com.eshore.mall.web.help.action.HelpAction.doCache(HelpAction.java:211)
at com.eshore.mall.web.help.action.HelpAction$$FastClassByCGLIB$$9ebb387d.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:50)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:55)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)......


Caused by: org.hibernate.SessionException: Session is closed
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:157)
at org.hibernate.transaction.JDBCTransaction.rollbackAndResetAutoCommit(JDBCTransaction.java:213)
at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:192)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:676)
... 90 more


请各位大侠指点迷津。
...全文
120 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
eshore_pal 2013-03-19
  • 打赏
  • 举报
回复
补充说明下,换成@Before(value="databasePointCut()")和@Around(value="databasePointCut()")切不会出现这个错误,一切正常
eshore_pal 2013-03-19
  • 打赏
  • 举报
回复
service层
@Service("dataDictionaryService")
public class DataDictionaryService {

    @Autowired
    private CommonDao commonDao;

    @SuppressWarnings("unchecked")
    @Cacheable(cacheName = "system")
    public List<DataDictionary> getDataDictionary(String type, String provinceCode) {
        Session session = commonDao.currentSession();

        StringBuffer hql = new StringBuffer("from " + DataDictionary.class.getName()
                + " as d where 1=1 ");

        if (StringHelper.isNotNull(type)) {
            hql.append(" and d.type=:type ");
        }
        if (StringHelper.isNotNull(provinceCode)) {
            hql.append(" and d.provinceCode=:proCode ");
        }
        hql.append("order by d.orderList asc");
        Query query = session.createQuery(hql.toString());
        if (StringHelper.isNotNull(type)) {
            query.setString("type", type);
        }
        if (StringHelper.isNotNull(provinceCode)) {
            query.setString("proCode", provinceCode);
        }
        // 启用查询查询缓存
        query.setCacheable(true);
        return query.list();
    }
    
}
eshore_pal 2013-03-19
  • 打赏
  • 举报
回复
切面类
@Aspect
@Component("logAspectBean")
public class LogAspectBean {
    
    
    public void servicePointCut(){}
    
    /** dao层总的切入点 */
    @Pointcut("execution(* com.eshore.mall.database.dao..*(..))")
    public void databasePointCut(){}
    
    
    
    /**  方法执行完之后做日记  */
    @AfterReturning(value = "databasePointCut()", 
            argNames = "outputParmars", returning = "outputParmars")
    public void logInfo(JoinPoint joinPoint, Object outputParmars) {
        System.out.println("===========后置日记===========");
        String account = this.getUserAccount();
        String className = joinPoint.getTarget().getClass().getName();
        String function = joinPoint.getSignature().getName();
        Object[] inputParmars = joinPoint.getArgs();
        System.out.println("类:" + className + ";方法:" + function+";用户:"+account);
        LogUtil log = new LogUtil();
        log.doLog(className, function, inputParmars, outputParmars, LogLevel.INFO.getCode(),
                account);
    }   
    
    /**  用户信息 */
    private String getUserAccount() {
        HttpServletRequest request = SysContent.getRequest();
        HttpSession session = SysContent.getSession();
        if (session != null) {
            SessionUserInfo sessionUserInfo = SessionUtil.getSessionUserInfo(request);
            if (sessionUserInfo != null) {
                return sessionUserInfo.getAccount();
            }
            else
                return "";
        }
        else
            return "";
    }
    
}

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧