我写了一个 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 。仍然无法解决。
请教各位高手,是否做过类似我的这种 需求实现。这个错误应该如何解决?
代码如下
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 。仍然无法解决。
请教各位高手,是否做过类似我的这种 需求实现。这个错误应该如何解决?
解决方案 »
- 登录http://localhost/bugzilla/报错500
- servlet中的Filter和struts2的intercepter实现原理,aop?责任链?
- 紧急求助,关于线程安全问题
- 如何在普通java类中保存错误,并把错误传递到指定jsp页面上
- jsf+hibernate+mysql高手指点
- 关于spring和webservice
- Java天下群(17129182) - 欢迎各Java爱好者加入
- 关于Struts的一个小问题.About ActionForm!@!
- 关于EJBLocalObject和EJBLocalHome
- Java写XML文件的中文问题:GBK<->UTF-8,为什么UTF-8的XML里面是GBK的中文?
- 公司要研发一个web版的即时通讯工具,请问需要研究哪些技术。
- hibernate锁问题?急!急!
HttpSession session = event.getSession();
AlcorTUser alcorTUser = (AlcorTUser) session.getAttribute("_AlcorTUserVO");
logger.debug("Session即將失效,更新在线用户表");
ApplicationContext 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);
}按照上述方式试试看, 反正我这里是通过的,你的那个WebApplicationContext我没试过!