我写了一个 HttpSessionListener 。其中实现的sessionDestroyed 方法是去调用一个 service 中业务逻辑(去删除数据库中的一条记录)
代码如下
public void sessionDestroyed(HttpSessionEvent event) {
        HttpSession session = event.getSession();
        AlcorTUser alcorTUser = (AlcorTUser) session.getAttribute("_AlcorTUserVO");
        logger.debug("Session即將失效,更新在线用户表");
        WebApplicationContext springCtx = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext());
        UserService  userService = (UserService)(springCtx.getBean("UserService"));
        String [] names  = springCtx.getBeanDefinitionNames();
        for (int i = 0 ; i < names.length ;i++ )
        {
            logger.debug(names[i]);
        }
        
        userService.deleteOnlineUser(alcorTUser);
}UserService  已经通过 spring注入。
现在遇到的情况是:
1. UserService  是确保可以在spring中运行。因为我通过其他的spring 或者 servlet去调用 这个userService.deleteOnlineUser(alcorTUser)这个方法完全成功。
2.在这个listener中去调用的话,控制台上显示
严重: Session event listener threw exception
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is java.lang.IllegalArgumentException: interface org.hibernate.jdbc.ConnectionWrapper is not visible from class loader
at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:599)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:377)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:263)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
at com.alcor.web.services.UserService$$EnhancerByCGLIB$$6656bd3d.deleteOnlineUser(<generated>)
at com.alcor.web.flex.session.SessionListenerService.sessionDestroyed(SessionListenerService.java:39)
at org.apache.catalina.session.StandardSession.expire(StandardSession.java:702)
这个错误。是说 session事务无法建立。
我为此专门升级了hibernate3.3.1.GA 和 spring2.5.5 。仍然无法解决。
请教各位高手,是否做过类似我的这种 需求实现。这个错误应该如何解决?